首页 > 解决方案 > 重载函数中枚举数的转换

问题描述

=====================================编辑问题============ =============== 我在一本书中读到,枚举数的转换取决于枚举数初始化为的数字。对于 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 参数”。这是为什么?枚举器的转换方式是什么?

标签: c++type-conversionoverloadingenumerator

解决方案


这是类型问题。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

推荐阅读