当你声明一个“指针类型”forms(函数)参数“像一个const数组”时,const是什么?
当你声明一个“指针类型”forms(函数)参数“像一个const数组”时,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[]);
?
它就像上面的一个3.在鼠标hover在下面之前做出选择。
void f(const T *arr);
如何解密C / C ++标准以找到这些等价物呢?
多次阅读标准有所帮助。 给定实例的有用网站是C gibberish↔English
// 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[]
forms参数类型衰减为T const* arr
,因此在forms参数类型的上下文中是等价的。 [2] T const* arr
等价于const T* arr
,这是另一种表达相同的语法。 [3]在函数类型的上下文中, T const* arr
的forms参数类型等价于T const* const arr
,因为为了确定函数类型,顶级const
被丢弃。 即,以这种方式不同的两个函数声明表示相同的函数。