【发布时间】:2019-10-06 17:13:42
【问题描述】:
这样说对吗
constexpr int* p = nullptr;
声明 constexpr 指针(而不是指向 constexpr int 的指针)?
这个定义
int* constexpr p = nullptr;
给出编译错误。
【问题讨论】:
-
情况正好相反。尝试从右到左阅读。
这样说对吗
constexpr int* p = nullptr;
声明 constexpr 指针(而不是指向 constexpr int 的指针)?
这个定义
int* constexpr p = nullptr;
给出编译错误。
【问题讨论】:
标准在[dcl.constexpr]/1 中规定,只有变量或函数(及其模板)可以是constexpr:
constexpr说明符应仅应用于变量或变量模板的定义或函数或函数模板的声明。
特别是,constexpr 不是类型系统的一部分(尽管它确实暗示了const),所以指针到 constexpr 在 C++ 中不是一个有意义的概念。
将变量标记为constexpr 的主要原因是将它们设为usable in constant expressions。但是,也可以使用在常量表达式中使用常量初始化器初始化的引用和常量整数值。也许参考部分可以帮助您解决您正在处理的任何问题?
【讨论】: