问题标签 [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 投票
0 回答
402 浏览

c++ - 用于 lambda 的显式用户定义转换运算符

这篇文章专门讨论 lambda 函数,特别是涉及到它们的ClosureType::operator ret(*)(params)(). 在文章中,该运算符称为“通用无捕获 lambda 用户定义转换函数模板”。

给定代码(自动转换为适当类型的函数指针):

#if 0代码中的函数to_function_pointer无法将 lambda 转换为相应的函数指针。这是否意味着提到的运算符是由explicit关键字“隐式”标记的?标准中有相应的条款吗?

0 投票
1 回答
437 浏览

c++11 - clang++ 失败,但 g++ 成功在赋值中使用强制转换为 const 无关类型运算符

这是一个简短的示例,它使用柠檬为 clang 重现了这种“不可行的转换”,但对于 g++编译器行为的差异有效。

在 Godbolt's

g++ (4.9, 5.2) 静默编译;而 clang++ (3.5, 3.7) 编译它

如果

或者

被使用, 但不与默认值一起使用

在那种情况下 clang++ (3.5) 责备a = b

参考 2011¹ 标准:clang++ 拒绝默认代码是正确的,还是 g++ 正确接受它?

Nota bene:这不是关于那个const限定词是否cast_type有意义的问题。这是关于哪个编译器符合标准并且仅关于那个

¹ 2014 在这里不应该有所作为。

编辑:

请不要使用通用 c++ 标记重新标记它。我首先想知道哪种行为符合 2011 年标准,并且暂时让委员会的奉献精神远离not to break existing (< 2011) codeansatz。

0 投票
1 回答
346 浏览

c++ - object.operator bool() 和 (bool) 对象有什么区别?

我有一个类,我已经像这样显式地重载了运算符 bool:-

但是,当我在 gdb 中运行以下两个时,我得到:-

这两个调用有什么区别,为什么它们返回不同的东西?

编辑:- 我正在使用 clang 编译器。

注意:- 第二个值 (false) 是我希望使用第一种语法返回的正确值。我正在使用代码生成器,因此我无法完全控制生成的 c++,以防有人好奇我为什么不只使用第二种语法。

即使在那种情况下,两者之间的差异仍然是一个悬而未决的问题。

0 投票
2 回答
72 浏览

c++ - 二阶隐式转换

考虑以下代码:

直到最近,我还认为标准和编译器足够“聪明”,可以在需要的转换序列存在时找到它。

换句话说,我在想它bool b2 = s会转换sfirst,然后转换为bool。但显然它没有发生。

获得 和 的等效行为的正确方法是first什么second

0 投票
1 回答
39 浏览

c++ - 具有默认模板参数的转换运算符

我想知道以下代码有什么问题:

它以 失败error: no matching function for call to 'Test1::Test1(Test&)',而以下代码的转换成功:


完整代码:

https://ideone.com/yWVtgR

https://ideone.com/XcRkTn

0 投票
2 回答
7718 浏览

c++ - 运算符 T&() 还是运算符 T()?

在定义转换运算符时,定义

超过

假设我不关心返回值而不是引用的潜在性能增益。

0 投票
2 回答
1495 浏览

c++ - 运营商必须采取“无效”

假设我有两个类:

我想将 a 隐式转换Location为 a Point

所以,我operator在里面添加了这个Point

g++ 4.9.2我在 Debian 上编译,并收到此错误:

听起来编译器希望运算符不接受任何参数,但这似乎不对——除非我错误地使用了运算符。这个错误背后的真正含义是什么?

0 投票
2 回答
373 浏览

c++ - 具有多个函数和多个转换运算符的重载解决方案

考虑简单的代码:

上面的代码工作正常,正如预期的gcc、clang 和 VC++选择foo(char).

现在让我们稍微修改一下代码:

现在这应该有选择foo(double),但似乎只有VC++对代码感到满意,而clang 和 gcc对上述代码不满意。

谁能解释为什么上面的代码失败了?还是它的错误?

还有一个问题:gcc 和 clang 是否共享重载解析代码?

0 投票
2 回答
1306 浏览

c++ - 带参数的 C++ 转换运算符

有没有办法定义一个带参数的转换运算符?

这是我的用例:

我有 HSB 和 RGB 颜色之间的转换运算符,以及 RGBA 到 RGB(通过删除 alpha),但我很难从 RGB 转换为 RGBA,因为我需要能够提供 alpha 作为参数(而不是始终默认为一个)。

我假设我将不得不退回到类似的东西:

但是,我更喜欢使用标准 C++ 转换,所以我只是想知道是否有任何方法可以使用带参数的转换运算符。

0 投票
2 回答
200 浏览

c++ - 通过转换运算符调用显式实例化的模板函数

让我们假设我们有一个函数模板,它在 cpp 文件中借助显式实例化实现,如下所示:

函数.h

函数.cpp

我们现在可以在包含function.h的主文件中调用该函数,如下所示:

让我们进一步假设我们有一个这样实现的类:

数据.h

以下代码导致链接器错误 LNK2019: unresolved external (Visual Studio 2010):

我们可以使用以下表达式之一来为function ()

但是为什么不能只调用function(a)?是否存在任何其他解决方案来实现这一点,而无需显式实例化具有数据类型的function()