假设有一类T,带两个成员函数重载分辨率C++对const成员函数
char foo() const {...}
char foo() {...}
。
这是我的理解,当要求一个常数T,我们决心(1);对于一个非常数T,我们解决(2)。
- 是正确的吗?
- 在此决议中调用哪条规则? (参考标准伟大的,但一个有用的简要理解)
注:
我试图谷歌,但旧的命中我得到了SO份,涉及常量其他重载决议情况。然而,链接到一个老的SO实际上解释上述显然很大。
当重新阅读Stroustrup的“C++编程语言”,第2版(“特别版”),第11.12节中的字符串/ 294.由于Stroustrup如此精确,答案可能在前几节中,但我无法看到在哪里。参考Stroustrup中的章节也非常受欢迎(第2版最好,因为这是我拥有的版本)。第10.2.6节将const成员引入为“不改变对象值”的那些成员,这暗示了答案,但并不意味着我是一个明确的解析指令。
在高级视图中,您可以考虑编译器将执行的转换。成员函数将被转换为:'char foo(T const * this)'和'char foo(T * this)'(细节除外)。 –
@David Rodriguez - dribeas:我明白了;对于指针类型的参数,const p和p在重载分辨率上是有区别的,是正确的吗?这确实给了一些直觉。 – gnometorule
我已正确地重新格式化您的问题。请花点时间阅读[Markdown格式帮助](http://stackoverflow.com/help/formatting)。 –