问题标签 [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.

0 投票
1 回答
2348 浏览

c++ - 为什么不调用我的“显式运算符 bool()”?

我的期望是A()根据上下文转换为bool使用 my operator bool(),因此 print true

但是,输出是false,表明它operator int()被调用了。

为什么我explicit operator bool没有按预期调用?

0 投票
2 回答
100 浏览

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仅删除一个实例化的规范,并且 --- 如果可能的话 --- 我不确定语法是什么。

0 投票
0 回答
274 浏览

c++ - 受保护的继承、向上转换和转换运算符

我正在尝试使用protected继承来隐藏 C 样式的struct成员。

通过这样做,我的派生class现在能够访问所有内容,struct同时从程序的其余部分隐藏它,但它有一个成本:编译器不再允许我从这个派生隐式class转换为基本 C-style struct

因此,为了再次启用该功能,我在派生public的. 但奇怪的事情来了:operatorclass

  • 首先,我无法标记operatoras :编译器开始在定义中的类型explicit上说“非法存储类” 。structoperator
  • 如果没有explicit关键字,编译器仍然会在调用它的时候将转换识别为不可访问(我使用过static_cast<T>())。

任何想法?(我正在使用 Visual Studio 2010)

代码示例:

0 投票
2 回答
650 浏览

c# - 为什么/何时将运算符指定为显式很重要?

我从另一个问题(稍作修改)中借用了下面的代码,以在我的代码中使用:

此代码的原作者正确地遵守了 MSDN 的隐式显式文档中给出的警告,但这是我的问题:在潜在异常代码中是否总是必要的explicit

所以,我的代码中有一些从 PositiveDouble 派生的类型(例如“Volume”),我希望能够像下面的第一行一样方便地设置实例:

被迫在任何地方使用显式强制转换会使代码的可读性大大降低。它如何保护用户?在我的程序的语义中,我从不期望 Volume 是负数。事实上,如果它发生了,我希望会抛出一个异常。因此,如果我使用隐式转换并抛出异常,什么“意外结果”可能会让我大吃一惊?

0 投票
5 回答
6178 浏览

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;

0 投票
1 回答
825 浏览

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# 显式运算符?

0 投票
4 回答
127 浏览

c++ - 向量之间的转换

我有两个类:Aand B,以及从As 到Bs 的隐式转换。我也有一个vector<A>,我想把它转换成vector<B>. 是否可以添加一个允许我隐式或显式转换vector<A>为的转换vector<B>

我知道我可以使用这里描述的技术,但是有什么方法可以实现两者之间的隐式转换吗?还是显式转换?

0 投票
2 回答
1208 浏览

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 创建中实例化:

它也有效。

有没有人可以解释一下:

  1. 为什么允许实例化 Cfp,在同一行调用 GlobalPortId 和 PortId 构造函数?但是单独实例化它们时是不允许使用的。
  2. 为什么不允许使用不强制转换的“端口”实例化 Cfp?
0 投票
2 回答
258 浏览

c# - C# 显式转换运算符

您好,我需要一些帮助 :) 我有我的自定义类过滤器,在其中我定义了显式转换运算符以从 AForge.Point 转换为 System.Drawing.PointF AForge.Point 和 System.Drawing.PointF 都是来自库的结构。blob.CenterOfGravity 是 AForge.Point 的类型。问题是 intelisense 告诉我“无法将 'AForge.Point' 转换为 'System.Drawing.PointF'。我不知道为什么无法完成此转换:/。感谢所有回复。

0 投票
3 回答
181 浏览

c++ - 我不能将一个大小为 8 字节的类类型转换为 uint64_t 吗?

假设我们有以下代码:

编译器给出错误:“无法从 A 转换为 uint64_t。未定义用户定义转换运算符。”

是预期的错误,如果是,为什么?