gpt4 book ai didi

c++ - 调用函数的歧义。隐式转换?

转载 作者:可可西里 更新时间:2023-11-01 17:56:41 25 4
gpt4 key购买 nike

#include <string>

void f(std::string&& rref){
}

void f(std::string s){
}

int main() {
std::string s = "s";
f(std::move(s));
}

此代码导致歧义,我不知道为什么,也许,我明确转换为 rvalue 引用。

我的想法是右值 引用可以隐式转换为左值。但我不确定。请解释。

最佳答案

std::string 可以从 std::string 类型的右值初始化。所以第二个功能是候选。

拥有值和右值引用重载不是一个可行的想法。更正常的设置是具有右值引用和左值引用重载:

void f(std::string&& rref);
void f(std::string & lref); // or const&

这将涵盖所有用例。

关于c++ - 调用函数的歧义。隐式转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com