【发布时间】:2013-01-23 22:07:30
【问题描述】:
我想知道是否有人可以帮助我解决c++(gcc 最新版本)中的奇怪行为。下面是一些成功编译的代码,由于缺少适当的构造函数,我预计会出现编译时错误。谁能解释一下是怎么回事?
#include <iostream>
using namespace std;
struct ClassA {
ClassA() {cout << "hello" << endl;}
void speak() {cout << "I am class A" << endl;}
~ClassA() {cout << "goodbye" << endl;}
};
struct ClassB {
// just an empty struct
};
int main() {
ClassA myClassA(ClassB()); // trying to construct class A from an rvalue reference to class B is ok?
return 0;
}
}
如果我尝试调用class A 的函数,我会收到编译时错误:
int main() {
ClassA myClassA(ClassB());
myClassA.speak();
return 0;
}
结果:
error: request for member ‘speak’ in ‘myClassA', which is of non-class type ‘ClassA(ClassB (*)())’
谢谢!
【问题讨论】:
-
@AndyProwl,确实如此。
标签: c++ constructor rvalue most-vexing-parse