【发布时间】:2018-06-20 13:04:11
【问题描述】:
我声明了一个类模板如下:
template<typename T>
class C{
public:
C(T&,
shared_ptr<C<T>>&
);
// rest of the public interface
private:
T& rData;
shared_ptr<C<T>>& rP;
};
随后,我将模板构造函数定义为:
template<typename T> C<T>::C(T& rDataArg,
shared_ptr<C<T>>& rPArg
):rData(rDataArg),
rP(rPArg)
{}
对于上述定义,我从 g++ 编译器收到以下 -Wreorder 警告:
警告:字段 'rData' 将在字段 'rP' 之后初始化 [- 重新排序]
我在构造函数定义中颠倒了初始化顺序,警告消失了。
由于模板类的两个成员都是引用,所以我很好奇为什么构造函数中的初始化要遵守编译器指定的顺序。
请分享你的想法。
【问题讨论】:
-
也许this 对你有帮助。
-
@FERNman 谢谢,这就是我正在寻找的答案。
标签: c++ constructor initializer operator-precedence