将临时绑定到左值引用
我有以下代码,
string three()
{
return "three";
}
void mutate(string& ref)
{
}
int main()
{
mutate(three());
return 0;
}
您可以看到我将 two() 传递给 mutate 方法。这段代码编译得很好。我的理解是,临时变量不能分配给非常量引用。如果是,这个程序是如何编译的?
有什么想法吗?
编辑:
尝试过的编译器:VS 2008 和 VS2010 Beta
I have the following code
string three()
{
return "three";
}
void mutate(string& ref)
{
}
int main()
{
mutate(three());
return 0;
}
You can see I am passing three() to mutate method. This code compiles well. My understanding is, temporaries can't be assigned to non-const references. If yes, how this program is compiling?
Any thoughts?
Edit:
Compilers tried : VS 2008 and VS2010 Beta
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
它曾经在VC6编译器中编译,所以我猜想VS2008为了保持向后兼容性而支持这个非标准扩展。尝试使用 /Za (禁用语言扩展)标志,那么你应该会得到一个错误。
It used to compile in VC6 compiler, so I guess to maintain backward comptibility VS2008 is supporting this non-standard extension. Try with /Za (disable language extension) flag, you should get an error then.
它是VC++的邪恶扩展。如果您使用 /W4 进行编译,那么编译器会警告您。我猜您正在阅读 右值参考:VC10 中的 C++0x 功能,第 2 部分。这篇文章也提到了这个问题。
It is VC++'s evil extension. If you compile with /W4 then the compiler will warn you. I guess you are reading the Rvalue References: C++0x Features in VC10, Part 2. This article also mentioned that issue.
这是一个 Microsoft 扩展,用于模仿许多其他 Microsoft 编译器的行为。如果启用 W4 警告,您将看到该警告。
This is a Microsoft Extension, to mimic the behavoir of many other microsoft compilers. If you enable W4 warnings, you will see the warning.
它无法编译,至少使用 g++ 4:(
行号减少了 3 或 4,因为我必须添加 #include 和 'using' 行。)
所以,你的编译器出现没有应有的严格。
It doesn't compile, with g++ 4 at least:
(The line numbers are off by 3 or 4, because I had to add the #include and 'using' lines.)
So, your compiler appears to not be as strict as it should be.
我想这取决于编译器。 g++ 4.1.2 给了我这个。
也许因为你没有做任何事情,所以调用被优化掉了。
I guess it depends on the compiler. g++ 4.1.2 gives me this.
Maybe because you're not doing anything the call is optimized away.