加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 抛弃方法的常数

发布时间:2020-12-16 10:06:12 所属栏目:百科 来源:网络整理
导读:作为我之前的问题( 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;
作为我之前的问题( 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: 5
a: 17

如果没有,我会参考哪个标准来解释?

解决方法

是的,你的代码是有效的,虽然不推荐,只要你开始的对象实例是非const(代码中的情况,程序;非const).

从const实例中删除常量是UB(未定义的行为).从casted-to const初始非const实例中删除const-ness是明确定义的,参见例如const_cast的文档.

如果您确实需要从const成员函数修改成员变量,请考虑将前者标记为mutable.否则,当有人(错误地)在const实例上调用您的成员函数时,您当前的技术将导致UB.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读