问题标签 [explicit-conversion]
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++ - 为什么不调用我的“显式运算符 bool()”?
我的期望是A()
根据上下文转换为bool
使用 my operator bool()
,因此 print true
。
但是,输出是false
,表明它operator int()
被调用了。
为什么我explicit operator bool
没有按预期调用?
c++ - 可以从一个特定模板实例化的构造函数中删除关键字“explicit”吗?
我正在尝试创建一个模板类来强制尺寸正确性(长度除以时间给出速度,等等)。
短篇小说: “无量纲”是可能的实例之一。如果我可以允许从双精度数显式构造所有实例化,并且进一步允许从双精度数隐式构造“无量纲”实例化(并且仅是无量纲实例化),那将会很方便。
长话短说:我的模板类布局为
遵循这种风格,qty<0,0,0>
是一个无量纲量,所以应该可以加减 aqty<0,0,0>
和 double。我目前已通过声明来强制执行此操作
...但仅将其定义为qty<0,0,0>
. 这是可行的......但我认为我可以做得更好。如果我允许从 double 到 a 的隐式转换qty<0,0,0>
,则添加一个 double 并且qty<0,0,0>
不需要特殊处理。用户错误也会给出更多提示性的错误消息 --- 尝试将双倍添加到速度将表明转换是不可能的(理解维度不兼容的基本概念),而不是抱怨函数未定义(这可能会导致用户怀疑模板类中的错误)。
问题是我不能允许对模板参数的任何其他组合进行隐式构造。如果我这样做了,那么添加任何 qty 和 double 总是会成功;我想强迫用户考虑尺寸的正确性,并在添加之前将双精度常量显式转换为适当的尺寸(如果这是预期的操作)。但是,我确实希望允许从双精度数显式构造 --- 没有它,简单的声明
需要一个尴尬的转换功能
这意味着我真正想要的是
如您所见,我不确定是否可以explicit
仅删除一个实例化的规范,并且 --- 如果可能的话 --- 我不确定语法是什么。
c++ - 受保护的继承、向上转换和转换运算符
我正在尝试使用protected
继承来隐藏 C 样式的struct
成员。
通过这样做,我的派生class
现在能够访问所有内容,struct
同时从程序的其余部分隐藏它,但它有一个成本:编译器不再允许我从这个派生隐式class
转换为基本 C-style struct
。
因此,为了再次启用该功能,我在派生public
的. 但奇怪的事情来了:operator
class
- 首先,我无法标记
operator
as :编译器开始在定义中的类型explicit
上说“非法存储类” 。struct
operator
- 如果没有
explicit
关键字,编译器仍然会在调用它的时候将转换识别为不可访问(我使用过static_cast<T>()
)。
任何想法?(我正在使用 Visual Studio 2010)
代码示例:
java - 为什么我不能将 double 隐式转换为 int?
您可以将 int 隐式转换为 double: double x = 5;
您可以将 int 显式转换为 double: double x = (double) 5;
您可以显式地将 double 转换为 int: int x = (int) 5.0;
为什么不能隐式地将 double 转换为 int?: int x = 5.0;
c# - C++/CLI 中 C# 类的显式类型转换
我有一个用 C# 编写的“JulianDate”结构,它有一个来自 .NET 库的自定义显式运算符到 DateTime。我在我的 C# 代码中多次使用了这个显式运算符,它没有问题。
我现在想在我的 C++/CLI 代码中使用相同的显式运算符,但我无法弄清楚如何。
我试过了:
DateTime^ dt = (DateTime^)jdate;
(编译,但我得到一个 InvalidCastException)DateTime^ dt = safe_cast<DateTime^>(jdate);
(我得到一个编译器错误)DateTime^ dt = DateTime(*jdate);
(编译,但 dt 有错误的数据:1/1/0001 12:00AM)DateTime^ dt = dynamic_cast<DateTime^>(jdate);
(编译,但返回 null)
为了安全演员,我收到以下错误:
执行显式强制转换的正确方法是什么?或者它不工作的原因是因为我使用的是结构而不是类?或者也许 C++/CLI 不支持 C# 显式运算符?
c++ - 向量之间的转换
我有两个类:A
and B
,以及从A
s 到B
s 的隐式转换。我也有一个vector<A>
,我想把它转换成vector<B>
. 是否可以添加一个允许我隐式或显式转换vector<A>
为的转换vector<B>
?
我知道我可以使用这里描述的技术,但是有什么方法可以实现两者之间的隐式转换吗?还是显式转换?
c++ - C++'没有匹配的调用函数'和'没有已知的参数转换'
我有这段代码:
我必须更改代码以将所有代码都放在一个文件中,因此不必担心与定义和内存分配分开实现。我将修复原始文件中的所有内容。我的问题是为什么编译这段代码我有这个消息:
test.cc:在函数'int main()'中:test.cc:86:40:错误:没有匹配函数调用'Cfp::Cfp(GlobalPortId (&)(PortId), CfpDevice*&)' Cfp cfp = 新 Cfp(端口,cfp_device);^ test.cc:86:40: 注意:候选人是:test.cc:70:12: 注意:Cfp::Cfp(const GlobalPortId&, CfpDevice ) 显式 Cfp(const GlobalPortId &id, ^ test.cc:70:12:注意:从 'GlobalPortId(PortId)' 到 'const GlobalPortId&' 的参数 1 没有已知的转换 test.cc:68:7: 注意: Cfp::Cfp(const Cfp&) class Cfp { ^ test.cc:68:7:注意:候选人期望 1 个参数,提供 2 个参数
但是,如果我改变:
为了
有用。
另外,如果我删除
并在 Cfp 创建中实例化:
它也有效。
有没有人可以解释一下:
- 为什么允许实例化 Cfp,在同一行调用 GlobalPortId 和 PortId 构造函数?但是单独实例化它们时是不允许使用的。
- 为什么不允许使用不强制转换的“端口”实例化 Cfp?
c# - C# 显式转换运算符
您好,我需要一些帮助 :) 我有我的自定义类过滤器,在其中我定义了显式转换运算符以从 AForge.Point 转换为 System.Drawing.PointF AForge.Point 和 System.Drawing.PointF 都是来自库的结构。blob.CenterOfGravity 是 AForge.Point 的类型。问题是 intelisense 告诉我“无法将 'AForge.Point' 转换为 'System.Drawing.PointF'。我不知道为什么无法完成此转换:/。感谢所有回复。
c++ - 我不能将一个大小为 8 字节的类类型转换为 uint64_t 吗?
假设我们有以下代码:
编译器给出错误:“无法从 A 转换为 uint64_t。未定义用户定义转换运算符。”
是预期的错误,如果是,为什么?