是否可以在构造函数外部初始化静态const值?可以在找到成员声明的同一地点进行初始化吗?
class A {
private:
static const int a = 4;
/*...*/
};
Run Code Online (Sandbox Code Playgroud) 在C++ 11和C++ 14中,为什么我需要constexpr在以下代码段中:
class Foo {
static constexpr double X = 0.75;
};
Run Code Online (Sandbox Code Playgroud)
而这个产生编译错误:
class Foo {
static const double X = 0.75;
};
Run Code Online (Sandbox Code Playgroud)
(更令人惊讶的是)这个编译没有错误?
class Foo {
static const double X;
};
const double Foo::X = 0.75;
Run Code Online (Sandbox Code Playgroud) 以下代码无法在Ideone上实时编译:
#include <iostream>
using namespace std;
int main() {
const double kPi = 3.14;
constexpr double kPi2 = 2.0*kPi;
cout << kPi2;
}
Run Code Online (Sandbox Code Playgroud)
错误消息是:
Run Code Online (Sandbox Code Playgroud)prog.cpp: In function 'int main()': prog.cpp:6:30: error: the value of 'kPi' is not usable in a constant expression constexpr double kPi2 = 2.0*kPi; ^ prog.cpp:5:15: note: 'kPi' was not declared 'constexpr' const double kPi = 3.14;
将const声明替换为kPiwith constexpr,它会成功编译.
在另一方面,如果int是用来代替double,好像const 还有戏剧与constexpr …