【发布时间】:2015-08-04 04:41:42
【问题描述】:
我在尝试对对象使用 C++ 引用时遇到以下错误。在引用this question 之后,我了解到这是因为A() 返回一个临时变量,根据设计,不允许non-const reference 引用该变量。但是,我仍然很好奇为什么 C++ 是这样设计的。为什么A& ra2 = A(); 不能作为A a1 = A(); A& ra1 = a1; 的简写?众所周知,MSVC 通过扩展支持这种语法,但其他实现中不包含该语法。这种速记有什么特别的缺点吗?
class A {
public:
int a = 0;
};
int main()
{
A a1 = A();
A& ra1 = a1; //okay
A& ra2 = A(); //error: invalid initialization of non-const reference of type ‘A&’ from an rvalue of type ‘A’
return 0;
}
【问题讨论】:
-
duckduckgo.com/… -- 你应该先做一些研究。
-
@UlrichEckhardt 我想我知道错误消息的含义以及它发生的原因。我不是在问如何编写正确的代码,而是我的问题更多是关于这里的语义差异是什么。因为
ra1和ra2在语义上具有基本相同的净效果。那么 C++ 不允许第二种初始化方式有什么意义呢? -
@bl4ck5un 所以。 . .你想要一个“do what I mean”编译器吗?
-
@imallett 我说的是 C++ 作为一种编程语言的设计。
-
这与移动语义无关。 “用移动语义分配”甚至没有意义。