这个简单的代码会产生一些意想不到至少对于我来说…
#include <iostream>
class cls1
{
public:
cls1(){std::cout << "cls1()" << std::endl;};
cls1(int, int) : cls1() {std::cout << "cls1(int, int)" << std::endl;}
};
class cls2 : public cls1
{
public:
using cls1::cls1;
cls2() = delete;
};
int main()
{
cls2 c();
return 0;
}
我希望输出为:cls1(),因为cls2删除了默认构造函数,但代码不输出任何内容,尽管它编译并运行正常.我正在使用GCC ver. 4.8.2.编译:
$g++ -std=c++11 -g test.cpp
$./a.out
问题是:它应该如何表现?
谢谢!
最佳答案 你实际上并没有在main()中创建cls2的实例;你正在声明一个返回cls2的函数.这是“最令人烦恼的解析”的一个例子.例如,参见
http://en.wikipedia.org/wiki/Most_vexing_parse