【发布时间】:2015-08-24 21:01:17
【问题描述】:
在C++11和C++14中,为什么在下面的sn-p中需要constexpr:
class Foo {
static constexpr double X = 0.75;
};
而这会产生编译器错误:
class Foo {
static const double X = 0.75;
};
而且(更令人惊讶的是)编译没有错误?
class Foo {
static const double X;
};
const double Foo::X = 0.75;
【问题讨论】:
-
主要兼容C++03,here is a summary
-
一种用于编译时常量的语法,与创建
static成员变量的语法不同,该成员变量是const,具有默认(因此是单数)值。也许这里的部分逻辑是 const 可以被违反,如果你说你希望能够获取事物的地址,那么你可能会遇到这种恶作剧。 -
@Stefano Sanfilippo:为什么最后一个例子被描述为“更令人惊讶”?它实际上是该语言从一开始就存在的基线行为。
-
@AnT 好吧,这就是我在下面引用的问题 1826 的内容,在 C++11 中人们发现这令人惊讶且不一致。
标签: c++ c++11 c++14 static-members constant-expression