Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重载函数中枚举数的转换_C++_Type Conversion_Overloading_Enumerator - Fatal编程技术网

C++ 重载函数中枚举数的转换

C++ 重载函数中枚举数的转换,c++,type-conversion,overloading,enumerator,C++,Type Conversion,Overloading,Enumerator,============================================================编辑问题=========================== 我在一本书中读到,枚举数的转换取决于枚举数初始化为的数字。 例如:在此枚举中,第一个枚举必须转换为int,第二个枚举必须转换为double(因为第二个枚举初始化时使用的数字超出int的范围。) 当我们调用foo(B)时,我们应该看到“双参数”,但我们将看到“int参数”。 为什么呢? 枚举器中的转换方式是什么?这是

============================================================编辑问题=========================== 我在一本书中读到,枚举数的转换取决于枚举数初始化为的数字。 例如:在此枚举中,第一个枚举必须转换为int,第二个枚举必须转换为double(因为第二个枚举初始化时使用的数字超出int的范围。)

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

这是一个类型问题
int(*p)[2]
是二维的,但
a[0]
是一维的。因此,这两者不兼容。这可以通过
int*p=a[0]实现

想一想,为了得到第一个整数,您必须取消引用多少次(使用
*
)。使用
int(*p)[2]
它是两次

cout << **p; // print first integer
但两次将是一个编译错误

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

cout与
struct S{int i;char c};S SS*p=&S.a
是错误的,即使
&S
&S.a
有相同的地址;S S;考虑到C++是新的,如果你能解释得更多,我很感激。第一个成员与对象具有相同的地址(在某些情况下),因为所有
a
a[0]
a[0][0]
都具有相同的地址。类型不同。与我得到的类似之处是:int(*p)[2]是指向具有两个整数的数组的指针。a是数组的名称,也是指向第一个元素的指针,所以这里a是指向数组的指针,它有两个元素,根据这个事实,我们可以说int(*p)[2]=a是真的,但是a[0]是两维数组的第一个元素,也是指向两个整数的指针,所以当我们说int(*p)[2]=a[0]不是真的,因为左操作数是指向数组的指针,而右操作数是指向整数的指针,我们可以使用&a[0],这意味着数组的地址有两个整数。如果注释太多,很抱歉,但无论如何,我想我得到了答案,谢谢much@meysamimanipour你上面的评论是合理的描述。
cout << *(a[0]); // print first integer
cout << **(a[0]); // error