gpt4 book ai didi

c++ - 如何使此初始化在 C++ 中合法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:21 25 4
gpt4 key购买 nike

我在书上看过一个习题,但我想不出答案:

Is the following code legal or not? If not, how might you make it legal?

int null = 0, *p = null;

当然,第二种是不合法的,不能把int转成int*。

主题在 constexpr 部分。

伙计们!这只是一个关于指针、const 和 constexprs 的练习!我认为,您必须在不使用 cast 和 nullptr 的情况下解决它。

最佳答案

在C++11中,空指针常量定义为

an integral constant expression prvalue of integer type that evaluates to zero

(C++11 [conv.ptr] 4.10/1)

这意味着将 constexpr 添加到声明中实际上使 null 成为有效的空指针常量:

constexpr int null = 0, *p = null;

请注意,这被认为是一个缺陷并在 C++14 中进行了更改,因此只有整数 literal 可以是空指针常量:

A null pointer constant is an integer literal with value zero ...

(C++14 N4140 [conv.ptr] 4.10/1)

因此,有一种方法可以在 C++11 中使用 constexpr 使初始化合法,但它的存在被认为是标准缺陷并在 C++14 中被删除。因此,本书所教授的信息已过时。

请注意,因为这是一个缺陷,编译器通常也将此行为反向移植到他们的 C++11 模式(如果他们甚至首先实现了原始模式)。

关于c++ - 如何使此初始化在 C++ 中合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40787241/

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