首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >常量成员函数优先于返回值类型匹配

常量成员函数优先于返回值类型匹配
EN

Stack Overflow用户
提问于 2016-09-13 16:25:17
回答 1查看 573关注 0票数 17

Y::test1()中,非常数X::operator void*()优先于看似更好的匹配,X::operator bool() const -为什么?标准中对这种现象的描述在哪里?

代码语言:javascript
复制
#include <iostream>

struct X {
  operator void*()      { std::cout << "  operator void*()\n"; return nullptr; }
  operator bool() const { std::cout << "  operator bool()\n";  return true; }
};

struct Y {
  X x;
  bool test1()       { std::cout << "test1()\n"; return x; }
  bool test2() const { std::cout << "test2()\n"; return x; }
};

int main() {
  Y y;
  y.test1();
  y.test2();
}

输出:

代码语言:javascript
复制
test1()
  operator void*()
test2()
  operator bool()
EN

回答 1

Stack Overflow用户

发布于 2016-09-13 16:29:13

隐式this指针是非const的。因此,在考虑任何const方法之前,重载解析发生在所有非const方法(包括模板-这是pub测验中的一个)的集合上。

一个函数被标记为const并不能使它更适合非const this指针,如果你明白我的意思的话。

参见http://en.cppreference.com/w/cpp/language/overload_resolution,它在很大程度上代理了这些标准。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39465404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档