问题标签 [conversion-operator]

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 投票
2 回答
118 浏览

c++ - 如何使用模板泛化容器适配器?

我有以下课程:

以及以下代码:

我想使用一个模板化成员函数来初始化任何适配器类型。到目前为止,它只适用于stackor queue,我不知道如何使用模板来概括它。

这是我尝试过的:

编译器说它不能推导出模板参数M

0 投票
1 回答
71 浏览

c++ - 初始化中模板转换算子类型推导的规则是什么?

考虑这段代码:

标准在哪里为以下行为定义了规则?

为什么(1)不会引起歧义问题(假设也R可以由它初始化bool)?我最近写了一个类似问题的答案,但我很好奇为什么(1)在这种情况下不像(2),我也不知道它在标准中的描述。

0 投票
2 回答
749 浏览

c++ - 从一个模板类到另一个相关模板类的转换运算符

进行了搜索,但找不到与我的查询匹配的内容,它有点具体,所以就这样吧。

我有一些模板类(Vector2、Vector3 和 Vector4)。尝试定义从 Vector2 到 3 和 4 的转换运算符,以及从 Vector3 到 2 和 4 等的转换运算符。

使用 Visual Studio 2017 给了我这个:

错误 C2833:“运算符 Vector2”不是可识别的运算符或类型

任何和所有的帮助表示赞赏。

谢谢你。

编辑:我的实际来源在类定义后确实有分号。忘了把它们放在我发布的简短版本中。另外,是的,有很多错误,但根据我的经验,它通常是第一个重要的尝试向前声明:

编辑:现在我收到错误 C2988:无法识别的模板声明/定义。可能值得一提的是,这 3 个模板类位于不同的文件中。我最初尝试在一个类中包含一个标题以使类型转换运算符正常工作,这就是造成原始错误的原因。

哦是的。我一定会把这些说清楚。这总是很好的建议。虽然是当地时间 0430... :)

编辑:没关系,我是一个spaz。我不知道我是如何在 Vector 和暗淡数量“Vector 2”!=“Vector2”之间插入一个空格的。前向声明它是。不敢相信我错过了这么简单的事情。孩子们:当你被束缚时不要编码,这很好。

0 投票
2 回答
495 浏览

c++ - 模板之间的隐式转换

我不太明白为什么这里的代码不能编译。应该可以像这样调用 dist() :

(无论这可能多么可怕)。这个想法是 GenericVec3 参数被转换运算符隐式转换为 GenericVec2。我在这里找到了这个问题

C++ 隐式类型转换与模板

,但我不太确定它是否可以应用于我的问题(将转换运算符设置为 " friend" 不起作用)。VS 输出以下错误:

这是我的代码:

提前致谢!

-托马斯

0 投票
3 回答
252 浏览

c++ - 使用转换运算符对两个不同类的对象进行相互转换

B 类中定义的转换运算符如何在以下代码中工作?我阅读了与堆栈溢出转换运算符相关的所有其他文章,但找不到关于两个不同类的对象相互转换的任何解释。任何帮助将不胜感激,因为我是 C++ 新手

对于以下代码:

我无法理解转换运算符的工作原理以及如何将值分配给 A 的对象。基本上我无法理解代码流,我想知道幕后,即转换是如何发生的?

0 投票
1 回答
233 浏览

c++ - 这些转换中的哪一个应该是模棱两可的?

我有一些如下代码:

GCC 在 [2] 而不是 [1] 处给出错误。Clang 两者都出错,显然 MSVC 两者都没有出错。谁是对的?

0 投票
0 回答
24 浏览

c++11 - l 值的转换运算符重载,避免重复代码

我有一个需要与包装类互换使用的包装类。幸运的是,类和包装器是二进制兼容的(通过设计),并且可以轻松执行转换(例如在本例中reinterpret_cast,或者更简单的示例)。

在某种程度上,为了实现这一点,我需要能够通过operator T().

目前代码如下所示:

我可以将这三个转换函数浓缩成一个函数或更少的代码,还是有其他方法?

我可以通过这种方式使其更通用(但对于这个简单案例的代码更长),

最终目标是T可以与wrapper<T>.

这与如何删除相似的 const 和非 const 成员函数之间的代码重复非常相似?,但是这种情况更具体,因为 1) 它涉及转换运算符,并且,2) 涉及左值重载。

0 投票
2 回答
170 浏览

c++ - 隐式转换运算符不会与运算符重载一起使用

考虑以下示例:

注释行导致编译错误:no match for 'operator+'. 为什么?我最初的想法是,它首先会operator std::string用于转换,然后执行对 的调用operator+,就像它对.append.

它只是隐式转换的一级,所以应该执行并且应该考虑到它,不是吗?

Live Demo

0 投票
2 回答
106 浏览

c++ - 嵌套类中用户定义的转换运算符

为什么以下代码无法编译:

我的 MSVC++ 2017 编译器说:

0 投票
2 回答
837 浏览

c++ - C++ 转换运算符到 chrono::duration - 适用于 c++17 但不适用于 C++14 或更低版本

以下代码使用带有 C++17 集的 gcc 7.1.0 编译,但不能使用 C++14 集(或 Visual Studio 2017)编译。在Wandbox上很容易复制。

必须做些什么才能使其与 C++11/14 一起使用?