我所試圖做的是,讓一個指針,引用或恆定參考與這些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)
調用setS()
函數的const std::string&
版本。
指針和參考版本之間或任何其他問題之間有任何歧義嗎?它是否定義清晰,並且預計在所有編譯器中都以相同的方式工作?
即時通訊假設發生了什麼是您可以從(空)指針創建一個字符串,並且該臨時將綁定到一個const引用。雖然在這種情況下不受歡迎,但這對我來說似乎是「正常行爲」。 – Borgleader