【发布时间】:2016-06-13 16:24:07
【问题描述】:
当你声明一个“指针类型”形式(函数)参数“像一个 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 及更高版本的标准是相关的)
【问题讨论】:
-
C11 标准草案 n1570:6.7.6.3 函数声明符(包括原型) 7 将参数声明为“类型数组”应调整为“限定类型指针” ',其中类型限定符(如果有)是在数组类型派生的 [ 和 ] 中指定的那些。
-
我不明白这个问题。你是在问,“什么是 const?” const 和这个有什么关系?
-
@ChristopherSchneider 好吧 -
const声明通常提供对变量或形式参数的写访问限制。如果变量/形式是指针,您可以保护指针的值或指向的对象的值,或两者兼而有之。 “看起来像”数组的形式参数实际上是指针。我问const声明是否适用于指针的值,或指向的对象的值,或两者兼而有之。 -
@EOF 是否意味着:
const T * const arr等价于const T arr[const]而T * const arr等价于T arr[const]?如果是这样,这是否也适用于旧的 ANSI C?这是常用的/意识形态吗?还是我误会了? -
@MarkA.:在 C99 草案标准 n1256,
6.7.5.3 Function declarators (including prototypes)中可以找到相同的规定。我没有可用的旧标准,但由于 POSIX 需要 C99 编译器,任何健全的环境都应该提供一个。
标签: c++ c arrays constants function-prototypes