在按引用传递时声明变量是未定义的行为吗?

Pat*_*ira 5 c

来自 cppreference:

在前一个和下一个序列点之间,标量对象必须通过表达式的计算最多修改一次其存储的值,否则行为是未定义的。

代码示例:

int a = store_and_return_value(&a);
Run Code Online (Sandbox Code Playgroud)

对于 C 和 C++。

Ard*_*der 1

int a = scanf("%d", &a);不表现出未定义的行为。

这些是明确定义的步骤:

  1. int在堆栈上创建一个变量,名为a

  2. scanf从标准输入读取一个值a

  3. scanf返回一个值

  4. 该返回值被分配给a

的最终值a由 的返回值决定scanf,要么是 1(如果该变量a读取成功),要么是 0(读取失败)。

编辑:

答案是在问题编辑之前写的

int a = store_and_return_value(&a);

同样的道理也适用于此。