语法 `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
声明为其中之一。
Is it the same like const char x[]
这是对其中之一的引用
... which defines x
as const char*
嗯,不,我们退一步说。
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
)。
What is the meaning of the syntax const char (&x)[] in C++
此语法意味着您要使用 对 const char 数组 的引用。
Is it the same like const char x[], which defines x as const char*?
不,不一样,和const char*的主要区别是数组的大小变成了类型的一部分,所以不能传具有不同数量元素的数组。
数组引用的主要用途是在模板中,其中元素的数量比推导的多
C++ 中语法 const char (&x)[]
的含义是什么,是否类似于通过引用传递指针到函数调用?
是不是和const char x[]
一样,定义x为const char*
?
如果两者是一样的,我应该在哪里使用 const char (&x)[]
而不是 const char x[]
?
const char (&)[]
是对 const char 数组的引用。您显示的表达式将 x
声明为其中之一。
Is it the same like
const char x[]
这是对其中之一的引用
... which defines
x
asconst char*
嗯,不,我们退一步说。
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
)。
What is the meaning of the syntax const char (&x)[] in C++
此语法意味着您要使用 对 const char 数组 的引用。
Is it the same like const char x[], which defines x as const char*?
不,不一样,和const char*的主要区别是数组的大小变成了类型的一部分,所以不能传具有不同数量元素的数组。
数组引用的主要用途是在模板中,其中元素的数量比推导的多