相关疑难解决方法(0)

如何在C++中初始化静态const成员?

是否可以在构造函数外部初始化静态const值?可以在找到成员声明的同一地点进行初始化吗?

class A {
private:
  static const int a = 4;
  /*...*/
};
Run Code Online (Sandbox Code Playgroud)

c++ static

61
推荐指数
4
解决办法
8万
查看次数

类型为double的静态类成员的常量表达式初始值设定项

在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)

c++ static-members constant-expression c++11 c++14

16
推荐指数
1
解决办法
1258
查看次数

使用const初始化constexpr:int和double的不同处理

以下代码无法在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)

错误消息是:

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;
Run Code Online (Sandbox Code Playgroud)

将const声明替换为kPiwith constexpr,它会成功编译.

在另一方面,如果int是用来代替double,好像const 还有戏剧与constexpr …

c++ const constexpr c++11

14
推荐指数
1
解决办法
1310
查看次数