zoukankan      html  css  js  c++  java
  • const修饰符与函数

    一、用const修饰函数的参数##

    函数参数类型前加const指明该参数为常量,在函数内部不可改变。

    void func(const int x) {
        //x不可以在内部进行赋值等操作.
    }
    

    注:当参数为引用传递或者指针传递作为输出时,都不能加const

    二、用const修饰函数的返回值##

    函数返回时,会把返回值复制到外部临时的存储单元中,存储类型由函数的返回类型来确定。

    • “值传递”加const修饰没有任何价值。
    • ”址传递”加const修饰,函数返回值只能被赋给加const修饰的同类型指针,或者利用const_case转化为去const的常量。
    const int* func(void) //函数声明
    ...
    int* a = func();             //报错
    int* c = const_cast<int*>(func()); //正确
    const int* b = func()    //正确
    
    • "引用返回",引用即为const指针,函数返回引用并加const限定后,函数返回的是地址与地址所存的值都被const修饰的指针,存于临时的外部存储单元中,
    const int& func();  //函数声明
    ...
        int b = func();                                    //正确,从外部存储单元中赋值给变量
        int& c = func();                                  //错误,试图在同一个地址中即存储变量又存储常量
        int& d = const_cast<int&>(func());    //正确,去const
        const int& e = func();                        //正确
    

    如果上面错误的例子看不懂可以看之前的const修饰符限定的常量指针const与non-const赋值部分。
    引用返回总结
    引用返回一般很少用,但既然选择引用返回,返回的肯定是一个作用域高于函数作用域的变量的引用,毕竟函数作用域下的变量在函数结束后会释放掉(static这里不考虑)引用即为该变量的const指针,既然选择返回指针,就想通过直接利用指针修改该地址下的变量,所以就更没有必要返回const引用,毕竟const引用的返回值不希望对地址所存的值进行修改。引用返回更常用的方式是:

    int& func();
    ...
        int& a = func();
    

    这一可以通过a来改变返回值。

    三、const 成员函数##

    任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误。

    class test
    {
    public:
        void func(){}
        int getNum(void) const // const 成员函数
        {
            ++num;     // 编译错误,企图修改数据成员m_num
            func();     // 编译错误,企图调用非const函数
            return num;
        }
    private:
        int num;
    };
    
  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/narjaja/p/9300525.html
Copyright © 2011-2022 走看看