根据开放标准(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html)
此代码应该出错:
A& a_ref3 = A(); // Error!
A&& a_ref4 = A(); // Ok
然而,我能够做第一行就好了。而第二行实际上对我来说是错误的。我正在使用Visual Studio中的Visual C ++ 14进行编译。
class foo {
};
int main()
{
foo x;
foo() = x; // Valid
foo& fr = foo(); // Valid
string&& foo = "hey"; // Valid r reference
foo&& frr = foo(); // Error!
return 0;
}
所以我猜我的问题是foo()是左值?如果是这样,为什么Stroustrup说您不能为它分配引用类型?
答案 0 :(得分:1)
foo& fr = foo();
在VC ++中有效,因为编译器allows它,clang和gcc都拒绝这种语法。
foo&& frr = foo();
是一个错误,因为您已重新声明foo
并尝试在operator()
上致电std::string
,这不是books.joins('INNER JOIN stats ON stats.statsrecord_id = books.statsrecord_id AND stats.type = 2')
.where(statsrecord_id: books.map(&:statsrecord_id).uniq)
.group('library_id', 'library_name', 'address_1', 'address_2', 'city', 'state', 'postal_code')
.page(1).limit(5).order('count_all DESC').count
。定义了。