![]() |
1
2
问题由于调用不明确,带和不带显式复制构造函数的版本都不是有效的C++代码。 MSVC编译器碰巧做了一些“神奇的”和非标准的事情来编译它(这是MSVC的一个常见主题)。如果您尝试任何其他主要编译器(gcc、clang、icc),请参阅实时示例 here )他们都没能编译出来。 我不会依赖这种模棱两可的代码,即使它“工作”,因为它可能(也可能会)停止使用另一个编译器版本或不同的编译器。 这种模糊性来自于C++对潜在隐式转换序列进行排序的方式:它总是尝试进行最小数量的转换,最多是一次用户定义的转换。本标准详细描述了这一过程 [class.conv] .
就你而言,打电话时
解决方案有几种方法可以解决此问题:
如何实施方案3请参阅完整示例 here . 简而言之,您需要执行以下操作:
以下是代码的相关更改:
|
![]() |
Vaccano · 应用程序洞察向导失败 7 年前 |
![]() |
Nele · C++升级到VS2017:关于不明确调用的错误C2668 7 年前 |
![]() |
é³æç¿ · 为什么性能计数器根本不工作 7 年前 |