【发布时间】:2017-02-28 10:56:48
【问题描述】:
为什么这段代码不正确?
class Method
{
public:
Method(decltype(info2) info1);
virtual ~Method(){}
protected:
QSharedPointer<info> info2;
};
但是这段代码是正确的:
class Method
{
public:
virtual ~Method(){}
protected:
QSharedPointer<info> info2;
public:
Method(decltype(info2) info1);
};
为什么类构造函数的位置很重要? 我认为定义类构造函数的地方并不重要。
【问题讨论】:
-
也许编译器在你声明之前无法确定
info2的类型 -
@DragonRock 编译器按照标准要求做,你能提供参考吗?
-
@PiotrSkotnicki eel.is/c++draft/basic.lookup.unqual#7
-
@PiotrSkotnicki 或者它没有。或者标准没有涵盖它,这是一个不太可能的疏忽,但我找不到在使用前需要定义的声明。虽然有一段话说
decltype操作数类型不必是完整的。这里的问题是有意义的参考,还是缺少参考。 -
@PiotrSkotnicki 如果我有参考资料,我会回答而不是留下以“也许”开头的评论。
标签: c++ c++11 constructor