当您声明"pointer type"形式(函数)参数"like an const array"时,什么是常量?
What is const when you declare a "pointer type" formal (function) parameter "like an const array"?
当你声明一个"指针类型"的形式(函数)参数"像一个常量数组"时,const
是什么?
即:如果 T 是类型标识符,则为:
void f(const T arr[]);
相当于:
void f(const T * const arr);
或
void f(const T * arr);
或
void f(T * const arr);
如何解密C/C++标准以找到此等价物? :-)
C和C++之间以及标准的不同版本之间在上述声明的含义方面是否存在差异?(对于 C - ANSI C89 及更高版本的标准是相关的)
首先我应该说:
void f(int const* p);
和
void f(const int* p);
具有相同的含义,这意味着它是指向您无法更改的值的指针。
有一种方法可以声明指针:
void f(int* const p);
它意味着常量指针,你不能把它分配给另一个地址。
至于你的问题,下面的代码
void f(const T arr[]);
将转换为
void f(const T* arr);
它将是指向数组第一个元素的指针
T * const arr
表示arr
不应该改变。
const T * arr
意味着*arr
不应该改变。
const T * const arr
意味着arr
和*arr
都不应该改变。
那么哪个像void f(const T arr[]);
中的arr
?
它就像上述 3 种之一。 在将鼠标悬停在以下内容上之前进行选择。
void f(const T *arr);
如何解密C/C++标准以找到这些等价物?
多次阅读标准会有所帮助。 给定实例的有用站点是 C 乱码↔英语
// declare f as function (pointer to const int) returning void
void f(const int *);
C和C++之间以及标准的不同版本之间是否存在差异?
是的,当然,因为C/C++是不同的语言。 C++具有引用变量。 早期的C没有const
等。
对于C++(目前问题也被标记为 C):
这里涉及三种不同的等价性。[1] const T arr[]
形式参数类型衰减为T const* arr
,因此在形式参数类型的上下文中是等价的。[2] T const* arr
等价于const T* arr
,这是另一种表达相同的语法。[3] 在函数类型的上下文中,T const* arr
中的形式参数类型等价于T const* const arr
,因为为了确定函数类型,顶级const
被丢弃了。即,以这种方式不同的两个函数声明表示相同的函数。