gpt4 book ai didi

c++ - C++ 语法错误,编译器不会警告或错误 int v = func(&v);

转载 作者:行者123 更新时间:2023-11-30 03:22:33 25 4
gpt4 key购买 nike

我刚刚在最后一天调试了一些东西,最终我在一条有问题的线上结束了。这条线的路径不是很清楚,当我发现它时,有一个慢动作的脸掌......

int v = func(&v);   // why am I allowed to do this.

这不应该生成某种“定义前使用的变量”警告吗?这非常烦人,因为没有编译器错误或警告?当然,语法下没有红色的 suiggly 行 :(。所以我直接跳过了它......

奇怪的是,它在大多数情况下都有效,直到它被发现......我猜是幸运的 UB?

不可否认,我对复杂的编译器了解不多,所以我可能遗漏了一些明显的东西,但在我看来我只是在定义它之前使用了一个 var,可以说我在声明它之前使用了它!

为什么这是有效的 C++ 语法?

最佳答案

只要声明符出现,变量名就在范围内。代码不是未定义的行为本身;可以使用尚未初始化的变量地址。

C++17 6.3.2 Point of declaration [basic.scope.pdecl] 部分的 1 段对此进行了介绍(释义):

The point of declaration for a name is immediately after its complete declarator and before its initializer (if any).

还有一个具体的例子给出了有效的(虽然不是很聪明)代码:

unsigned char x = x;

关于c++ - C++ 语法错误,编译器不会警告或错误 int v = func(&v);,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com