问题标签 [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.
c++ - static_cast 与直接调用转换运算符?
考虑下面的类,就像一个简单的例子:
应该直接调用转换操作员,还是直接调用static_cast
并让其完成工作?
这两行几乎会做完全相同的事情(即调用转换运算符),据我所知,它们的行为之间没有真正的区别。所以这里真正的问题是这是否正确。尽管这些对我来说似乎相同,但仍然可能存在细微的差异,人们可能无法理解。
那么除了它们的语法不同之外,这些方法(包括可能不适用于本示例的方法)之间是否存在任何实际差异?应该首选哪一个,为什么?
c++ - 区分引用类型和非引用类型的转换运算符模板
我有一个struct InferValueType
可以隐式转换为包括引用类型在内的任何其他类型。我使用以下代码完成此操作。
InferValueType
用户从不实例化,而是将其作为函数的返回值提供。
InferValueType
和的组合read
允许用户像这样编写惰性代码:
我已经针对 GCC 4.8、4.9、5、6 和 Clang 3.7 和 3.8 对此进行了测试。只有 GCC 4.8 抱怨歧义。
我认为这是因为int
andMyType
可以分别使用const int&
and来构造const MyType&
。
问题:这是 4.9.2 之前的 GCC 的特性还是实际上是 C++11 下的歧义?
完整的例子在这里。
c++ - 转换运算符绕过派生类型的构造函数并跳到基类型的复制初始化?
转换运算符在以下代码中的行为方式存在问题:
我在通话 2) 中收到错误:
所以问题是:它到底为什么要复制初始化A?注意,B 声明了它自己的复制构造函数。我认为成功的调用 1) 与 2) 相同,但显然不是?
关于我正在尝试解决的实际问题:CI 类中想要提供到第三方 A 类的转换,该类禁止复制。这个想法是返回一个代理 B : A ,它将在 A 之上添加移动语义。是否有另一种方法来定义转换运算符以在遵守其非复制策略的同时将 A 放入堆栈。
c++ - 重载转换函数模板
考虑以下:
情况b
很简单,#2
是唯一可行的人选。什么规则表明对 的初始化#2
是首选的,但两者对于 的初始化是模棱两可的?#1
int const&
int
c++ - std::variant 的显式转换运算符 vs get< T >() 函数
std::variant
除了(或什至代替)get< T >()
自由函数(草案的第 568 页)之外,使类的一部分成为显式转换(替代)运算符重载集有什么缺点?
在某些情况下不安全吗?为什么我们需要自由get()
函数(即“类型”版本,而不是“索引”版本),当变体暴露一个值语义时(引自草案):
变体对象保存并管理值的生命周期。
使变体显式可转换为替代方案还不够,但仍可从替代方案隐式构造吗?
我知道,接口的统一性是件好事(我记得我们需要get< I >()
与get< T >()
c++ - Clang 和 GCC 不同意使用转换运算符直接初始化的合法性
最新版本的clang(3.9)在第二行拒绝了这段代码f
;最新版本的 gcc (6.2) 接受它:
如果进行了任何这些更改,clang 将接受代码:
- Remove
Y
的移动构造函数 const
从转换运算符中移除- 替换
Y y(x)
为Y y = x
原始示例合法吗?哪个编译器错了?在检查了标准中关于转换函数和重载解析的部分之后,我还没有找到明确的答案。
c++ - std::getline() 如何等同于 bool?
我是std::getline(...)
处女,在cppreference.com查阅过文档和示例,但我对以下示例代码感到困惑:
...特别是 while 语句:while (std::getline(infile, line))
.
std::getline(std::basic_istream<CharT,Traits>& input, ...)
注明的文档说is的返回值input
,即对第一个参数的引用。
那么,如何将 的返回值getline
用作 while 循环的条件,它需要是 type bool
?
是否std::ifstream
实施operator bool()
?
c++ - 有没有办法强制自动扣除考虑运营商() 过度复制分配?
我有一个变量包装器,它在通过此包装器修改底层变量时发出更改信号,因此其他对象可以监听更改。
它工作正常(即我可以在底层对象上分配、添加、减去、调用成员函数(尽管这些函数无法发出更改信号)等),但有一点小问题:如果我这样做了
value
这里被正确推断为wrapper<int>
. 有没有办法让这个结构表现得好像some_object.some_wrapper
是 type int
,所以它value
被推断为一个int
变量?