const从unsigned int引用强制转换的int

KKOrange

我在理解此代码段中的行为时遇到了一些麻烦:

unsigned int i = 2;
const int &r = i;
std::cout << r << "\n";
i = 100;
std::cout << r << "\n";

第一个打印语句按预期提供2,但是当我更改引用变量的值时,它不会反映在引用中。第二个打印语句也给出2,但我认为应该给出100?

如果我将变量设置i为typeint而不是unsigned int,它将按预期工作。这里发生了什么?

现场例子

山姆·瓦尔沙夫奇克(Sam Varshavchik)

您只能引用相同类型的对象。

您不能int引用unsigned int

本质上,这里发生的是:

const int &r = (int)i;

一个新的int临时被构造一个新的临时对象和const引用绑定到它。

使用调试器,您应该能够观察到引用引用了一个完全不同的对象的事实:

(gdb) n
6   const int &r = i;
(gdb) 
7   std::cout << r << "\n";
(gdb) p i
$1 = 2
(gdb) p &i
$2 = (unsigned int *) 0x7fffffffea0c
(gdb) p &r
$3 = (const int *) 0x7fffffffe9fc
(gdb) q

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Const char *转换为Unsigned long int-strtoul

来自分类Dev

错误:形成指向引用类型'const std :: pair <double,unsigned int>&'的指针...。我无法理解此错误

来自分类Dev

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

来自分类Dev

将unsigned long long int强制转换为signed long long int可能吗?

来自分类Dev

C:指针类型之间的非法转换:指向const unsigned char的指针->指向unsigned char的指针

来自分类Dev

我可以将unsigned char *强制转换为unsigned int *吗?

来自分类Dev

在C#中强制转换为“ int”时,“ const float”值与“ float”不同

来自分类Dev

从`int`转换为`unsigned char`

来自分类Dev

如何在Swift中将Int强制转换为unsigned short

来自分类Dev

unsigned int和不使用强制转换运算符的int之间的比较

来自分类Dev

从'const char *'到'unsigned char *'的无效转换

来自分类Dev

错误:从'const int *'到'int *'的无效转换

来自分类Dev

将值设置为静态const unsigned int

来自分类Dev

将vector <int>强制转换为const vector <const int>

来自分类Dev

C ++从'char *'到'const unsigned char *'的无效转换

来自分类Dev

从unsigned long long转换为unsigned int

来自分类Dev

自动将int转换为unsigned int

来自分类Dev

将int * const强制转换为long int * const警告

来自分类Dev

错误:形成指向引用类型'const std :: pair <double,unsigned int>&'的指针...。我无法理解此错误

来自分类Dev

ARC禁止将非目标C指针类型'const UInt8 *'(aka'const unsigned char *')强制转换为'NSData *'

来自分类Dev

在C#中强制转换为“ int”时,“ const float”值与“ float”不同

来自分类Dev

从'const int *'到'int *'的无效转换

来自分类Dev

在C ++(WinRT)中从IBuffer转换为const unsigned char

来自分类Dev

对crcsum的未定义引用(unsigned char const *,unsigned long,unsigned short)

来自分类Dev

将值设置为静态const unsigned int

来自分类Dev

无效的转换const unsigned char

来自分类Dev

将vector <int>强制转换为const vector <const int>

来自分类Dev

如何将 const char* 转换为 const unsigned char*

来自分类Dev

错误:从 'void*' 到 'const uint8_t* {aka const unsigned char*}' [-fpermissive] 的无效转换

Related 相关文章

  1. 1

    将Const char *转换为Unsigned long int-strtoul

  2. 2

    错误:形成指向引用类型'const std :: pair <double,unsigned int>&'的指针...。我无法理解此错误

  3. 3

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

  4. 4

    将unsigned long long int强制转换为signed long long int可能吗?

  5. 5

    C:指针类型之间的非法转换:指向const unsigned char的指针->指向unsigned char的指针

  6. 6

    我可以将unsigned char *强制转换为unsigned int *吗?

  7. 7

    在C#中强制转换为“ int”时,“ const float”值与“ float”不同

  8. 8

    从`int`转换为`unsigned char`

  9. 9

    如何在Swift中将Int强制转换为unsigned short

  10. 10

    unsigned int和不使用强制转换运算符的int之间的比较

  11. 11

    从'const char *'到'unsigned char *'的无效转换

  12. 12

    错误:从'const int *'到'int *'的无效转换

  13. 13

    将值设置为静态const unsigned int

  14. 14

    将vector <int>强制转换为const vector <const int>

  15. 15

    C ++从'char *'到'const unsigned char *'的无效转换

  16. 16

    从unsigned long long转换为unsigned int

  17. 17

    自动将int转换为unsigned int

  18. 18

    将int * const强制转换为long int * const警告

  19. 19

    错误:形成指向引用类型'const std :: pair <double,unsigned int>&'的指针...。我无法理解此错误

  20. 20

    ARC禁止将非目标C指针类型'const UInt8 *'(aka'const unsigned char *')强制转换为'NSData *'

  21. 21

    在C#中强制转换为“ int”时,“ const float”值与“ float”不同

  22. 22

    从'const int *'到'int *'的无效转换

  23. 23

    在C ++(WinRT)中从IBuffer转换为const unsigned char

  24. 24

    对crcsum的未定义引用(unsigned char const *,unsigned long,unsigned short)

  25. 25

    将值设置为静态const unsigned int

  26. 26

    无效的转换const unsigned char

  27. 27

    将vector <int>强制转换为const vector <const int>

  28. 28

    如何将 const char* 转换为 const unsigned char*

  29. 29

    错误:从 'void*' 到 'const uint8_t* {aka const unsigned char*}' [-fpermissive] 的无效转换

热门标签

归档