施工中的自我参考

Self reference in construction

本文关键字:参考 自我 施工中      更新时间:2023-10-16

我刚刚发现以下代码同时使用 gcc 5.4 和英特尔编译器 18.0.2 进行编译。Clang 6.0.0 只是给出了一个警告。

#include <vector>
int main() {
std::vector<double> v = v;
return 0;
}

我的代码中有一个非常相似的错误,我害怕这些代码可以编译。我的问题是:

  • C++合法吗?如果是,它应该做什么?
  • 如何在编译时捕获这些"错误"?

合法C++吗?如果是,它应该做什么?

这是一个格式良好的程序,但它表现出未定义的行为,因为它读取一个未初始化的变量。这意味着它的行为没有任何限制(它可以合法地做任何事情(。

如何在编译时捕获这些"错误"?

启用足够的警告并使用"将警告视为错误"进行构建。有了足够的警告,gcc 5.4 可以正确捕获它。请注意,对于 gcc,这也需要启用优化功能,因为 gcc 仅在优化时执行某些分析(例如未使用的变量(。