gpt4 book ai didi

c++ - -Wreorder 和构造函数初始化列表

转载 作者:行者123 更新时间:2023-11-30 03:26:37 28 4
gpt4 key购买 nike

我声明了一个类模板如下:

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 警告:

warning: field 'rData' will be initialized after field 'rP' [- Wreorder]

我颠倒了构造函数定义中的初始化顺序,警告消失了。

由于模板类的两个成员都是引用,我很好奇为什么构造函数中的初始化要遵循编译器指定的顺序。

请分享您的想法。

最佳答案

Since both the members of the template class are references, I am curious about why the initialization in the constructor should adhere to the order specified by the compiler.

它不是由编译器指定的,它是由指定的。您可以在此处指定它:

template<typename T>
class C{
private:

T& rData; // first
shared_ptr<C<T>>& rP; // second
};

成员将始终按声明顺序初始化。这是错误的常见来源,当一个错误最终依赖于另一个值(value)不确定的错误时。该警告试图帮助您防止这种情况发生。尽管在您的特定情况下这不是问题,因为成员不依赖于彼此的初始化顺序。

关于c++ - -Wreorder 和构造函数初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48203028/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com