内容简介:http://stackoverflow.com/questions/26508609/is-the-result-of-a-cast-an-rvalue
让
int a = 0;
那么(C)是标准C中的值?
不同的编译器对此代码显示不同的结果:
#include <iostream> using namespace std; void f(int& x) { cout << "l value" << endl; } void f(int&& x) { cout << "r value" << endl; } int main() { int a = 0; f((int)a); }
编译器具有不同的结果:
)禁用.
我们可以看到,这应该是C标准草案5.4的显着类型转换(铸造符号)第1段的重要值(特别是prvalue)(强调我的):
The result of the expression (T) cast-expression is of type T. The
result is an lvalue if T is an lvalue reference type or an rvalue
reference to function type and an xvalue if T is an rvalue reference
to object type; otherwise the result is a prvalue. [ Note: if T is
a non-class type that is cv-qualified, the cv-qualifiers are ignored
when determining the type of the resulting prvalue; see 3.10. —end
note ]
除此之外,我建议在web编译器上使用 rextester ,因为rextester可以让您共享程序,并且还可以实时共享.
更新
Ben Voigt指出这个 bug report ,所以似乎Visual Studio实际上产生了一个左值.所以这不仅仅是 extension which allows temporary objects to be bound to non-const lvalue references 的一个例子.
因为dyp也指出了 gcc used to have a cast to lvalue extension .
更新2
Mgetz提交了 bug report ,答复是这是通过使用 /Zc:rvalueCast flag 修复的,标志的描述如下:
When the /Zc:rvalueCast option is specified, the compiler correctly identifies an rvalue reference type as the result of a cast operation in accordance with the C++11 standard. When the option is not specified, the compiler behavior is the same as in Visual Studio 2012. By default, /Zc:rvalueCast is off. For conformance and to eliminate errors in the use of casts, we recommend that you use /Zc:rvalueCast.
这个标志在未来的版本中是否默认启用是不清楚的.
http://stackoverflow.com/questions/26508609/is-the-result-of-a-cast-an-rvalue
以上所述就是小编给大家介绍的《c++ 演员的结果是高价值吗?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 240万名演员职业生涯数据,揭露演艺圈“潜规则”
- DeepFake“换脸视频”:当你的头出现在A片演员身体上
- 《延禧攻略》演员大起底——利用Python+bs+pyecharts分析绘制词云和玫瑰图
- OTA价值升级的三大要素:内容定制、数据分析、价值差异化
- 阅读源码的真正价值
- 业务开发的价值
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。