我有兩個重載函數爲什麼條件運算符在作爲參數傳入時會被視爲bool?
void foo(std::string value);
void foo(bool value);
當我
foo(true ? "a" : "b");
爲什麼函數接受一個布爾值將被調用,而不是字符串打電話了嗎?
我有兩個重載函數爲什麼條件運算符在作爲參數傳入時會被視爲bool?
void foo(std::string value);
void foo(bool value);
當我
foo(true ? "a" : "b");
爲什麼函數接受一個布爾值將被調用,而不是字符串打電話了嗎?
由於在const char*
和bool
之間進行了轉換,因此bool
過載提供了更好的匹配。字符串重載需要轉換爲用戶定義的類型。
條件運算符與它無關。例如,
#include <string>
#include <iostream>
void foo(bool) { std::cout << "bool" << std::endl; }
void foo(std::string) { std::cout << "string" << std::endl; }
int main()
{
foo("a");
}
輸出:
布爾
如果你提供過載
void foo(const char*) {}
那麼一會被調用。
所以'void foo(const char *)'會返回? – Zigma
@Zigma它將被選擇通過其他兩個重載。它有最好的匹配,因爲''東西''衰減到'const char *'。 – juanchopanza
@juanchopanza所以如果我想調用一個帶字符串的字符串,我應該做foo(std :: string(「a」))嗎? – ycshao
是否需要字符串作爲'std :: string'或'const char *'? – m0nhawk
以下是兩個示例:['const char *'](http://ideone.com/FKyejs)和['std :: string'](http://ideone.com/AUIRya)。 – m0nhawk
@ m0nhawk它需要std :: string。 – ycshao