`

void fun() const{}; const void fun(){}; 和void const fun(){};

    博客分类:
  • C++
阅读更多

转:http://blog.csdn.net/zimingjushi/article/details/6716269

               (0 0)
   +-----oOO----(_)----------+
   |                                   |
   |                                   |
   |                                   |
   +------------------oOO----+
              |__|__|
               || ||
              ooO Ooo

const void fun(){};和void const fun(){};两个相同。
如果采用"按址传递方式"的函数返回值加const 修饰,那么函数返回值(即地址)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
如果采用"按值传递方式"的函数返回值加const 修饰,由于函数会把返回值复制到外部临时的存储单元中,加const 修饰没有任何价值。
所以不要尽量不要把int fun2();写成const int fun2(); 因为没意义。例:

 

#include<iostream>
using namespace std;
int num = 10;//全局变量
const int *fun1()
{
    return &num;//返回地址
}

const int fun2()//按值传递,最后写成int fun2()
{
    return num;
}

int main()
{
    const int *fun1();
    //int *t1 = fun2();//错误,必须是const型
    const int *t1 = fun1();
    //*t1 = 20;//按址传递,不能修改其只想变量或常量的值
    cout << "const int *fun1() : \t" << *t1 << endl;
    const int fun2();//最好直接声明成int fun2()
    int t2 = fun2();//非const变量可以更改函数返回值
    const int t3 = fun2();
    t2 += 10;//按值传递,可以修改返回值
    cout << "const int fun2() :\t" << t2 <<endl;
    return 0;
}
 

 

 void fun() const{};
类的成员函数后面加 const,表明这个函数不可以对这个类对象的数据成员(准确地说是非static数据成员)作任何改变例:

#include<iostream>
using namespace std;
class R
{
private:
    int num1;
    static int num2;
public:
    R():num1(1) {}
    int sum1(int a)const
    {
        return a + num1;
        //num1 = 10,错误,不可以修改非static数据成员
    }

    int sum2(int a)const
    {
        num2 = 2;//正确,可以修改sattic数据成员
        return a + num2;
    }

    int sum3(int a)
    {
        num1 = 10;//正确,修改非static数据成员
        num2 = 20;//正确,修改sattic数据成员
        return a + num1 + num2;
    }



};

int R::num2 = 0;
int main()
{
    R t;
    cout << "t.sum1(1):\t" << t.sum1(1) << endl;
    cout << "t.sum2(1):\t" << t.sum2(1) << endl;
    cout << "t.sum3(1):\t" << t.sum3(1) << endl;
}

 

 

 

分享到:
评论

相关推荐

    cpp关于const和函数

    void fun() const{}; 、 const void fun(){}; 和void const fun(){}; 的区别?

    C++中const用法全解

    const 可以修饰参数,例如:void fun0(const A* a ); void fun1(const A& a); 在函数体中,按照 const 所修饰的部分进行常量化。 小结 const 是 C++ 中一个非常重要的关键字,它可以用来修饰变量、指针、函数参数...

    c++里const用法归纳

    void fun0(const A* a ); void fun1( ) const; 这里,fun1()函数为类成员函数,const修饰的是整个函数。 Const也可以用来修饰参数,例如: void fun0(const A* a ); void fun1(const A& a); 调用函数的时候,用...

    const 用法

    - **修饰函数参数**:如 `void Fun(const int Var);` - **修饰函数返回值**:如 `const int Fun1();` - **修饰类的成员函数**:如 `int Fun() const;` - **在其他文件中引用 `const` 常量**:需使用 `extern ...

    C++中const使用说明

    - 作为参数:`void fun(const A *a)`或`void fun(const A &a)`,保护了传入的对象或指针内容不被函数内部修改。 - 作为返回值:`const A fun2();`或`const A* fun3();`,防止返回的对象被意外修改。 4. **`const`...

    c++中const关键字使用详解

    void fun0(const int* a); // a是一个指向整数的常量指针,不能修改a指向的值 void fun1(const int& a); // a是一个对整数的常量引用,不能修改a引用的对象 ``` 2. 返回值的const修饰 如果函数的返回值被声明为...

    关于const的详细讲解,非常有用

    - 修饰函数参数:`void Fun(const int i)`,保证参数在函数内部不会被修改。 - 修饰函数返回值:如`const int Fun()`,返回的常量不能被改变。 - 修饰成员函数:`int Fun() const;`,表明成员函数不会修改类的...

    C++中const关键字详解

    void Fun(const A* in); // 修饰指针型传入参数 void Fun(const A& in); // 修饰引用型传入参数 ``` 这样做的好处是可以提高函数的健壮性,避免意外修改外部数据。 ##### 4. 修饰函数返回值 将函数的返回值声明为`...

    Const 用法小结

    - 修饰函数参数,保护参数不被函数内部修改,如`void fun0(const A* a );`,防止函数通过指针修改传入对象的值。 - 修饰成员函数,表示函数不会修改对象的状态,如`void fun1() const;`这样的成员函数称为常量成员...

    c语言const用法小结

    ` 和 `void fun0(const A* a );`。使用 const 可以保护函数的参数和返回值,避免了意外的修改操作。 const 是 C 语言中一个非常重要的关键字,它可以用来修饰变量、指针、函数返回值、函数参数和成员函数等。使用 ...

    const与static用法完整总结

    void fun(const B& b); ``` **6. const成员函数** 当一个成员函数被声明为`const`时,意味着它不会修改类的任何成员变量。 ```cpp class B { public: void display() const; // 不修改成员变量 }; void B::...

    const在函数声明中的应用

    作者:陶宁,华清远见嵌入式学院上海中心讲师。  1.在一个函数声明中,const 可以修饰函数的... 1) 修饰参数的const,如 void fun0(const A* a ); void fun1(const A& a);  调用函数的时候,用相应的变量初始化

    C语言CONST的使用

    6. 修饰函数的常参数:如void fun(const int var); 7. 修饰函数的返回值:如const MyClass fun2(); 8. 修饰类的成员函数:如class A { int fun() const; }; 在使用const时,还需注意以下几点: - 常量必须初始化...

    C++中const用法总结

    #### 二、const修饰普通变量和指针 `const` 可以用来修饰变量、指针等,使它们成为不可变的常量。在修饰普通变量时,无论 `const` 放在数据类型之前还是之后,效果是一样的。例如: ```cpp const int nValue = 10;...

    constt文档

    void fun1(const int &val) { // 无法修改 val } ``` 3. **修饰指针**: - `const int *A`:表示指针`A`指向的是一个常量整数,即不能通过指针修改所指的值。 - `int *const A`:表示指针`A`本身是常量,其...

    const用法详细解释

    void fun1(const int &val) { // val不能被修改 } void fun2(int &val) { val = 10; } // val可以被修改 ``` 3. **节省内存空间**:使用`const`定义的变量,编译器可以进行优化,如在类外定义的`const`常量不会...

    const用法

    void fun0(const A *a); // 读取数据,不修改 ``` #### 11. 成员函数 成员函数可以声明为`const`,表明该函数不会修改对象状态。 ```cpp void fun1() const; // 成员函数声明为const ``` #### 结论 `const`的...

    C++:关于const的思考.doc

    - **常函数参数**:`void func(const int x)`中的`x`在函数内部不可修改。 - **常返回值**:函数返回`const`类型,如`const int Fun()`,确保返回的值不可修改。 - **常成员函数**:`const`修饰的成员函数,如`...

    C++中const用法总结.doc

    在C++编程语言中,`const`关键字是一个非常重要的元素,用于声明不可变性,确保程序的稳定性和安全性。以下是对C++中`const`用法的详细总结: 1. **const修饰普通变量和指针** 当`const`修饰普通变量时,变量的值...

Global site tag (gtag.js) - Google Analytics