C++之类内静态常量的定义及初始化的稳定写法

今天刷学校的OJ,题目要求创建一个圆柱体类,并在其内定义一个公有的静态常量Pi,于是乎我遇到了一个让我头大的问题,就是类内静态常量的定义及初始化,我边查边试了很多种写法,才终于搞定,现在简单总结如下:
1)比较稳定的写法(OJ平台并不完全支持C++11的情况下):
这种写法不挑平台,非常好。

class Cylinder{
  ...
public:
  static const double Pi;//定义静态常量
  ...
 };
 const double Cylinder::Pi=3.1415926;
 //类外初始化

说到此写法的由来,我是这么理解的,首先我们回顾一下类内定义静态变量及其初始化的写法:

class Cylinder{
  ...
public:
  static double Pi;//定义静态变量
  ...
 };
 double Cylinder::Pi=3.1415926;
 //类外初始化

由此可见,静态常量初始化的写法是以上写法的延伸,static后面修饰的类型变成了const double而已。
2)有的平台认、有的平台不认的写法:
如果平台完全支持C++11,那一般这么写是没事的。

class Cylinder{
  ...
public:
  static constexpr double Pi=3.1415926;
  //使用constexpr来达到类内初始化静态常量
  ...
 };

这种写法如果不支持,会报错如下
在这里插入图片描述

或者不用constexpr直接初始化。

class Cylinder{
  ...
public:
  static const double Pi=3.1415926;
  //定义静态常量的时候直接初始化
  ...
 };

这种写法如果不支持,会报错如下
在这里插入图片描述总结:
遇到版本特性兼容导致的bug,要寻找到最稳定的写法,且一定要掌握。
虽然类内不一定能给静态常量初始化,但是非静态常量在定义时是一定要初始化的(仅有const修饰)。

发布了17 篇原创文章 · 获赞 36 · 访问量 492

猜你喜欢

转载自blog.csdn.net/qq_44643644/article/details/104764108
今日推荐