ostringstream.str()调用writeSite报错:无匹配函数问题咨询
问题根源:临时对象无法绑定到非const左值引用
咱们直接拆解这个错误的本质:
你的writeSite函数第一个参数是std::string&——这是一个非const的左值引用,它的规则是只能绑定到「有持久内存地址、可以被修改的左值」,比如你自己定义的普通std::string变量。
而std::ostringstream::str()的返回值是一个临时std::string对象:这个对象是函数执行时临时生成的,在当前语句执行完毕后就会被销毁,属于C里的「右值」范畴。C的语法规则明确禁止非const左值引用绑定到临时右值,这就是编译器找不到匹配函数的根本原因。
你用临时变量中转的方法之所以有效,是因为:当你把body.str()的结果存入一个新的std::string变量(比如std::string content = body.str();),这个变量是标准的左值,有自己的生命周期和内存空间,完全满足std::string&的绑定要求,所以调用就没问题了。
如果你的writeSite函数实际上不需要修改传入的site参数,更优的方案是把第一个参数改成const std::string&:
void writeSite(const std::string& site, const std::string& contentType);
这样一来,无论是普通左值变量,还是body.str()返回的临时右值,都能直接传递给函数,代码更简洁灵活,也省去了额外创建变量的步骤。
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

