【发布时间】:2019-01-12 10:45:00
【问题描述】:
在哪个版本的 C++ 标准(如果有)中明确定义了以下内容?
void foo(void) {
char *nullPtr = NULL;
&*nullPtr;
}
请注意,我在这里专门询问&*nullPtr。我知道只是 *nullPtr 是未定义的 - 但这是一个单独的问题,因此当前链接的“重复”不是重复的。
请注意,我没有将结果分配给任何东西 - 第二行是一个简单的语句。
这个应该是一个有明显答案的问题,但是(在此类问题上似乎经常发生)我听到的答案与“显然未定义”一样多定义”。
在一个相当相关的说明中,以下内容呢? foo 应该读取 c 吗?
extern volatile char c;
void bar(void) {
volatile char *nonnullptr = &c;
&*nonnullptr;
}
(同题C版:Is &*NULL well-defined in C?)
【问题讨论】:
-
选择一种语言。 Language-lawyer 和 C/C++ 通常不会一起使用,因为 C 和 C++ 是完全不同的语言。也就是说,在 C 中取消引用空指针会导致未定义的行为,但
&*Eis equivalent toEeven for null pointers. -
我想知道两者。您是说创建两个单独的问题会更好吗?
-
对我来说这似乎是最好的,因为这个问题是关于语言律师对两种不同语言的挑剔(其他人可能不同意)。但是我不确定这两种语言是否在这个问题上达成一致;他们可能是。
-
@DavidBowling - 我已经这样做了;谢谢。见link。
-
@Ben-Voigt - 链接的问题涉及 *NULL,而我问的是 &*NULL。这是两个不同的问题。 (请注意,例如,在 C 中,前者是未定义的,而后者是已定义的。)。因此,链接的问题不回答我的问题。
标签: c++ language-lawyer