禁止将隐式的“ unsigned”转换为“ double”转换

麦可

是否可以禁止在C ++中基本类型之间进行隐式转换?特别是,我想从禁止隐式转换unsignedfloatdouble因为像这些错误的:

int i = -5;
...
unsigned u = i; // The dawn of the trouble.
...
double d = u;   // The epicenter of the bug that took a day to fix.

我尝试过这样的事情:

explicit operator double( unsigned );

不幸的是,这没有用:

explicit.cpp:1: error: only declarations of constructors can be ‘explicit’
explicit.cpp:1: error: ‘operator double(unsigned int)’ must be a nonstatic member function
Brian Bi

您不能简单地从语言中完全删除隐式标准转换。

话虽如此,在某些情况下,有一些方法可以防止意外的转换。在初始化期间,您可以使用大括号语法防止缩小转换范围。浮点和整数类型之间的转换通常被认为是缩小的(编辑:除非源是整数常量表达式)。

int i {-5};       // ok; -5 fits in an int
unsigned u = i;   // ok; no check for narrowing using old syntax
double d {u};     // error: narrowing

如果编写的函数带有double,则可以通过为整数类型添加重载然后删除它们来防止传递整数类型。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

禁止将'NSInteger'(aka'unsigned int')隐式转换为'NSNumber *'

来自分类Dev

禁止将引用值隐式转换为整数

来自分类Dev

禁止将引用的值隐式转换为整数

来自分类Dev

隐式将int转换为double

来自分类Dev

无法从double?[]隐式转换为double []

来自分类Dev

无法将类型“ double”隐式转换为“ float”

来自分类Dev

无法将类型'double'隐式转换为'int'。-错误

来自分类Dev

无法将类型“ double”隐式转换为“ string”

来自分类Dev

无法将类型“ double”隐式转换为“ int”

来自分类Dev

无法将类型'double'隐式转换为'int'。-错误

来自分类Dev

用arc禁止隐式转换'unsigned long'UIUserNotificationSettings *'

来自分类Dev

如何将unsigned long long转换为double

来自分类Dev

ARC 不允许将“NSUInteger”(又名“unsigned long”)隐式转换为“id”?

来自分类Dev

隐式将Iterable转换为Option

来自分类Dev

将'NSUInteger'隐式转换为'id'

来自分类Dev

无法将类型 *** 隐式转换为 ****

来自分类Dev

无法获取arr []的长度:隐式转换失去整数精度:对于strlen(arr),将'unsigned long'转换为'int'

来自分类Dev

镜像2D数组:“无法将类型'double'隐式转换为'double [*,*]'”

来自分类Dev

将QString转换为unsigned short int

来自分类Dev

自动将int转换为unsigned int

来自分类Dev

将 void (*)() 转换为 void (*)(unsigned char)

来自分类Dev

如何将const unsigned short转换为unsigned short?

来自分类Dev

如何将unsigned int转换为unsigned char数组

来自分类Dev

隐式转换将符号'int“更改为'unsigned int”

来自分类Dev

为什么在调用构造函数时将int隐式转换为float而不是double?

来自分类Dev

c#无法将类型“ double”隐式转换为System.Window.Forms.Textbox

来自分类Dev

无法使用Math.Pow()将类型'double'隐式转换为'float'

来自分类Dev

将列表转换为Double [] []

来自分类Dev

将Byte []转换为Double

Related 相关文章

  1. 1

    禁止将'NSInteger'(aka'unsigned int')隐式转换为'NSNumber *'

  2. 2

    禁止将引用值隐式转换为整数

  3. 3

    禁止将引用的值隐式转换为整数

  4. 4

    隐式将int转换为double

  5. 5

    无法从double?[]隐式转换为double []

  6. 6

    无法将类型“ double”隐式转换为“ float”

  7. 7

    无法将类型'double'隐式转换为'int'。-错误

  8. 8

    无法将类型“ double”隐式转换为“ string”

  9. 9

    无法将类型“ double”隐式转换为“ int”

  10. 10

    无法将类型'double'隐式转换为'int'。-错误

  11. 11

    用arc禁止隐式转换'unsigned long'UIUserNotificationSettings *'

  12. 12

    如何将unsigned long long转换为double

  13. 13

    ARC 不允许将“NSUInteger”(又名“unsigned long”)隐式转换为“id”?

  14. 14

    隐式将Iterable转换为Option

  15. 15

    将'NSUInteger'隐式转换为'id'

  16. 16

    无法将类型 *** 隐式转换为 ****

  17. 17

    无法获取arr []的长度:隐式转换失去整数精度:对于strlen(arr),将'unsigned long'转换为'int'

  18. 18

    镜像2D数组:“无法将类型'double'隐式转换为'double [*,*]'”

  19. 19

    将QString转换为unsigned short int

  20. 20

    自动将int转换为unsigned int

  21. 21

    将 void (*)() 转换为 void (*)(unsigned char)

  22. 22

    如何将const unsigned short转换为unsigned short?

  23. 23

    如何将unsigned int转换为unsigned char数组

  24. 24

    隐式转换将符号'int“更改为'unsigned int”

  25. 25

    为什么在调用构造函数时将int隐式转换为float而不是double?

  26. 26

    c#无法将类型“ double”隐式转换为System.Window.Forms.Textbox

  27. 27

    无法使用Math.Pow()将类型'double'隐式转换为'float'

  28. 28

    将列表转换为Double [] []

  29. 29

    将Byte []转换为Double

热门标签

归档