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

c++ - C++ 中的嵌套隐式转换

我想在两个级别进行隐式转换。以下代码片段是我面临的问题的原型。

我查看了以下链接中提供的示例,确信这是可以实现的。

转换运算符如何在 C++ 中工作?

运算符重载

0 投票
3 回答
1099 浏览

c++ - 转换运算符不适用于函数参数

为什么这段代码无法编译?

我正在g++ 4.7.3使用命令进行编译:g++ test.cpp. 错误信息是:

This answer to an previous question似乎表明这应该可行。

0 投票
2 回答
126 浏览

c++ - 由于有两种方法可以在 C++ 中定义转换,当同一转换有两种可能性时,它们如何交互?

我只是在寻找有关 C++ 工作原理的说明,这并不是真正解决我的代码中的特定问题。

在 C++ 中,您可以说类型 A 应该以两种不同的方式隐式转换为类型 B。

如果您是 A 的作者,您可以在 A 中添加如下内容:

如果您是 B 的作者,您可以在 B 中添加如下内容:

如果我理解正确,其中任何一个都将允许 A 隐式转换为 B。那么如果两者都被定义,则使用哪一个?这甚至允许吗?

注意:我了解您可能永远不应该处于这样做的情况。您要么使构造函数显式化,要么更可能只有两者之一。我只是想知道 C++ 规范是怎么说的,我不知道如何查找。

0 投票
1 回答
57 浏览

c++ - 带有前向声明的转换运算符

我正在尝试使用 c++ 中的转换运算符我有 2 个类,我正在尝试将它们从一个类转换为另一个类,并且出现错误:

谁能告诉我我做错了什么?

0 投票
1 回答
187 浏览

c# - 使用 c#,如何一次重载所有运算符?

我有一个这样的结构。

Money是否必须重载所有运算符 +、-、<、<=、>、>=、==、!= 等?或者有没有办法接受所有的运算decimalMoney?如您所见Money,只有一个字段是_quantity. 我希望所有要求的操作员Money都应该返回,就好像它被要求提供 _quantity 一样。

也许在隐式转换运算符下面重载会解决这个问题。

我正在创建Money结构,因为我不想decimal在我的整个项目中使用。编译器应该强制我使用Money而不是decimal. 如果我隐式使用上述转换运算符,它将与创建此结构的原因相矛盾。提前致谢...

0 投票
1 回答
714 浏览

c++ - 显式 ref 限定转换运算符模板在起作用

给定以下转换运算符

我希望以下转换都是有效的,但有些会产生编译错误(现场示例):

特别是,1 似乎与 3 相同,并且与 2 几乎相同(对于 7 到 9、8 类似),但行为不同。

任何解释或解决方法?

我的动机是又一个 'any',我最终不得不让所有的转换运算符explicit来避免像std::is_constructible,这样的类型特征的问题std::is_convertible,然后我遇到了新的问题。

编辑对不起,请忽略 3 和 9,我的错误(感谢 Kerrek SB)。然而 7 和 8 仍然是问题。另外,explicit毕竟似乎无关紧要,再次抱歉。

编辑 2刚刚注意到

如果转换运算符不是 ,则有效explicit。所以这就是explicit出现的地方:最初我的示例使用复制初始化,当我切换到时,explicit我不得不使用直接初始化。然后出现了这个问题(案例 7 和 8)。

0 投票
3 回答
5791 浏览

c++ - 运算符 float*() 有什么作用?

我一直在查看源代码,试图了解有关 C++ 的更多信息,但遇到了一些看起来令人困惑的代码。我无法通过玩弄它来弄清楚它的用途。

请有人能解释一下操作符 float *() 的作用以及它是如何使用的吗?

我搜索了 StackOverflow,它看起来像是一个转换运算符,但我仍然不确定它的实际作用以及它为什么有用。

亲切的问候,

0 投票
1 回答
1159 浏览

c++ - 是否可以在没有 typedef 的情况下声明返回数组引用的转换函数?

这是一个返回数组引用的转换函数:

没有 可以做同样的事情typedef吗?我试过的:

但clang抱怨:

做:

必须使用 typedef 来声明转换为 'int [10]'

意思typedef是不可缺少?

编辑
如果typedef有必要,不可能像下面这样创建转换函数模板,因为无法定义typedef模板,对吗?

0 投票
0 回答
50 浏览

c++ - 为什么 c++ I/O 流有一个转换运算符为 void*?

我不小心调用operator delete[]了一个ifstream对象,而不是文件名。我希望编译器会发出错误,因为delete[]只对指针而不是对象进行操作。但是,编译器没有抱怨(甚至没有警告)。

调试时,我看到系统调用operator void*了对象。令人惊讶的是,这甚至不会崩溃(演示)。

所以我想知道:为什么这个运算符首先存在?

是否需要支持if (!file)语法?如果是,为什么不将其转换为安全布尔值或explicit operator bool改用?

0 投票
1 回答
1684 浏览

c++ - 为什么我不能阻止不受欢迎的 C 风格转换编译?

有一个不受欢迎的 C 风格转换,我无法阻止它编译。不受欢迎的转换执行从某个类的对象到某个其他类的非常量引用的 C 样式转换。类是不相关的。同时,我喜欢支持从同一类的对象到 const 引用的 C 风格转换。我正在提供一个公共转换运算符来支持理想的演员表。在这种情况下,似乎不可能防止不受欢迎的演员阵容。
转换为非常量引用无法构建(“Sandbox::B::operator Sandbox::A &() ”(在第 30 行声明)不可访问*),不幸的是转换为 const 引用要么失败错误:从 "Sandbox::B" 到 "const Sandbox::A" 的转换函数不止一个:function "Sandbox::B::operator const Sandbox::A &()" function "Sandbox::B::运营商沙盒::A &()" ):

如果我禁用运算符operator A& (),则构建所需和不希望的转换。

我正在使用 gcc、icc 和 MSVC 编译。我无法控制客户端代码并阻止使用 C 样式转换。