• Const详解


    函数参数和返回值

    1、传递const 如果函数参数是按值传递,可用指定的参数是const的。

    void fun(const int i)
    {
         i++;//error  const i means can't be change
    }

    当调用函数fun()时,i为原变量的副本,这个副本在函数fun内不可被修改。

    2、返回const值

      对返回值来讲,如果一个函数的返回值是一个常量:

         const int f();

      这就约定了函数框架里的原变量是不会被修改。另外,因为只是按值返回的,所以这个变量被被制成副本。

    对于内部类型来说,按值返回的是不是一个const,是无关紧要的,所以按值返回一个内部类型时,应该去掉const,从而不会使客户程序猿混淆。

    class X{
    int i;
    public:
    X(int ii =0);
    void modify();
    };
    
    
    X::X(int ii)
    {
    i = ii;
    }
    
    void X::modify(){ i++;}
    
    X f5() {
    return X();   }
    
    const X f6(){
       return X();  }
    
    //pass by non-const reference
    void f7(X& x) { x.modify(); } int main() { f5() = X(1);//ok f5().modify();//ok //! f7(f5()); //cause warning //cause compile time errors //! f6() = X(1); //! f6().modify(); //!f7(f6()); }

    f5()返回一个非const X对象,然而f6()返回一个const X对象。仅仅是非const返回值能作为一个左值使用,因此,当按值返回一个对象时,如果不让这个对象作为一个左值使用,则使用const很重要。

    临时量

    有时候,在求表达式值期间,编译器必须创建临时对象。关于临时量有这样一种情况:它们自动地称为常量。通常接触不到临时对象,改变临时量是错误的,因为这些信息应该是不可得的。编译器使所有的临时量自动地称为const,这样当程序猿犯那样的错误时,会向他发出警告。

    f5() 返回一个非const X对象,但在表达式:f7(f5());   中,编译器必须产生一个临时量来保存f5()的返回值,使得它能传递给f7()。

    如果f7()函数的参数是按值传递的话,它能很好地工作,然后在f7()中形成那个临时量的副本,不会对临时对象X产生任何影响。

    但是,如果f7()的参数是按引用传递的,这意味着它取临时对象X 的地址,因为f7()所带的参数不是按const引用传递的,所以它允许对临时对象X进行修改。但是编译器知道,一旦表达式f5()计算结束,该临时对象也会不复存在,因此,对临时对象X所作的任何修改也将丢失。

     

  • 相关阅读:
    CharSequence的getText()与String的getString()(转)
    android 1.6 launcher研究之自定义ViewGroup (转 2011.06.03(二)——— android 1.6 launcher研究之自定义ViewGroup )
    2.1Android界面View及ViewGroup(转)
    Android笔记:百度地图与高德地图坐标转换问题
    NDK常用命令
    深入Java单例模式(转)
    CentOS 6.2 安装vsftpd 服务器(转)
    centos 安装FTP server详情(转)
    CentOS 6.3下NTP服务安装和配置
    搭建vscode+vue环境
  • 原文地址:https://www.cnblogs.com/wiessharling/p/2984513.html
Copyright © 2020-2023  润新知