为什么我传入 ClassA
构造函数的对象被认为是一个临时的 rvalue 呢?我知道将参数设置为 const
可以消除错误,但我想了解发生了什么。
这种行为在函数调用中可以正常工作,但在构造函数中却不行吗?
#include <iostream>
using namespace std;
class ClassA {
public:
ClassA() {}
ClassA(ClassA&) {}
};
void f(ClassA&) {}
int main() {
ClassA a;
// Invalid initialization of non-const reference of type 'ClassA&' from an
// rvalue of type 'ClassA'
ClassA b = ClassA(a);
// Works fine
f(a);
return 0;
}
f(ClassA(a))
也是无效的。 - cpplearner