zoukankan      html  css  js  c++  java
  • 必须在构造函数基/成员初始值设定项列表中初始化

    转载: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或引用类型数据成员的唯一机会是在构造函数初始化列表中。
  • 相关阅读:
    一张一驰,文武之道
    关于“未能加载……”和“web.config”
    DotText学习心得_1
    windows服务与事务
    AWR报告生成
    Java EE启示录
    跨入安全的殿堂读《Web入侵安全测试与对策》感悟
    用VS2005写Loadrunner测试脚本
    List of Free Programming books
    硬盘基础知多少
  • 原文地址:https://www.cnblogs.com/Toya/p/13731262.html
Copyright © 2011-2022 走看看