zoukankan      html  css  js  c++  java
  • 复制构造函数和赋值操作符的注意点.

    记得在复制构造函数和赋值操作符的参数类型上加上const.正确的复制构造函数应该是X::X(const X&)这种,而不是X::X(X&)这种,这里有两个原因.

    第一:绑定一个非const引用到一个临时对象是非法的.使用X::X(X&)作为复制构造函数不会允许复制任何特殊表达式的结果.为什么呢.?因为引用的初始化规则规定了不能将临时变量作为引用的初始化值。

    而常量引用除外.

    此外:防止修改引用的值(这个大家都知道).

    同样的道理: X::operator=(const X&)是赋值操作符的正确形式.

    举例一:good方法中的参数设置成const的.那么下面的代码能正确执行.

     1 class A
     2 {
     3 public:
     4     A(){};
     5 };
     6 
     7 void good(const A& c){}
     8 
     9 int main(int argc,char* argv[])
    10 {
    11     A a;
    12     good(a);
    13     const A b;
    14     good(b);
    15     return 0;
    16 }

    举例二:good方法中的参数不设置成const的.那么下面的代码不能正确执行.

     1 class A
     2 {
     3 public:
     4     A(){};
     5 };
     6 
     7 void good(A& c){}
     8 
     9 int main(int argc,char* argv[])
    10 {
    11     A a;
    12     good(a);
    13     const A b;
    14     good(b);//此处有问题
    15     return 0;
    16 }
  • 相关阅读:
    [转]Design Time Serialization
    啥都不说了,不枉熬油点灯了
    Eclips汉化
    FreeBSD 上用上苹果黑体,效果很棒
    使用Portupgrade
    fvwm2rc
    make.conf 配置优化
    基于FreeBSD5.4全能服务器安装(dns,ftp,apache,qmail)
    portssupfile
    关于FreeBSD 5优化的补充
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3902692.html
Copyright © 2011-2022 走看看