f(const T&)可以接受值参数而f(T&)不能?

C++语言 码拜 9年前 (2015-10-22) 1274次浏览
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引用参数

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明f(const T&)可以接受值参数而f(T&)不能?
喜欢 (0)
[1034331897@qq.com]
分享 (0)