问题标签 [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++ - 为什么在类的 const 版本上选择非 const 版本?
以下是测试代码:
现在,在调用时:
为什么它总是选择非常量版本?即使 makeoperator const int () const;
对调用没有任何影响foo()
。除了标准参考之外,有人可以从逻辑上解释其背后的原因吗?
c++ - 这种过载解决头痛的原因是什么?
我有一个程序,其中有很多嵌套的 if/switch 语句,这些语句在多个地方重复。我尝试将其提取出来并将开关放在模板方法类中,然后允许客户端使用重载来重载他们想要专门处理的开关分支:
但是,这无法编译(至少在ClientMergeFooTwo
's 的情况下),说它不能将 Foo& 转换为 SpecificFoo&。任何想法为什么它失败了转换而不是选择完美的通用重载MergeFoo
?
编辑:好吧,考虑到我尝试编写它的速度,这个伪代码示例显然做得不太好。我已经纠正了一些错误...
c# - 重载方法中的 StackOverflowException
我试图在这样的代码中调用重载方法:
一切看起来都不错,但是抛出了 StackOverflowException。据我了解,如果我调用重载方法,那么应该调用最具体的方法版本,但在这种情况下Method(BaseClass<ChildClass> other)
调用的是Method(ChildClass other)
.
但是当我使用演员表时:
一切都按预期工作。我错过了什么吗?或者这是.NET 中的一个错误?在 .NET 2.0、3.5、4.0 中测试
c++ - c++ overload operator resolution
I'm learning c++ and using C++ Primer. Consider the following exercise 14.46:
When I compile using gcc 4.5 the above program, I get
Why is (3) not selected ? Isn't it exact match?
However, I noticed that removing const-ness of parameter in (3) matches exactly, i.e.,
Using (4) there is no ambiguity. Am I missing something here?
c++ - C++ 编译器选择错误的类成员函数重载
我有这个代码:
但是,编译器选择了错误的Other::some_function()
in重载wtf_func()
(即非 const 重载)。我怎样才能解决这个问题?请注意,由于某些原因,我无法更改Other::some_function()
.
c++ - 由于超类导致重载构造函数的模糊调用(按值传递)
我围绕 GSL 的某些部分编写了一个小的 C++ 包装器,并遇到了以下难题(对我而言)。代码(简化为基本内容)如下:
不会使用 gcc 4.4.5 g++ -c v.cpp 编译但会产生
我很惊讶,受保护的基类 gsl_vector_view 被调用 useVector( Vector ) 考虑在内。我会认为 useVector 属于“C++ 编程语言”的说法中的“公众”,第 3 e.,p。405,因此无法访问该受保护的信息,因此不会被它混淆。我知道我可以通过将构造函数声明为来消除歧义
我不知道(老实说,也不明白),当我将构造函数声明为时,重载调用的歧义消失了
即通过引用传递参数(无论如何我都会考虑正确的做事方式)。
c# - 使用动态参数的方法重载解析
这可能之前已经回答过了。我看到许多“动态方法重载解析”问题,但没有一个专门处理传递dynamic
参数的问题。在下面的代码中Test
,最后一次调用M
无法解析(它不会编译)。错误是:[前两个重载M
]之间的调用不明确。
- 为什么,由于类型不是静态已知的,它不解决重载接受
dynamic
? - 甚至可以使用重载方法
dynamic
吗? - 解决此问题的最佳方法是什么?
c++ - 调用 const 函数而不是其非 const 版本
为了我的目的,我尝试包装类似于 Qt 的共享数据指针的东西,经过测试,我发现应该调用 const 函数时,选择了它的非 const 版本。
我正在使用 C++0x 选项进行编译,这是一个最小的代码:
如您所见,Data.x 是一个 const 函数,因此调用的 operator -> 应该是 const 的。当我注释掉非常量时,它编译时没有错误,所以这是可能的。然而我的终端打印:
“非常量数据指针”
是 GCC 错误(我有 4.5.2),还是我遗漏了什么?
c++ - C++11 重载解析的奇怪案例
我今天遇到了一个相当奇怪的重载解决案例。我将其简化为以下内容:
我完全期望C c({1, 2})
匹配 的第一个构造函数C
,可变参数的数量为零,{1, 2}
并被视为S
对象的初始化列表构造。
但是,我收到一个编译器错误,表明它与已删除的 C 复制构造函数匹配!
我可以看到它是如何工作的 -{1, 2}
可以解释为 C 的有效初始化程序,1
作为初始化程序S
(它可以从 int 隐式构造,因为它的构造函数的第二个参数具有默认值),并且2
作为一个可变参数......但我不明白为什么这会是一个更好的匹配,特别是看到有问题的复制构造函数被删除。
有人可以解释一下这里起作用的重载解决规则,并说明是否有一种解决方法不涉及在构造函数调用中提及 S 的名称?
编辑:由于有人提到该片段使用不同的编译器编译,我应该澄清一下,我在 GCC 4.6.1 中遇到了上述错误。
编辑 2:我进一步简化了代码片段,以得到更令人不安的失败:
错误:
而这一次,GCC 4.5.1 也给出了同样的错误(减去constexpr
它没有隐式生成的 s 和 move 构造函数)。
我很难相信这是语言设计者的意图......
c# - 奇怪的 C# 编译器行为(重载解决方案)
我发现以下代码的 C# 编译器行为非常奇怪:
在最后一行断言失败并显示以下消息:
我理解测试失败的原因:在其他情况下p2 = new SqlParameter("@p", 0);
解决为. 但我不明白为什么会这样。对我来说它看起来像一个错误,但我无法相信 C# 编译器会有这样的错误。SqlParameter(string, SqlDbType)
SqlParameter(string, object)
这有什么原因吗?
PS对于任何带有枚举参数和0值的方法重载似乎都是一个问题(SqlDbType是枚举)。