overload-resolution 相关问题

重载分辨率是一种语言机制,可以在几个可行的函数重载中进行选择。即使对于有经验的用户来说,它的规则也很复杂且经常令人惊讶。

在非常量对象上,为什么 C++ 不使用 public-const 和 private-non-const 重载来调用成员函数的 const 版本?

C级 { 民众: 无效 foo() 常量 {} 私人的: 无效 foo() {} }; int main() { Cc; c.foo(); } MSVC 2013 不喜欢这样: > 错误 C2248: 'C::foo' : 无法访问私有成员

回答 2 投票 0

为什么调用非常量成员函数而不是常量成员函数?

为了我的目的,我尝试包装一些类似于Qt共享数据指针的东西,经过测试,我发现当应该调用const函数时,会选择它的非const版本....

回答 4 投票 0

如何在成员函数内部完美转发 `*this` 对象

是否可以在成员函数内部完美转发 *this 对象?如果是的话,我们该怎么做呢?如果不是,那么为什么不呢?我们有哪些替代方案可以达到同样的效果。 请看...

回答 2 投票 0

为什么这些不同的用户定义转换序列在重载解析方面都没有更好?

我正在转换大型代码以使用自定义共享指针而不是原始指针。我在重载解析方面遇到问题。考虑这个例子: #包括 结构体A{}; 结构...

回答 3 投票 0

为什么更好的标准转换序列后跟用户定义的转换不能使重载变得更好?

这是如何避免从“double”到“int”的隐式转换?的后续问题。假设我有以下代码: 模板 结构包装器{ 包装器(常量 T&); }; 无效 f(wr...

回答 1 投票 0

如何使带有转换构造函数的包装器<int>类在重载决策中胜过包装器<double>?

我正在尝试设计一个包装器来使用一些特殊逻辑来处理算术参数。 https://godbolt.org/z/zG959e5Pz #包括 模板 结构包装器{ 包装纸(c...

回答 1 投票 0

为什么调用带有转换构造函数的重载函数是不明确的?

这是如何避免从“double”到“int”的隐式转换?的后续问题。假设我有以下代码: 模板 结构包装器{ 包装器(常量 T&); }; 无效 f(wr...

回答 2 投票 0

传递 size_t 时对重载 sqrt 函数的不明确调用

字符串辅助; int maxy, auxx = 0; cin >> aux; maxy = (int)sqrt(aux.size()); 为什么我会收到此错误: 1> 错误 C2668: 'sqrt' : 对重载函数的不明确调用 1> 可以...

回答 4 投票 0

传递整数文字 0 时,调用采用 unsigned int 或指针的重载函数是不明确的

这个错误信息是什么意思? 错误:重载的“setval(int)”调用不明确 巨大的.cpp:18:注意:候选者是:void巨大::setval(unsigned int) giga.cpp:28: 注意:void hu...

回答 6 投票 0

为什么对重载函数模板的调用不存在二义性?

考虑以下示例。标记为 (1) 和 (2) 的行有两个函数模板,它们在第 (3) 行被调用。两个模板都符合调用,似乎没有一个更合适

回答 1 投票 0

这里有没有一个好方法可以让用户既保留属性的访问控制又重载索引方法?(matlab 2020a)

假设类中的成员具有私有访问属性,即 GetAccess=private,如果我们使用“.”在重载的 subsref 方法中类型引用该成员,然后访问

回答 1 投票 0

如何在自定义类中重载A{n}? matlab 2020a

背景知识 子引用 书中(2014年出版)的一些解释: 重载subsref方法时,可以使用switch语句来选择索引的类型并获取实际的...

回答 1 投票 0

模板情况下的重载解析以及 unique_ptr 中的继承

我有两节课: 基类{}; 派生类:公共基类{}; 以及两个重载函数: 无效调用(std::unique_ptr op) { std::cout << "First overloading" << s...

回答 2 投票 0

Kotlin:内联 lambda 和重载解析歧义

我有一个简单的工厂模式,其中的实现是通过重载解析来确定的。问题是 Kotlin 编译器抱怨内联的“重载解析歧义..”

回答 2 投票 0

i18next:调用 getFixedT 函数时没有重载匹配此调用

我在 TS 应用程序(不是 React)中使用 i18next 库并收到意外的 Typescript 错误。 调用 getFixedT 函数时出现类型不匹配。我正在为 lng a 传递字符串...

回答 1 投票 0

重载方法但输出不是我期望的

这里是问题: 创建一个名为 TipCalculation 的程序,其中包含两个重载方法——一个接受双倍的餐费和小费(例如,30.00 和 0.20,其中 0.20 代表...

回答 2 投票 0

直接初始化中的转换运算符

C++14 标准 (N4296) 在 8.5/17.6.1 中说 如果初始化是直接初始化 [...],则考虑构造函数。列举了适用的构造函数,选出最好的 一个是

回答 1 投票 0

为什么 const char* 隐式转换为 bool 而不是 std::string?

#include #包括 结构我的结构{ mystruct(std::string s){ std::cout<<__FUNCTION__ <<" String "< #include <iostream> #include <string> struct mystruct{ mystruct(std::string s){ std::cout<<__FUNCTION__ <<" String "<<s; } explicit mystruct(bool s) { std::cout<<__FUNCTION__<<" Bool "<<s; } }; int main() { const char* c ="hello"; mystruct obj(c); return 0; } 输出: mystruct Bool 1 为什么 const char* 隐式转换为 bool 而不是 std::string,尽管构造函数需要 explicit 类型? 这里如何应用隐式转换优先级? 因为const char*到bool的隐式转换是标准转换,而const char*到std::string是自定义转换。前者排名更高,在 overload resolution. 中获胜 标准转换序列总是优于用户定义的转换序列或省略号转换序列。 BTW:mystruct obj(c);执行直接初始化,explicit转换构造函数包括mystruct::mystruct(bool)也被考虑。结果,c 被转换为 bool 然后传递给 mystruct::mystruct(bool) 作为构造 obj. 的参数 直接初始化比复制初始化更宽松:复制初始化只考虑非显式构造函数和非显式用户定义的转换函数,而直接初始化考虑所有构造函数和所有用户定义的转换函数。 关于explicit说明符, 指定构造函数 or conversion function (since C++11) or deduction guide (since C++17) 是显式的,也就是说,它不能用于 隐式转换 和 copy-initialization. “为什么 const char* 隐式转换为 bool 而不是 std::string,尽管构造函数需要 explicit 类型?”: 标准转换优先于用户定义的转换。 char const* 是指向常量字符的指针,指针可以隐式转换为 bool :如果它是 nullptr,则转换为 false,否则转换为 true。 您曾经在检查指针是否为NULL的情况下看到如此有效的转换,所以如果不是nulptr我们安全地取消引用它否则它具有nullptr值因此它是不正确的取消引用它: int* ptr = nullptr; if(ptr) // false because ptr has nullptr or NULL or 0 or 0x000000 address value std::cout << ptr << '\t' << *ptr << '\n'; // not executed ptr = new int(10); // valid and non-nullptr if(ptr) // non-nullptr so condition succeeds std::cout << ptr << '\t' << *ptr << '\n'; // 0FED155 10 delete ptr; // free memory explicit构造函数意味着它只能被显式调用,唯一的方法是像你的情况一样通过直接初始化: mystruct obj(c); // direct initialization mystruct obj = c; // copy-initialization. Error: constructor myStruct(bool) is `explicit` 只是添加到已经很好的答案中。您可以通过添加 delegating constructor 来解决这个问题,如下所示: mystruct(const char* s):mystruct(std::string(s)) {} 这将在重载决策中胜过 bool。 另一种选择是在这里避免使用 bool 并使用 bool 但具有更多含义的东西。这可能是'布尔盲目'的一个例子

回答 3 投票 0

我们如何根据输入参数的数量分派到不同的类方法?

我们想要一个包含两个同名方法的类,但是: 存在一种只接受一个参数的方法。 另一种方法接受两个或多个参数。 也许,实施 m...

回答 2 投票 0

带 enable_if 的过载解决方案

最近,我在面试中被问到这个问题: 以下代码将调用哪个 Vector 构造函数? #包括 类迭代器{ 民众: 迭代器(int &x): ptr_(&am...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.