将临时绑定到左值引用

2022-01-17 00:00:00 compiler-construction c++ rvalue lvalue

我有以下代码

string three()
{
    return "three";
}

void mutate(string& ref)
{
}

int main()
{
    mutate(three()); 
    return 0;
}

你可以看到我正在将 three() 传递给 mutate 方法.这段代码编译得很好.我的理解是,不能将临时对象分配给非常量引用.如果是,这个程序是如何编译的?

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?

有什么想法吗?

尝试过的编译器:VS 2008 和 VS2010 Beta

Compilers tried : VS 2008 and VS2010 Beta

推荐答案

以前是用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.

相关文章