2016-03-09 63 views
2

我正在閱讀關於「」運算符,發現了一些奇怪的代碼片段,我不明白。從字符串轉換爲const char * + size_t在「」運算符

我不明白從字符串「110011」到const char * s,size_t l的conervsion嗎?

我期待這樣的:

int operator "" _b (const std::string) { .. }int operator "" _b (const char * s) { .. }

userliteral.cpp

... 
int operator "" _b (const char * s, size_t l) 
{ 
    int decimal {0}; 
    ...//conversion 
    return decimal; 
} 

的main.cpp

int bin2dez01 = "110011"_b; //<--- string "110011" to const char *s, size_t l ?????? 
std::cout << bin2dez01 << "\n"; 

回答

1

operator ""將程序源內的字符串文字轉換爲另一種類型,在此情況下爲int,其基於解析二進制數字的字符串表示形式。

C++中字符串文字的類型是const char * - 指向表示字符串內容的char數組的常量指針。你還會得到一個size_t,它告訴你該字符串有多長時間,因爲你不能僅僅從該指針告訴它。

(C和C++中的字符串標準是將一個空字節\0標記爲字符串的結尾,但發現它不是免費的,有時它們會被錯誤排除,所以它總是更容易當你可以傳遞指針和長度時)。

標準字符串類std::string可以從字符串文字構造,但與C#和Java等語言不同,它們絕對不是相同的類型。由於std::string具有各種轉換運算符和重載,因此您可能會產生很多錯覺,因此您可以按照預期的方式或多或少無縫地處理字符串文字。

因此,在總結,有沒有轉換正在進行 - 字符串文字真的一個const char *size_t告訴你它有多長。

相關問題