我刚刚发现以下代码使用gcc 5.4和Intel编译器18.0.2进行编译。 Clang 6.0.0只是发出警告。
#include <vector>
int main() {
std::vector<double> v = v;
return 0;
}
我的代码中有一个非常相似的错误,我担心这些代码可以编译。我的问题是:
答案 0 :(得分:10)
这是合法的C ++吗?如果是,它应该做什么?
它是一个结构良好的程序,但它展示了未定义的行为,因为它读取了未初始化的变量。这意味着它的行为没有任何限制(它可以合法地做任何事情)。
如何捕捉那些&#34;错误&#34;在编译时?
启用足够的警告并使用&#34;将警告视为错误。&#34;有足够的警告,gcc 5.4 catches it correctly。请注意,对于gcc,这也需要开启优化,因为gcc仅在优化时才进行一些分析(例如未使用的变量)。