c++ - 重载函数中枚举数的转换
问题描述
=====================================编辑问题============ =============== 我在一本书中读到,枚举数的转换取决于枚举数初始化为的数字。对于 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 参数”。这是为什么?枚举器的转换方式是什么?
解决方案
这是类型问题。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
推荐阅读
- angular - Angular - 在选择中设置默认选项
- python - 如何对字典进行动态嵌套更新?
- sql - 创建与给定查询等效但不使用 CUBE 的替代查询
- openssl - openssl 命令中的“-inkey privateKey.key”是什么
- c# - ASP.net Core MVC 测试/使控制器返回一个字符串?
- mysql - 使用phpMyAdmin SQL查询的日期显示格式
- python - 网络抓取 - 该网站向我的抓取工具显示不同的内容
- python - 无法抓取类
- ios - 无法在 ios 13 中禁用暗模式 - 基于 plist 权限文本的设备特定权限警报
- javascript - 在 JSON 中查找和更新特定对象