struct M{}; void f(M&){} int main() { f(M()); return 0; }
这个代码不能编译。假如f的参数类型改成f(const M&)就可以编译通过了。
为什么呢? 假如M()构造一个右值,不能传递给f(M&)这个左值引用,本人能理解。
那为什么传递给const M&就OK了? 右值引用传递给常量左值引用,这样的参数匹配是合法的吗?
C++标准有没有任何的说明或规定?
解决方案:40分
传参时M构造了一个临时对象,临时变量不能作为非const引用参数