语法"const char (&x)[]"的含义
Meaning of the syntax `const char (&x)[]`
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::vector
或std::array
)。
C++中语法const char(&x)[]的含义是什么
此语法意味着您希望使用对const char数组的引用。
它是否与const char x[]相同,后者将x定义为const char*?
不,这是不一样的,与constchar*的主要区别在于数组的大小成为了类型的一部分,因此不能传递具有不同元素数的数组。
引用数组的主要用途是在模板中,其中元素的数量比推导的