问题标签 [overload-resolution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3510 浏览

c++ - 在 c++ 中,为什么编译器在 const 也可以工作时选择非常量函数?

例如,假设我有一个类:

在代码的其他地方,我有这样的东西:

有谁知道为什么编译器会在这种情况下选择非常量版本?

这是一个有点做作的例子,但我们试图解决的实际问题是定期自动保存一个对象,如果它已经改变,并且指针必须是非常量的,因为它可能会在某个时候改变。

0 投票
6 回答
405 浏览

c++ - operator>= 重载的奇怪行为

我在 C++ 中使用运算符重载时有一个奇怪的行为。我有一堂课,我需要检查它的内容是否大于或等于 long double。我重载了 >= 运算符来进行这个检查,我的声明如下:

我不得不说,我的班级也有一个 cast-to-long-double 运算符,它仅在某些条件下无例外地工作。现在,当我使用此运算符时,编译器抱怨 operator>= 的使用不明确,替代方法是:

  • 矿。
  • 内置的operator>=(long double, int).

现在,我如何强制程序使用我的运算符?

0 投票
3 回答
369 浏览

c++ - 为什么编译器没有在以下示例中选择我的函数模板重载?

给定以下函数模板:

为什么下面的代码总是调用重载#1 而不是重载#2?

鉴于 of 的第二个参数f是 的派生类型Base,我希望编译器会选择重载 #2,因为它比重载 #1 中的泛型类型更匹配。

是否有任何技术可以用来重写这些函数,以便用户可以编写main函数中显示的代码(即,利用编译器推导参数类型)?

0 投票
8 回答
6606 浏览

c# - 使用类型 C# 的方法重载

我想知道以下是否可能。创建一个接受匿名类型(string、int、decimal、customObject 等)的类,然后具有基于 Type 执行不同操作的重载方法。例子

所以现在我可以调用 GetName 方法了,因为我在初始化对象时已经传入了类型,所以找到并执行了正确的方法。

这是可能的还是我只是在做梦?

0 投票
1 回答
736 浏览

c# - 重载、泛型类型推断和“params”关键字

我刚刚注意到重载决议的一个奇怪行为。

假设我有以下方法:

现在,我知道通常会使用少量显式参数调用此方法,因此为方便起见,我添加了此重载:

现在我尝试调用这些方法:

params但在这两种情况下,都会调用with 的重载。我本来希望IEnumerable<T>在 a 的情况下调用重载List<T>,因为它似乎是一个更好的匹配(至少对我来说)。

这种行为正常吗?谁能解释一下?我在 MSDN 文档中找不到任何明确的信息......这里涉及的重载解决规则是什么?

0 投票
6 回答
488 浏览

c++ - 涉及临时的运算符重载解决顺序

考虑以下最小示例:

在 g++ 和 Visual C++ 上的输出是

写入临时对象的版本myostream(cout)似乎更喜欢成员运算符ostream::operator<<(void *),而不是自由运算符operator<<(ostream &, char *)。对象是否有名称似乎有所不同。

为什么会这样?以及如何防止这种行为?

编辑:现在从各种答案中可以清楚地看出为什么会发生这种情况。至于如何防止这种情况,以下似乎很有吸引力:

然而,这会导致各种歧义。

0 投票
1 回答
13896 浏览

c++ - 如果在推演过程中无法解析函数的地址,是SFINAE还是编译器错误?

在 C++0x 中,SFINAE 规则已被简化,因此在演绎的“直接上下文”中出现的任何无效表达式或类型都不会导致编译器错误,而是会导致演绎失败 (SFINAE)。

我的问题是:
如果我取了一个重载函数的地址并且它不能被解析,那是在直接推理的上下文中失败吗?
(即如果无法解决,是硬错误还是 SFINAE)?

这是一些示例代码:

Gcc 4.5 声明这是一个编译器错误,并且 clang 吐出了一个断言违规。

以下是一些更相关的感兴趣的问题:

FCD-C++0x 是否清楚地指定了这里应该发生什么?
编译器拒绝此代码是否错误?
是否需要更好地定义演绎的“直接上下文”?

谢谢!

0 投票
2 回答
5254 浏览

c++ - ADL的陷阱是什么?

前段时间我读了一篇文章,解释了参数依赖查找的几个陷阱,但我再也找不到了。这是关于获得对你不应该访问的东西的访问权或类似的东西。所以我想我会在这里问:ADL 的陷阱是什么?

0 投票
2 回答
420 浏览

c# - Overload Resolution and Optional Parameters in C# 4

I am working with some code that has seven overloads of a function TraceWrite:

(All public static, namespacing noise elided above and throughout.)

So, with that background:
1) Elsewhere, I call TraceWrite with four arguments: string, LogLevelENUM, string, bool, and I get the following errors:

Why doesn't this call resolve to the second overload? (TraceWrite(string, LogLevelENUM, string, bool, string = ""))

2) If I were to call TraceWrite with string, LogLevelENUM, string, string, which overload would be called? The first or the third? And why?

0 投票
5 回答
3203 浏览

c++ - 重载虚函数调用解析

请考虑以下代码:

我很想知道为什么 C++ 选择通过this将对象的指针向上转换到基类来解决最后一行的函数调用,而不是向上转换f()? 有什么办法可以得到我想要的行为?