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修饰)。

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赴星辰大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值