class A{public: A() : a(5) { } int run() const { std::cout << "a: " << a << std::endl; int& x = (int&)a; x = 17; std::cout << "a: " << a << std::endl; return 0; }private: int a;};int main(){ A program; return program.run();}
输出(在cpp.sh上用c 14测试-O0,-Wall,-Wextra和-Wpedantic):
a: 5a: 17
如果没有,我会参考哪个标准来解释?
解决方法 是的,你的代码是有效的,虽然不推荐,只要你开始的对象实例是非const(代码中的情况,程序;非const).从const实例中删除常量是UB(未定义的行为).从casted-to const初始非const实例中删除const-ness是明确定义的,参见例如const_cast
的文档.
如果您确实需要从const成员函数修改成员变量,请考虑将前者标记为mutable
.否则,当有人(错误地)在const实例上调用您的成员函数时,您当前的技术将导致UB.
以上是内存溢出为你收集整理的c – 抛弃方法的常数全部内容,希望文章能够帮你解决c – 抛弃方法的常数所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)