내가 새로운 C++ 의미를 배우고 ambigious 내가이 프로그램에 오류 가지고 :전화는
#include <iostream>
#include <string>
#include <utility>
std::string foo(std::string str)
{
return str + " call from normal";
}
std::string foo(const std::string& str)
{
return str + " call from normal";
}
std::string foo(std::string&& str)
{
return str + " call from ref ref";
}
int main()
{
std::string str = "Hello World!";
std::string res = foo(str);
std::string&& res_ref = foo(std::move(str));
std::cout << "Res ref = " << res_ref << std::endl;
std::cout << "Str = " << str << std::endl;
return 0;
}
오류는 다음과 같습니다
:23:30: error: call of overloaded ‘foo(std::__cxx11::string&)’ is ambiguous std::string res = foo(str);
왜 모호 전화입니다 ?
당신은 3 개의'foo' 함수를 가지고 있으며, 어느 것을 사용할 지 알 수 없습니다. – Carcigenicate
하지만 이중 참조, 표준 함수 및 const ref, 왜 그런 문제가 발생합니까? 내가 처음 함수 선언문을 모두 잘 작동한다고 말하면, 나의 질문은 : 왜 컴파일러는 하나의 선택을 사용할 수 없습니까? – Asmozan
컴파일러는'std :: string foo (std :: string str)'또는'std :: string foo (const std :: string & str)'호출 여부를 어떻게 알 수 있습니까? 당신은 정확히 같은 방법으로 그들을 호출 – UnholySheep