【问题标题】:conversion of enumerator in overloading function重载函数中枚举数的转换
【发布时间】:2020-10-30 06:52:10
【问题描述】:

=====================================编辑问题========= =================== 我在一本书中读到,枚举器的转换取决于枚举器初始化为的数字。 对于 EX:在这个枚举中,第一个枚举必须转换为 int,第二个必须转换为 double(因为第二个枚举的初始化值超出了 int 的范围。)

enum name{A= INT_MAX , B};

void foo(int a)
{
  print "int prameter";
}

void foo(double a)
{
  print "double parameter";
}

foo(B) // must print double parameter, no?

好吧,当我们调用 foo(B) 时我们应该看到“双参数”,但我们会看到“int 参数”。 这是为什么? 枚举器的转换方式是什么?

【问题讨论】:

  • struct S {int i; char c}; S s;,很明显S *p = &s.a是错误的,即使&s&s.a有相同的地址。
  • 我不明白你所说的 struct S { int i; 到底是什么意思。字符 c};小号;考虑到我是 C++ 新手,如果您能解释更多,我将不胜感激。
  • 我使用 struct 并行处理,您可能会注意到同样的事情。第一个成员与对象具有相同的地址(在某些情况下),因为所有aa[0]a[0][0] 都具有相同的地址。类型不同。

标签: c++ type-conversion overloading enumerator


【解决方案1】:

这是一个类型问题。 int (*p)[2] 是二维的,而 a[0] 是一维的。所以两者不兼容。这虽然有效int* p = a[0];

想想你必须取消引用多少次(使用*)才能得到第一个整数。 int (*p)[2] 是两次

cout << **p; // print first integer

但对于int a[2][2]a[0],它只有一次

cout << *(a[0]); // print first integer

但两次将是编译错误

cout << **(a[0]); // error

【讨论】:

  • 我得到的是: int (*p)[2] 是一个指向有两个整数的数组的指针。 a 是数组的名称,也是指向第一个元素的指针,所以这里 a 是指向数组的指针,它有两个元素,事实上我们可以说 int (*p)[2] = a 是真的,但是 a[0 ] 是两个昏暗数组的第一个元素,也是指向两个整数的指针,所以当我们说 int (*p)[2] = a[0] 不正确时,因为左操作数是指向数组的指针,而右操作数是指针到整数,我们可以使用 &a[0] 这意味着一个数组的地址有两个整数。
  • 对不起,如果评论太多,但无论如何我想我得到了答案,非常感谢
  • @meysamimanipour 您上面的评论是一个合理的描述。
猜你喜欢
  • 2019-05-19
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 2010-10-11
相关资源
最近更新 更多