不过 下面所说的在新的 c++11中,已经有所改变。

比如程序中:

static const double csd2 = 99.8; // error: 只有静态常量整型数据成员才可以在类中初始化
已经可有在类中初始化了

关于这点,可以参考 这个博客 :http://blog.csdn.net/fjb2080/article/details/7527468

如下内容为摘抄自博客,由于几经整理,已经没有记录博客地址了,特此说明:

这一部分待学习:C++11 FAQ中文版:类成员的内部初始化 http://blog.csdn.net/fjb2080/article/details/7527468

有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:

1.引用

2.常量

3.静态

4.静态常量(整型)

5.静态常量(非整型)

常量和引用,必须通过参数列表进行初始化。
静态成员变量的初始化也颇有点特别,是在类外初始化且不能再带有static关键字,其本质:

静态成员属于类作用域,但不属于类对象,和普通的static变量一样,程序一运行就分配内存并初始化,生命周期和程序一致。
所以,在类的构造函数里初始化static变量显然是不合理的。
静态成员其实和全局变量地位是一样的,只不过编译器把它的使用限制在类作用域内(不是类对象,它不属于类对象成员),要在类的定义外(不是类作用域外)初始化。

参考下面的代码以及其中注释:

```

#include <iostream>
#include <functional>

using namespace std;
#include <iostream>
using namespace std;

class BClass
{
public:
BClass() : i(1), ci(2), ri(i){} // 对于常量型成员变量和引用型成员变量,必须通过参数化列表的方式进行初始化
//普通成员变量也可以放在函数体里,但是本质其实已不是初始化,而是一种普通的运算操作-->赋值运算,效率也低
void printB(){
std:cout<<this->i<<"*i*"
<<this->ci<<"*ci*"
<<this->ri<<"*ri*"
<<this->si<<"*si*"
<<this->csd<<"**"
<<this->csd2<<"**"
<<this->csi<<"*csi*"
<<this->csi2<<"*csi2*";
}
private:
int i; // 普通成员变量
const int ci; // 常量成员变量
int &ri; // 引用成员变量
static int si; // 静态成员变量
//static int si2 = 100; // error: 只有静态常量成员变量,才可以这样初始化
static const int csi; // 静态常量成员变量
static const int csi2 = 100; // 静态常量成员变量的初始化(Integral type) (1)
static const double csd; // 静态常量成员变量(non-Integral type)
static const double csd2 = 99.8; // error: 只有静态常量整型数据成员才可以在类中初始化
};

//注意下面三行:不能再带有static
int BClass::si = 0; // 静态成员变量的初始化(Integral type)
const int BClass::csi = 1; // 静态常量成员变量的初始化(Integral type)
const double BClass::csd = 99.9; // 静态常量成员变量的初始化(non-Integral type)

// 在初始化(1)中的csi2时,根据著名大师Stanley B.Lippman的说法下面这行是必须的。
// 但在VC2003中如果有下面一行将会产生错误,而在VC2005中,下面这行则可有可无,这个和编译器有关。
//const int BClass::csi2;

int main()
{
BClass b;
b.printB();
std:cout<<"ok is";

return 0;
}
```

转载于:https://www.cnblogs.com/jiudianren/p/5668590.html

关于类中的引用、常量、静态常量的初始化相关推荐

  1. C++ 类中特殊成员变量(常量、静态、引用)的初始化方法

    有些成员变量的数据类型比较特别,它们的初始化方式和普通数据类型的成员变量有所不同.这些特殊类型的数据类型包括: 引用(&) 常量(const) 静态(static) 静态常量(static c ...

  2. C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法

    <p style="line-height: 19px; margin: 10px auto; color: rgb(75, 75, 75); font-family: Verdana ...

  3. java 接口中的成员只有静态常量和_Java中抽象类和接口的具体区别是什么?

    谢邀,直接回答. 接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不 ...

  4. 接口中的成员只有静态常量和什么_为什么阿里工程师代码写的好?看看他的代码规范就知道了...

    摘要 本文主要讲解阿里JAVA开发手册中比较重要的设计规范,这些重要的设计规范有助于我们改进自己的代码,提升系统的系统的性能. 曾经与一位从阿里出来的Java工程师一起工作过一段时间,他的技术说不上非 ...

  5. java中如何引用非静态变量_java为什么不能从静态环境引用非静态变量?

    小编典典 你必须了解一个类与该类实例之间的区别.如果你在街上看到汽车,即使你看不到哪种型号或类型,也将立即知道它是汽车.这是因为你将看到的与"汽车" 类进行了比较.该类包含与所有汽 ...

  6. java静态方法声明_方法本地类中的Java最终静态声明

    在方法内部声明局部内部类时,为什么包含最终的静态String或int是合法的,而包含其他对象却不合法? 例如: class Outer { void aMethod() { class Inner { ...

  7. File Io 删除类中的引用

    /*** 删除引用*/private static void removeResource(SilenceEntity entity) {List<String> document = e ...

  8. Java虚拟机的静态常量池和运行时常量池

    (静态)常量池:用于存放编译器生成的各种字面量和符号引用(符号引用区别于直接引用,后者在class字节码文件被虚拟机解析之后,符号引用将被替换为直接引用). 运行时常量池:(静态)常量池中的内容在类加 ...

  9. Kotlin实战指南二:变量、常量、静态常量

    转载请标明出处:https://blog.csdn.net/zhaoyanjun6/article/details/87811333 本文出自[赵彦军的博客] Kotlin初体验二:变量.常量.静态常 ...

最新文章

  1. 网络营销专员浅析如何面对网络营销过程中的降权处理
  2. python人工智能学多久_Python人工智能学习需要多久?什么学历可以学习?
  3. Axios实现异步通信
  4. leetcode851. 喧闹和富有(dfs)
  5. ORACLE中的异常处理
  6. 他不怕被拒绝_不会敬酒很吃亏,送你五个敬酒词的模版,再也不怕劝酒了
  7. python编程(fabric部署)
  8. Sybase Adaptive Server Anywhere ISQL 8.0 绿色汉化版发布
  9. python计算机视觉编程——sift特征提取和ransac减少错配
  10. 兴业银行银企直联如何查询转账支付后的手续费及退票流水
  11. AT070TN92 群创工业液晶屏7寸宽温工控屏
  12. 设置笔记本电脑插入USB鼠标时,自动禁用触摸板
  13. java中getchars是什么意思_java中的getChars()方法
  14. android 隐藏Settings菜单的几种方法
  15. QT入门第一天平台使用规则和代码逻辑学习(初学者)
  16. Java学习--网络,图形界面和数据库
  17. apache atlas 案例_Apache Atlas
  18. quicklz php,使用quicklz缩小程序体积
  19. Internet主要的网络协议
  20. 哪个证券APP可以设置条件单?

热门文章

  1. 银行事后监督及票据影像光盘缩微系统
  2. poj1182 and 携程预赛2第一题 带权并查集
  3. C语言-动态创建二维数组
  4. 【Linux 内核】调度器 ④ ( sched_class 调度类结构体分析 | yield_task 函数 | heck_preempt_curr 函数 | task_struct 函数 )
  5. 【Android 逆向】逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )
  6. 【IOC 控制反转】Android 视图依赖注入 ( 视图依赖注入步骤 | 视图依赖注入代码示例 )
  7. 【鸿蒙 HarmonyOS】UI 布局 ( 帧布局 StackLayout )
  8. 【计算理论】下推自动机 PDA ( 设计下推自动机 | 上下文无关语法 CFG 等价于 下推自动机 PDA )
  9. 【Kotlin】Lambda 表达式 ( 简介 | 表达式语法 | 表达式类型 | 表达式返回值 | 调用方式 | 完整示例 )
  10. 《精通并发与Netty》学习笔记(13 - 解决TCP粘包拆包(一)概念及实例演示)