【发布时间】:2019-04-21 03:22:42
【问题描述】:
考虑以下代码:
#include <iostream>
#include <typeinfo>
void use_pointer(int *ptr)
{
std::cout << typeid(ptr).name() << std::endl;
}
void use_array(int arr[])
{
std::cout << typeid(arr).name() << std::endl;
}
int main()
{
int *ptr = nullptr;
// std::cout << typeid(int *).name() << std::endl; // output: Pi
int arr[1];
// std::cout << typeid(int[]).name() << std::endl; // output: A_i
use_pointer(arr);
use_array(ptr);
}
使用g++ 6.5.0 输出编译此程序:
$ g++ -std=c++11 arrays_2.cpp -Wall
$ ./a.out
Pi
Pi
现在,当调用 use_pointer(arr) 时,array is being decayed 指向一个指针。 (对吗?“腐烂”这个词对我来说很陌生。)
C++ 标准在 [conv.array#1] 说:
“N T 数组”或“未知边界数组”类型的左值或右值 of T”可以转换为“pointer to T”类型的纯右值。这 应用临时实现转换 ([conv.rval])。这 result 是指向数组第一个元素的指针。
我想我明白我的 “int 数组”转换为“指向 int 的指针”。 (对吗?)
现在,调用use_array(ptr) 时究竟会发生什么。由于本例中参数的类型是 int 数组,所以 “指向 int 的指针” 是否转换为 “int 数组”?
我们将不胜感激。
【问题讨论】:
标签: c++ arrays pointers type-conversion