ham*_*els 1 c++ initialization member-initialization
在多次简化我的代码后,我发现了以下问题的原因。
class B {
public:
B(const int x)
:_x(x) {}
const int _x;
};
class C {
public:
C(const B& b)
: _b(b), _b2(_b._x) {}
B _b2; // line 1
const B& _b; // line 2
};
int main() {
B b(1);
C c(b);
}
Run Code Online (Sandbox Code Playgroud)
警告 (clang 8.0.0)
test16.cpp:11:22: warning: reference '_b' is not yet bound to a value when used here [-Wuninitialized]
: _b(b), _b2(_b._x) {}
^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)
g++-6 编译程序。运行该程序会导致分段错误。
类成员的初始化是遵循成员初始化列表: _b(b), _b2(_b._x)的顺序()还是类中成员的顺序(如B _b2; const B& _b;)?
成员变量的初始化按照它们在类中声明的顺序进行。
http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-order
和:
http://en.cppreference.com/w/cpp/language/initializer_list
3) 然后,非静态数据成员按照类定义中的声明顺序进行初始化。
| 归档时间: |
|
| 查看次数: |
2457 次 |
| 最近记录: |