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)[]
?
答案 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::vector
或std::array
。)
答案 1 :(得分:2)
C ++
中语法const char(&amp; x)[]的含义是什么?
此语法意味着您要使用引用const char的数组。
是否与const char x []相同,它将x定义为const char *?
不,它不是一样的,与 const char * 的主要区别在于数组的大小成为该类型的一部分,因此您无法通过具有不同数量元素的数组。
对数组的引用的主要用途是在模板中,其中元素的数量是推导的