c – 抛弃方法的常数

c – 抛弃方法的常数,第1张

概述作为我之前的问题( Writing to class member through const &)的后续,是否也很好地定义并正确抛弃类成员方法的常量? class A{public: A() : a(5) { } int run() const { std::cout << "a: " << a << std::endl; 作为我之前的问题( Writing to class member through const &)的后续,是否也很好地定义并正确抛弃类成员方法的常量?

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 – 抛弃方法的常数所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1217679.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存