语法"const char (&x)[]"的含义

Meaning of the syntax `const char (&x)[]`

本文关键字:const char 语法      更新时间:2023-10-16

C++中语法const char (&x)[]的含义是什么?它是否类似于通过引用函数调用传递指针?

它和const char x[]一样,把x定义为const char*吗?如果两者都是一个,那么我应该在哪里使用const char (&x)[]而不是const char x[]

const char (&)[]是对const char数组的引用。您显示的表达式声明x就是其中之一。

它和const char x[] 一样吗

它引用了

其将CCD_ 9定义为CCD_

嗯,不,让我们退一步。

const char array[5]

array声明为一个由5个常量字符组成的数组。它声明指针。然而,数组在C++中很容易衰减为指针,例如

void foo(const char *);
// ...
foo(array);

是合法的。事实上,数组很容易衰减为指针,因此需要格外小心才能将它们传递到某个不衰减的地方:

template <size_t N>
void bar(const char (&x)[N]);
bar(array);

将实际获得对数组的引用,并且作为奖励,允许bar推断数组大小。


请注意,指针和数组之间唯一有用的区别是元素的数量——当我引用你的话const char x[]时,我假设方括号之间确实有一个数字。如果你忽略了这一点,它对指针没有任何好处,除非你初始化它:

const char x[] = { 'h', 'e', 'l', 'l', 'o' };

将仍然允许对bar的调用来推导N=5,即使您从未在代码中编写过文字5


当您希望函数接受固定长度数组时,也可以使用它:

void fun(const char (&x)[50]);

它也可用于多维数组(但在可能的情况下更喜欢std::vectorstd::array)。

C++中语法const char(&x)[]的含义是什么

此语法意味着您希望使用对const char数组的引用。

它是否与const char x[]相同,后者将x定义为const char*?

不,这是不一样的,与constchar*的主要区别在于数组的大小成为了类型的一部分,因此不能传递具有不同元素数的数组。

引用数组的主要用途是在模板中,其中元素的数量比推导的