내가, 포인터, 참조 또는 일정한 기준이 setter 함수로 전달 될 수있다 할 노력하고 있어요 : 나는 것을 보았다함수 호출 모호성
class A{
std::string * p;
std::string st;
public:
A():p(0)
{}
A& setS(const std::string& s){
std::cout<<"called with const std::string&\n";
st = s;
p = &st;
return *this;
}
A& setS(std::string& s) {
std::cout<<"called with std::string&\n";
p = &s;
return *this;
}
A& setS(std::string* s) {
std::cout<<"called with std::string*\n";
p = s;
return *this;
}
};
int main(){
std::string s;
A a;
a.setS(std::move(s)) //const std::string&
.setS("") //const std::string&
.setS(s) //std::string&
.setS(0); //std::string*
//if std::string* version is not defined,
//setS(0) calls the const std::string& version and throws exception
return 0;
}
그러나 , 포인터 버전이 없다면, setS(0)
은 버전의 const std::string&
버전을 호출합니다.
포인터와 참조 버전간에 또는 다른 중요한 것들 사이에 모호성이 있습니까? 잘 정의되어 있고 모든 컴파일러에서 같은 방식으로 작동 할 것으로 예상됩니까?
메신저 무슨 일이 일어나고 있는지 (null) 포인터에서 문자열을 만들 수 있고 그 임시는 const 참조에 바인딩됩니다. 이 경우에는 바람직하지 않지만, 이것은 나에게 "정상적인 행동"인 것으로 보입니다. – Borgleader