在下面的示例中,我的輸出爲「single param ctor」,兩次。 我的問題是雙重的,第一,爲什麼調用bool ctor而不是包含字符串的版本,第二,有沒有辦法在不調用調用的情況下調用字符串版本?錯誤類型的顯式構造函數
順便說一句,我實際的代碼不硬編碼字符串但像調用構造函數:
static constexpr auto NONE = "NONE";
Foo aFoo(NONE);
...
#include <iostream>
#include <string>
using namespace std;
struct Foo {
explicit Foo(bool _isVisible = false): id(""), isVisible(_isVisible) {cout << "single param ctor" << endl;}
explicit Foo(const string _id, bool _isVisible = false): id(_id), isVisible(_isVisible) {cout << "multip param ctor" << endl;}
const string id;
bool isVisible;
};
int main(int argc, const char * argv[]) {
shared_ptr<Foo> sharedFoo = make_shared<Foo>("hello");
Foo regFoo("hi");
return 0;
}
如若不是這個歪廢話隱*字符串字面*到*具有更高優先級的布爾*轉換在C++中被棄用? – WhiZTiM
@WhiZTiM:在某些情況下引入'nullptr'是爲了提供幫助,但除非我們改變字符串文字的類型,或者刪除數組名稱 - 衰減,或者改變指針的工作方式,否則我們會被卡住。所以''foo's'然後引入給我們字符串文字,不會屈服於這個問題..但是這隻在你已經意識到這個問題時纔有用!如果你是,那麼它在源頭上相對容易解決(如上所示)。 –
@WhiZTiM:順便提一句,您正在尋找的詞是「已棄用」。 –