问题标签 [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.
c++ - 在 c++ 中,为什么编译器在 const 也可以工作时选择非常量函数?
例如,假设我有一个类:
在代码的其他地方,我有这样的东西:
有谁知道为什么编译器会在这种情况下选择非常量版本?
这是一个有点做作的例子,但我们试图解决的实际问题是定期自动保存一个对象,如果它已经改变,并且指针必须是非常量的,因为它可能会在某个时候改变。
c++ - operator>= 重载的奇怪行为
我在 C++ 中使用运算符重载时有一个奇怪的行为。我有一堂课,我需要检查它的内容是否大于或等于 long double。我重载了 >= 运算符来进行这个检查,我的声明如下:
我不得不说,我的班级也有一个 cast-to-long-double 运算符,它仅在某些条件下无例外地工作。现在,当我使用此运算符时,编译器抱怨 operator>= 的使用不明确,替代方法是:
- 矿。
- 内置的
operator>=(long double, int)
.
现在,我如何强制程序使用我的运算符?
c++ - 为什么编译器没有在以下示例中选择我的函数模板重载?
给定以下函数模板:
为什么下面的代码总是调用重载#1 而不是重载#2?
鉴于 of 的第二个参数f
是 的派生类型Base
,我希望编译器会选择重载 #2,因为它比重载 #1 中的泛型类型更匹配。
是否有任何技术可以用来重写这些函数,以便用户可以编写main
函数中显示的代码(即,利用编译器推导参数类型)?
c# - 使用类型 C# 的方法重载
我想知道以下是否可能。创建一个接受匿名类型(string、int、decimal、customObject 等)的类,然后具有基于 Type 执行不同操作的重载方法。例子
所以现在我可以调用 GetName 方法了,因为我在初始化对象时已经传入了类型,所以找到并执行了正确的方法。
这是可能的还是我只是在做梦?
c# - 重载、泛型类型推断和“params”关键字
我刚刚注意到重载决议的一个奇怪行为。
假设我有以下方法:
现在,我知道通常会使用少量显式参数调用此方法,因此为方便起见,我添加了此重载:
现在我尝试调用这些方法:
params
但在这两种情况下,都会调用with 的重载。我本来希望IEnumerable<T>
在 a 的情况下调用重载List<T>
,因为它似乎是一个更好的匹配(至少对我来说)。
这种行为正常吗?谁能解释一下?我在 MSDN 文档中找不到任何明确的信息......这里涉及的重载解决规则是什么?
c++ - 涉及临时的运算符重载解决顺序
考虑以下最小示例:
在 g++ 和 Visual C++ 上的输出是
写入临时对象的版本myostream(cout)
似乎更喜欢成员运算符ostream::operator<<(void *)
,而不是自由运算符operator<<(ostream &, char *)
。对象是否有名称似乎有所不同。
为什么会这样?以及如何防止这种行为?
编辑:现在从各种答案中可以清楚地看出为什么会发生这种情况。至于如何防止这种情况,以下似乎很有吸引力:
然而,这会导致各种歧义。
c++ - 如果在推演过程中无法解析函数的地址,是SFINAE还是编译器错误?
在 C++0x 中,SFINAE 规则已被简化,因此在演绎的“直接上下文”中出现的任何无效表达式或类型都不会导致编译器错误,而是会导致演绎失败 (SFINAE)。
我的问题是:
如果我取了一个重载函数的地址并且它不能被解析,那是在直接推理的上下文中失败吗?
(即如果无法解决,是硬错误还是 SFINAE)?
这是一些示例代码:
Gcc 4.5 声明这是一个编译器错误,并且 clang 吐出了一个断言违规。
以下是一些更相关的感兴趣的问题:
FCD-C++0x 是否清楚地指定了这里应该发生什么?
编译器拒绝此代码是否错误?
是否需要更好地定义演绎的“直接上下文”?
谢谢!
c++ - ADL的陷阱是什么?
前段时间我读了一篇文章,解释了参数依赖查找的几个陷阱,但我再也找不到了。这是关于获得对你不应该访问的东西的访问权或类似的东西。所以我想我会在这里问:ADL 的陷阱是什么?
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?
c++ - 重载虚函数调用解析
请考虑以下代码:
我很想知道为什么 C++ 选择通过this
将对象的指针向上转换到基类来解决最后一行的函数调用,而不是向上转换f()
? 有什么办法可以得到我想要的行为?