美文网首页C/C++经验技巧总结
C++类中的引用成员和常量成员的初始化问题

C++类中的引用成员和常量成员的初始化问题

作者: XDgbh | 来源:发表于2018-03-21 21:51 被阅读4次

    解决办法:使用初始化列表

    如果一个类是这样定义的:

    Class A
    {
         public:
              A(int pram1, int pram2, int pram3);
         privite:
              int a;
              int &b;
              const int c; 
    }
    

    假如在构造函数中对三个私有变量进行赋值则通常会这样写:

    A::A(int pram1, int pram2, int pram3)
    {
         a=pram1;
         b=pram2;
         c=pram3;
    }
    

    但是,这样是编译不过的。因为常量和引用初始化必须赋值。所以上面的构造函数的写法只是简单的赋值,并不是初始化。

    正确写法应该是:

    A::A(int pram1, int pram2, int pram3):b(pram2),c(pram3)
    {
         a=pram1;
    }
    

    采用初始化列表实现了对常量和引用的初始化。采用括号赋值的方法,括号赋值只能用在变量的初始化而不能用在定义之后的赋值。

    凡是有引用类型的成员变量或者常量类型的变量的类,不能有缺省构造函数。默认构造函数没有对引用成员提供默认的初始化机制,也因此造成引用未初始化的编译错误。并且必须使用初始化列表进行初始化const对象、引用对象。

    相关文章

      网友评论

        本文标题:C++类中的引用成员和常量成员的初始化问题

        本文链接:https://www.haomeiwen.com/subject/dkinqftx.html