g++ 在某个类成员未初始化时不发出警告
g++ doesn't warn when some class member is not initialized
我有以下代码,我希望gcc可以在第6行或第17行发出警告,但gcc没有这样做。
zhifandeMacBook-Pro:CppCodeExample zhifan$ cat -n main.cpp
1 #include <iostream>
2
3
4 class X {
5 public:
6 X() {}
7 int getA() const { return a;}
8 bool getB() const {return b;}
9 private:
10 int a;
11 bool b;
12 };
13
14
15 int main(int argc, char *argv[])
16 {
17 X x;
18 std::cout << "hello " << x.getA() << std::endl;
19 return 0;
20 }
zhifandeMacBook-Pro:CppCodeExample zhifan$ g++ main.cpp -Wall -O2 -Wuninitialized
zhifandeMacBook-Pro:CppCodeExample zhifan$
我可以得到一个警告,因为类X的构造函数没有初始化成员吗?
GCC使用-Weffc++
选项("有效C++"选项(发出警告。从4.1.2开始,我在所有版本上都尝试过这种方法。
<source>: In constructor 'X::X()':
<source>:6: warning: 'X::a' should be initialized in the member initialization list
<source>:6: warning: 'X::b' should be initialized in the member initialization list
Compiler returned: 0
你可以在这里看到godbolt上的现场演示。
相关文章:
- g++ 在某个类成员未初始化时不发出警告
- 为什么 gcc 会给我可能未初始化的警告 deque::insert 带有过滤范围
- 在 Cocos2dx 中初始化粒子效果后的警告 - "libpng warning: iCCP: known incorrect sRGB profile"
- 在 C++11 中轻松初始化模板类的静态成员,没有 clang 警告
- C++ 警告:在一个声明中将截断从双精度初始化为浮点数,但在另一个声明中则不初始化
- 我可以在初始化之前使用 std::array 成员变量中的 data() 指针吗?发出警告
- 为什么 gcc 警告只针对统一初始化缩小转换范围?
- 有没有办法在初始化字符串时避免来自 clang-tidy(fuchsia-default-arguments)的警告?
- 未显式初始化C++全局变量时发出警告?
- 警告:变量未初始化
- 警告 C4267"正在初始化":从'size_t'转换为"DWORD",可能会丢失数据
- 编译时收到未初始化的内存警告
- 如果变量未初始化,Visual Studio 2017 不会生成任何警告
- 警告:'dymmy' 在此功能中可能未初始化使用
- 非初始化警告需求-O2
- 警告在结构内缺少初始化器
- C4838 警告,包含常量字符* 数组的数组初始化
- 警告C26495函数调用从构造函数到初始化变量,原因
- 警告修复后将初始化
- GCC 警告初始化顺序与声明顺序不匹配