On a nonconst object, why won't C++ call the const version of a method with public-const and private-nonconst overloads?
问题 class C { public: void foo() const {} private: void foo() {} }; int main() { C c; c.foo(); } MSVC 2013 doesn't like this: > error C2248: 'C::foo' : cannot access private member declared in class 'C' If I cast to a const reference, it works: const_cast<C const &>(c).foo(); Why can't I call the const method on the non const object? 回答1: From the standard: 13.3.3 If a best viable function exists and is unique, overload resolution succeeds and produces it as the result. Otherwise overload