zoukankan      html  css  js  c++  java
  • 构造函数初始化问题

    §对const类型的数据成员进行初始化时不能直接赋值,如下面的赋值操作是错误的。

     1 class  C  {
     2     public:
     3         C() {
     4             x = 0;      //OK,x  not const
     5             c = 0;      //ERROR,c  is const
     6         }
     7 
     8     private:
     9         int x;            //nonconst data member
    10         const int c;    // const data  member
    11 };

      因此,在C++中对const类型的数据成员进行初始化时必须为构造函数添加一个初始化列表,如下:

      

    1 class  C{
    2     public3         C () :c(0) {x = -1}
    4         
    5     private:
    6         int x;
    7         const int c;      //const data  member
    8 };

      再次总结:(规则)

      (1)构造函数的初始化段由一个冒号:开始,紧跟在冒号之后的是需要进行初始化的数据成员,然后是由一对小括号括起来的初始值。

      (2)初始化列表仅在构造函数中有效,不能用于其他函数。

      (3)构造函数的初始化列表可以初始化任何数据成员(const 和 非const),但const类型的数据成员只能在初始化列表里初始化,而不能用其他方法进行初始化。

    1 class  C {
    2     public:
    3         C() : c(0), x(-1){}            //empty body
    4     
    5     private:
    6         int x;
    7         const int c;                      //const data member
    8 };
  • 相关阅读:
    四 闭包函数、装饰器
    三 名称空间与作用域
    二 函数对象、函数嵌套
    一 函数定义
    函数路线
    Django_rest_framework分页
    Django Rest framework序列化流程
    Django Rest framework的限流实现流程
    mysql 数据库查看表的信息
    java JDBC编程流程步骤
  • 原文地址:https://www.cnblogs.com/dormant/p/4977028.html
Copyright © 2011-2022 走看看