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

时间:2015-06-22 13:41:13

标签: c++ pointers reference

C ++中语法public IQueryable<DepartmentBreakdownReport> GetDepartmentBreakdownByReviewID(int ClientID, int? ReviewID) { var x = (from d in camOnlineDb.Details join h in camOnlineDb.Headers on new { d.ClientID, d.ClaimID } equals new { h.ClientID, h.ClaimID } where h.ClientID == d.ClientID join sd in camOnlineDb.SuppDepts on new { a = d.ClientID, b = d.CategoryID ?? 0 } equals new { a = sd.ClientID, b = sd.CategoryID } join r in camOnlineDb.Reviews on new { h.ClientID, h.ReviewID } equals new { r.ClientID, r.ReviewID } join rp in camOnlineDb.ReviewPeriods on new { a = r.ClientID, b = r.ReviewPeriodID ?? 0 } equals new { a = rp.ClientID, b = rp.ReviewPeriodID } select new { d.ClientID, h.ReviewID, sd.DepartmentID, sd.DepartmentName, d.Amount }); x.GroupBy(r => new { r.DepartmentID, r.ReviewID, r.ClientID }) .Select(g => new { ClientID = g.Key.ClientID, ReviewID = g.Key.ReviewID, Dept = g.Max(d => d.DepartmentName), Amount = g.Sum(d => d.Amount) }) .OrderBy(r => r.Dept) .Where(r => r.ReviewID == 37); //.Dump(); return x; 的含义是什么,是通过引用函数调用来传递指针吗?

是否像const char (&x)[]一样,将x定义为const char x[]? 如果两者都是同一个,我应该在哪里使用const char*而不是const char (&x)[]

2 个答案:

答案 0 :(得分:6)

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

  

const char x[]

相同

它是对其中一个

的引用
  

...将x定义为const char*

嗯,不,让我们退后一步。

const char array[5]

array声明为5个const字符的数组。它没有声明一个指针。但是,数组很容易衰减为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。)

答案 1 :(得分:2)

  

C ++

中语法const char(&amp; x)[]的含义是什么?

此语法意味着您要使用引用const char的数组

  

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

不,它不是一样的,与 const char * 的主要区别在于数组的大小成为该类型的一部分,因此您无法通过具有不同数量元素的数组。

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