考虑简单的C ++代码:
class X {
int a_, b_;
public:
X(int a) : a_(a) {} // b not mentioned in intializer list
int get_sum() { return a_ + b_; }
};
int foo () {
X x(2); // x.b_ is indetermined
return x.get_sum(); // returns garbage
}
在此代码段中,x.b_
为default-initialized以确定价值。我尝试了gcc 7.2和clang 5.1,没有人警告我这个简单的案例。
例如clang:
clang++ init.cc -S -Wuninitialized -Wall -Wextra -Weffc++
静默编译。
这是非常不方便的,而且,我认为,对于这样的事情来说,克拉很容易理解。
我是否遗漏了一些让编译器报告这种情况的明显方法?或者可能是我错了,x.b_
已正确初始化?