Pek*_*kov 3 c++ pointers reference
const char (&x)[]C++中语法的含义是什么,它是通过引用函数调用来传递指针吗?
它是否相同const char x[],将x定义为const char*?如果两者都是同一个,我应该在哪里使用const char (&x)[]而不是const char x[]?
const char (&)[]是对const char数组的引用.你所表达的表达是宣称x其中之一.
它是一样的吗?
const char x[]
它是对其中一个的引用
......定义
x为const char*
嗯,不,让我们后退一步.
const char array[5]
Run Code Online (Sandbox Code Playgroud)
声明array为5个const字符的数组.它没有声明指针.但是,例如,数组很容易衰减为C++中的指针
void foo(const char *);
// ...
foo(array);
Run Code Online (Sandbox Code Playgroud)
是合法的.实际上,数组很容易衰减到指针,需要特别注意将它们传递到某个地方而不会衰减:
template <size_t N>
void bar(const char (&x)[N]);
bar(array);
Run Code Online (Sandbox Code Playgroud)
实际上会获得对数组的引用,并作为奖励,允许bar推断出数组大小.
请注意,指针和数组之间唯一有用的区别是元素的数量 - 当我引用你说的时候const char x[],我假设方括号之间确实会有一个数字.如果省略它,它对指针没有任何好处,除非你初始化它:
const char x[] = { 'h', 'e', 'l', 'l', 'o' };
Run Code Online (Sandbox Code Playgroud)
即使您从未在代码中写过文字,仍会允许该调用bar推断.N=55
当您希望函数接受固定长度的数组时,也可以使用它:
void fun(const char (&x)[50]);
Run Code Online (Sandbox Code Playgroud)
它也可用于多维数组(但更喜欢std::vector或std::array尽可能使用).