【发布时间】:2012-07-16 16:33:48
【问题描述】:
在 Visual Studio 2012RC 中有一些非标准扩展。例如这段代码编译:
#include <string>
using namespace std;
void value(string& value)
{
value = "some";
}
int main()
{
value(string("nice"));
}
并收到警告说它是非标准扩展。所以,我想了解它是如何真实的以及代码如何转换(右值引用或带有 const_cast 的 const 引用)?
【问题讨论】:
-
AFAIK,Visual Studio 2010(可能还有 2008)也支持这种行为。 VC++ 编译器允许修改临时对象。
-
请注意,这是最糟糕的风格,最坏的情况是容易出错 ("Don't you care it's a temporary you are modifying?")
-
@flamingo:嗯,在 C++ 中修改临时对象从来都不是违法的。在 C++ 中,一直允许调用非 const modifying 临时成员函数。然而,使用“直接”语法附加非常量引用是非法的。如我的回答所示,前者实际上允许人们解决后者。
标签: c++ visual-studio