• 必须在构造函数基/成员初始值设定项列表中初始化


    转载:https://www.cnblogs.com/zzyoucan/p/3570493.html?utm_source=tuicool&utm_medium=referral

    C++ primer 上面的一个例子:

     1 // constRef.cpp : 定义控制台应用程序的入口点。
     2 //
     3  
     4 #include "stdafx.h"
     5  
     6 class constRef
     7 {
     8 public:
     9  constRef(int ii);
    10  
    11  int i;
    12  const int ci;
    13  int &ri;
    14 };
    15  
    16 constRef::constRef(int ii)
    17 {
    18  i=ii;
    19  ci=ii;
    20  ri=i;
    21 }
    22  
    23 //constRef::constRef(int ii):i(ii),ci(i),ri(ii){}
    24  
    25 int _tmain(int argc, _TCHAR* argv[])
    26 {
    27  constRef B(5);
    28  
    29  printf("%d,%d,%d",B.i,B.ci,B.ri);
    30  return 0;
    31 }

     这样写是有错误的,error C2758: “constRef::ci”: 必须在构造函数基/成员初始值设定项列表中初始化;

    constRef::ri”: 必须在构造函数基/成员初始值设定项列表中初始化;
    error C2166: 左值指定 const 对象;
    而将
     
    constRef::constRef(int ii)
    {
     i=ii;
     ci=ii;
     ri=i;
    }
     
    使用constRef::constRef(int ii):i(ii),ci(i),ri(ii){} 替换 就正确了,你知道原因吗?
     
    记住:可以初始化const对象或引用类型的对象,但不能对他们赋值。在开始执行构造函数的函数体之前,必须完成初始化。初始化const或引用类型数据成员的唯一机会是在构造函数初始化列表中。
  • 相关阅读:
    认识AppDomain类
    认识Math类
    控制输入法
    开发中常见错误
    flash视频窗口被关闭卡住了父窗口
    TransactionScope 事务 net2.0
    发现system.collection 命名空间下面的类大部分是基于数组来存储
    utf8 编码出现空白
    如何WEB上的消息提醒
    当前不会命中断点
  • 原文地址:https://www.cnblogs.com/Toya/p/13731262.html
Copyright © 2020-2023  润新知