这是C++ Primer第5版的练习,其中包括:
练习6.24:解释以下功能的行为.如果代码中存在问题,请说明它们是什么以及如何解决它们.
void print(const int ia[10])
{
for (size_t i = 0; i != 10; ++i)
cout << ia[i] << endl;
}
Run Code Online (Sandbox Code Playgroud)
我在代码中找不到任何问题.这个练习有什么意义?
一般的问题是,在C++声明语法,函数参数声明数组类型意味着什么非直观:参数声明T[]或T[10]或T[1279]实际上是宣布为T*-所有这些参数声明是相同的*.
请记住,C++中没有数组类型的prvalues,因此数组类型不能是函数参数或返回类型.(当用作prvalue时,数组会衰减到指向其第一个元素的指针.)
因此,您的函数声明实际上是(with T = const int):
void print(const int *);
Run Code Online (Sandbox Code Playgroud)
此参数类型适用于数组到指针的衰减,但现在很清楚,您可以将任何指针传递int给此函数,并且无法仅从函数定义中确定函数执行的正确性.
另外,数组glvalues非常精细,下面的函数有一个参数,其类型是"对数组的引用":
void print10(const int (&a)[10])
{
for (auto i : a) { std::cout << i << "\n"; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |