dem*_*lus 12 c++ const constexpr c++11
我有以下代码:
static constexpr const char*const myString = "myString";
Run Code Online (Sandbox Code Playgroud)
你能解释一下有什么区别:
static const char*const myString = "myString";
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们与constexpr有什么新鲜事?
Vla*_*cow 11
以下引用来自C++标准(9.4.2静态数据成员)中描述了不同之处
3如果非易失性const静态数据成员具有整数或枚举类型,则其在类定义中的声明可以指定一个大括号或等于初始化器,其中作为assignmentexression的每个initializer子句都是一个常量表达式(5.19) .可以使用constexpr说明符在类定义中声明文字类型的静态数据成员; 如果是这样,它的声明应指定一个大括号或等于初始化器,其中作为赋值表达式的每个initializer子句都是一个常量表达式.[注意:在这两种情况下,成员可能会出现在常量表达式中.-end note]如果在程序中使用odr-used(3.2)并且命名空间作用域定义不包含初始化程序,则仍应在命名空间作用域中定义该成员.
考虑例如两个程序
struct A
{
const static double x = 1.0;
};
int main()
{
return 0;
}
struct A
{
constexpr static double x = 1.0;
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第一个将不编译,而第二个将编译.
这对于指针也是有效的
这个计划
struct A
{
static constexpr const char * myString = "myString";
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
将这个porgram编译
struct A
{
static const char * const myString = "myString";
};
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
不会编译.
| 归档时间: |
|
| 查看次数: |
18465 次 |
| 最近记录: |