当前位置:   article > 正文

C++const在函数函数修饰 详解_c++ const 修饰函数

c++ const 修饰函数

今天刷题看到这样一道题 发现对const在函数中的修饰还不懂 就去查了一下资料 下面做一个分享记录

  • 题目
5 题(单选题)

题目名称:

假设 AA 是一个类, AA* abc () const 是该类的一个成员函数的原型。
若该函数返回 this 值,当用 x.abc ()调用该成员函数后, x 的值是( )

题目内容:

**A** .可能被改变

**B** .已经被改变

**C** . 受到函数调用的影响

**D** .不变
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 题解
    在这个函数原型 AA* abc () const 中,const 关键字修饰的是成员函数,表示这个函数不会修改它所属的对象的状态。这意味着在这个函数中,this 指针是指向常量的指针,因此不能通过 this 指针修改对象的任何数据成员。也就是说,即使这个函数返回 this 指针,调用该函数也不会改变对象的状态,所以 x 的值不会改变。

情况一 :const 关键字紧跟在函数参数类型后面

如果 const 关键字紧跟在函数参数类型后面,那么它表示该参数是常量,即在函数内部不能改变该参数的值。例如,void func(const int param) 中的 param 参数在 func 中是不可变的。

void printArray(const int* arr, int size) {
    // 这行代码将导致编译错误,因为 arr 是 const 指针
    // arr[0] = 100; 

    for(int i = 0; i < size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    printArray(arr, 5);
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在上述例子中,printArray 函数的参数 arr 是一个常量指针,指向的元素不能被修改。如果你试图修改 arr 指向的值,编译器会给出错误。

情况二:const 关键字紧跟在函数参数类型后面

如果 const 关键字紧跟在函数的参数列表之后,那么它表示这个函数是一个常量成员函数,即这个函数不会改变它所属的对象的状态。例如,void MyClass::func() const 表示 func 不会改变 MyClass 的任何数据成员

const 关键字在函数参数列表后面,表示该函数是一个常量成员函数,不能修改它所属的对象的状态。例如:

class MyClass {
private:
    int value;

public:
    MyClass(int val) : value(val) {}

    int getValue() const {
        // 这行代码将导致编译错误,因为 this 是指向 const 的指针
        // value = 100; 

        return value;
    }
};

int main() {
    MyClass obj(5);
    std::cout << obj.getValue() << std::endl;
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

在上述例子中,getValue 是一个常量成员函数,它不能修改它所属的对象的任何数据成员。如果你试图在 getValue 函数中修改 value,编译器会给出错误

情况三:const 关键字用在函数返回值类型前

如果 const 关键字用在函数返回值类型前,那么它表示函数返回的是一个常量值,不能对这个返回值进行修改。例如,const int func() 返回的是一个常量整数,不能对这个返回值进行赋值操作。

当你在C++中将 const 关键字用于函数返回值类型时,函数返回的就是一个常量,无法修改。下面给出一个例子

class MyClass {
private:
    int value;

public:
    MyClass(int val) : value(val) {}

    const int getValue() const {
        return value;
    }
};

int main() {
    MyClass obj(5);
    // 下面这行代码将导致编译错误,因为 getValue() 返回的是 const int
    obj.getValue() = 10;
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/838288
推荐阅读
  

闽ICP备14008679号