在我所知道的大多数语言中,标量类型变量默认情况下是零初始化的,如果它们没有在代码中初始化的话。 为什么这不会发生在 c/c++ 中?我能想到的唯一原因是性能,但是
- 如果我对其进行初始化,它真的会消耗性能吗?
- 最好有未定义的行为吗?
- 如果我想避免未定义的行为,无论如何我都必须初始化它,那么我赢了什么?
如果这可能是性能问题,以某种方式明确告诉编译器不要对变量进行零初始化会不会更容易?
最后是我的问题: 是否有 gcc 选项告诉编译器默认零初始化?
最佳答案
C++ 的创始原则之一是不强制开发人员为他们不使用的东西付费。如果你写类似 int x; x = 1;
那么您不必为 x
的零初始化付费,即使该费用恰好非常小。
编辑:关于你的另外两点
is it preferable to have undefined behavior?
未定义的行为在语言中不一定是坏事(你可以两种方式争论)。如果您编写导致它的代码,那绝对是一件坏事。值得注意的是,它为实现者提供了更多自由,并实现了重要的优化。
if I want to avoid undefined behavior, I have to initialize it anyway, so what did I win?
有一个未初始化的变量不是未定义的行为。尝试读取一个是未定义的行为。
关于c++ - 为什么零初始化不是 c++ 中非初始化变量的默认值?是否有强制执行它的编译器选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55496214/