c ++中的const变量

Vij*_*jay 2 c++ const

AFAIK我们无法在C中更改常量变量的值.但我面对这个面试问题如下:

在C++中,我们有程序来改变常量变量的值.谁能告诉我怎么能这样做?

Jam*_*lis 8

您可以修改const限定的类类型对象的可变数据成员:

struct awesome_struct {
    awesome_struct() : x(0) { }
    mutable int x;
};

int main() {
    const awesome_struct a;
    a.x = 42;
}
Run Code Online (Sandbox Code Playgroud)

这里的行为是明确定义的.


Jer*_*fin 7

在这种情况下,我想我已经解释了这种情况:试图改变变量的值,即const给出了未定义的行为.他可能要问的是如何更改一个本身不是const的变量,但是你已经收到指针或const的引用.在这种情况下,当您确定变量本身不是 const限定时,您可以抛弃常量const_cast,然后继续修改.

如果在变量本身是const限定的情况下执行相同的操作,编译器将允许代码进行编译,但结果将是未定义的行为.修改变量的尝试可能会成功 - 或者它可能会抛出异常,中止程序,重新格式化NAS设备的硬盘驱动器,或者其他任何东西.

值得一提的是,当/如果变量可能需要以这种方式使用时,您可以指定变量本身是可变的.这基本上意味着所讨论的变量永远不是 const限定的,即使它所属的对象 const限定的.


Pra*_*rav 6

const没有调用UB的情况下,没有完美的方法来抛弃变量的常量(根据定义)

很可能面试官不知道他们在谈论什么.;-)