“invalid initialization of non-const reference” 是什么意思?

4
编译此代码时,我收到以下错误信息:

在函数'int main()'中: 第11行:错误:无法从类型为'Main'的临时变量初始化非const引用'type 'Main&''

这是我的代码:
template <class T>
struct Main
{
    static Main tempFunction(){
       return Main();
    }
};

int main()
{
   Main<int> &mainReference = Main<int>::tempFunction(); // <- line 11
}

我不明白为什么?有人可以解释一下吗?

1
请发布编译器的精确错误信息。 - Thomas Matthews
你的模板声明不依赖于参数化类。 - Thomas Matthews
@Thomas Matthews:是的,但错误不是因为那个。 - Donald
8
"出现了一些错误"?你获得了最模糊陈述奖!是什么错误?哪一行?使用了哪个编译器? - abelenky
1个回答

9

C++中,临时对象不能绑定到非常量引用。

Main<int> &mainReference = Main<int>::tempFunction();

在这里,您试图将一个rvalue表达式的结果赋给一个非常量引用mainReference,这是无效的。

尝试将其设置为const


2
http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ - log0
通常这不会导致编译器发生错误。通常只会得到一个警告。 - Edward Strange
3
不,这个程序是不规范的。MSVC++支持这个作为非标准扩展并编译代码。 - Prasoon Saurav
@Prasoon 这篇文章完善了你的答案。 - log0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接