使用自身初始化成员变量时启用编译器警告
Enable compiler warning for initiating member variables with themselves
在gcc和/或vs下是否有编译器警告来检测对自己初始化的成员变量?
gcc有-Winit-self,但似乎只适用于
int f()
{
int i = i;
return i;
}
和not for
class A {
int m;
public:
A(int) : m(m) { }
int f() {return m;}
};
编辑:收回问题,所有缺失的是- 01或以上(谢谢@honk)
编辑2:实际上,问题又回到了桌面上。在一个简单的例子中- 01 -Wuninitialized -Winit-self可以工作,但是,它不是在声明m(m)
时捕获它,而是在定义A(4)
时捕获它。这也意味着,如果构造函数在自己的编译单元中,编译器不会发现它(我认为在现实世界的场景中应该经常出现这种情况)。
当您在函数中这样做时:
int i = i;
然后我认为,您可以使用-Wuninitialized
选项与GCC,因为它是使用未初始化的变量i
初始化i
。代码中的成员变量也是如此。
还要注意这段代码调用了未定义的行为。但是,如果您在名称空间级别对变量这样做,那么它就是定义良好的。
在msvc或gcc下似乎没有任何编译器标志。然而,对于gcc, valgrind会发现任何未初始化变量的使用,从而对问题进行分类。不确定Windows的解决方案。Visual Studio Code Analysis看起来可能会把它捡起来,但在基本版本中是不可用的。
相关文章:
- C/C++编译器通常会删除重复的库吗
- 编译时未启用intel oneApi CUDA支持
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 删除编译器优化并在发布中启用 pdb 文件
- 为什么我应该始终启用编译器警告
- 请求C 17的编译器通过使用-STD 17标志在-STD = C 17时,将启用STD ::变体的支持
- 启用 C++14 英特尔编译器
- 启用-std=c++0x或-std=gnu++0x编译器选项
- 如何查看英特尔 ICC 编译器上启用了哪些编译选项
- 如何启用SSSE3内部函数,但禁用它们在编译器优化中的使用
- 使用自身初始化成员变量时启用编译器警告
- 如何在代码块中关闭带有[默认启用]标记的编译器警告?
- 只对单个函数/文件启用编译器优化
- 启用优化后的不同浮点结果-编译器错误
- 如何在CLion中启用所有编译器警告
- 编译器错误-未启用C++SSE3指令集
- SSE指令在实践中优化了什么,编译器如何启用和使用它们