在该线程(Should I return an rvalue reference parameter by rvalue reference?)上写着const data = [{ id: 1, colour: 'blue', count: 10 }, { id: 1, colour: 'red', count: 12 }, { id: 2, colour: 'red', count: 8 }, { id: 2, colour: 'blue', count: 3 } ]
const result = data.reduce((r,{id, colour, count}) => {
r[id] = ({ id, colour_count:
Object.assign(r[id] ? r[id].colour_count : {}, {[colour]: 0}) })
r[id].colour_count[colour] += count
return r
}, {})
console.log(Object.values(result))
。
如果我对这句话理解得很好,则此代码应该不正确
The parameter cannot be a temporary (which is just what rvalue references represent)
但是,当我们查看#include <string>
#include <iostream>
std::string &&f(std::string &&a) {
return std::move(a);
}
int main() {
std::string a = f("lol");
std::cout << a << std::endl;
return 0;
}
时,似乎它返回了临时元组的右值引用,而我实际上认为将std::get
与临时元组一起使用没有问题。
因此,我想我误解了上面的句子,并且先前的代码是正确的。但是,这是不正确的:
std::get
如果函数返回一个值而不是右值引用,那将是正确的。我说得对吗?