为什么是'int i = i;'法律? [英] Why is 'int i = i;' legal?

查看:166
本文介绍了为什么是'int i = i;'法律?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


可能重复:

int var = 1; void main(){int i = i; }

以下代码可以通过g ++和Visual C ++进行编译。为什么是合法的?它看起来不合理,并可能导致隐藏的错误。

The following code can pass compiling under both g++ and Visual C++. Why is it legal? It looks unreasonable, and may cause hidden bugs.

int main() {
  int i = i;
}


推荐答案

/ strong> 语法合法,但如果使用 x ,则会导致未定义的行为。

It's syntactically legal, but results in undefined behavior if you use x.

这是合法,因为您正在为一个未初始化的变量分配另一个(好,相同)未​​初始化的变量。只是因为它的编译并不意味着它是合法的。它是有效的C ++语法,是的,但不合法。

It's not legal because you're assigning an uninitialized variable with another (well, the same) uninitialized variable. Just because it compiles doesn't mean it's legal. It's valid C++ syntax, yes, but not legal.

赋值运算符的右边必须在赋值时进行完全求值。在这种情况下,这是 i ,这是没有初始化。

The right hand side of the assignment operator must be fully evaluated at the time of the assignment. In this case, that's i, which isn't initialized.

对Steve Jessop的点数:

Credits to Steve Jessop, who dug up the quote:

到价值转换


[...]如果对象未初始化,则需要
转换具有未定义的行为。

[...] if the object is uninitialized, a program that necessitates this conversion has undefined behavior.

这篇关于为什么是'int i = i;'法律?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆