我刚刚发现以下代码与gcc 5.4和Intel编译器18.0.2一起编译.Clang 6.0.0只是发出警告.
#include <vector>
int main() {
std::vector<double> v = v;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的代码中有一个非常相似的错误,我担心这些代码可以编译.我的问题是:
Rei*_*ica 10
它是合法的C++吗?如果是的话,该怎么办?
它是一个格式良好的程序,但它展示了Undefined Behavior,因为它读取了一个未初始化的变量.这意味着它的行为没有任何限制(它可以合法地做任何事情).
如何在编译时捕获这些"错误"?
启用足够的警告并使用"将警告视为错误"进行构建.有足够的警告,gcc 5.4正确捕获它.请注意,在gcc的情况下,这也需要开启优化,因为gcc仅在优化时进行一些分析(例如未使用的变量).
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |