Using newly declared variable in initialization (int x = x+1)?(在初始化中使用新声明的变量(int x = x+1)?)
问题描述
我偶然发现了一个令我惊讶的行为:
I just stumbled upon a behavior which surprised me:
写作时:
int x = x+1;
在 C/C++ 程序(或涉及新创建的变量 x 的更复杂的表达式)中,我的 gcc/g++ 编译没有错误.在上述情况下,X 之后为 1.请注意,先前声明的范围内没有变量 x.
in a C/C++-program (or even more complex expression involving the newly created variable x) my gcc/g++ compiles without errors. In the above case X is 1 afterwards. Note that there is no variable x in scope by a previous declaration.
所以我想知道这是正确的行为(甚至在某些情况下可能有用)还是只是我的 gcc 版本或一般 gcc 的解析器特性.
So I'd like to know whether this is correct behaviour (and even might be useful in some situation) or just a parser pecularity with my gcc version or gcc in general.
顺便说一句:以下不起作用:
BTW: The following does not work:
int x++;
推荐答案
用表达式:
int x = x + 1;
变量 x
出现在 =
符号处,这就是您可以在右侧使用它的原因.开始存在"是指变量存在,但尚未被初始化部分赋值.
the variable x
comes into existence at the =
sign, which is why you can use it on the right hand side. By "comes into existence", I mean the variable exists but has yet to be assigned a value by the initialiser part.
但是,除非您正在初始化具有静态存储持续时间的变量(例如,在函数外部),否则这是未定义的行为,因为存在的 x
具有任意值.
However, unless you're initialising a variable with static storage duration (e.g., outside of a function), it's undefined behaviour since the x
that comes into existence has an arbitrary value.
C++03 有这样的说法:
C++03 has this to say:
名称的声明点紧接在其完整声明符之后(第 8 条)和初始化器之前(如果有的话)...
The point of declaration for a name is immediately after its complete declarator (clause 8) and before its initializer (if any) ...
示例:int x = 12;
<代码>{ int x = x;}
这里第二个 x 用它自己的(不确定的)值初始化.
Example:
int x = 12;
{ int x = x; }
Here the second x is initialized with its own (indeterminate) value.
第二种情况几乎就是您的问题.
That second case there is pretty much what you have in your question.
这篇关于在初始化中使用新声明的变量(int x = x+1)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在初始化中使用新声明的变量(int x = x+1)?


- 与 int by int 相比,为什么执行 float by float 矩阵乘法更快? 2021-01-01
- 一起使用 MPI 和 OpenCV 时出现分段错误 2022-01-01
- 静态初始化顺序失败 2022-01-01
- 使用/clr 时出现 LNK2022 错误 2022-01-01
- 近似搜索的工作原理 2021-01-01
- C++ 协变模板 2021-01-01
- STL 中有 dereference_iterator 吗? 2022-01-01
- 从python回调到c++的选项 2022-11-16
- Stroustrup 的 Simple_window.h 2022-01-01
- 如何对自定义类的向量使用std::find()? 2022-11-07