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成员函数修改成员变量,请考虑将前者标记为 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |