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

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

  • 题目
5 题(单选题)

题目名称:

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

题目内容:

**A** .可能被改变

**B** .已经被改变

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

**D** .不变
  • 题解
    在这个函数原型 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;
}

在上述例子中,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;
}

在上述例子中,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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值