簡體   English   中英

C ++行輸出

[英]C++ line output

cout << boolalpha ("1" < "0") << endl;

我最近正在編寫這篇文章,作為我正在做的一些課程工作的分支。 當我執行它時,為什么這會產生true

cout << boolalpha (string("1") < string("0")) << endl;

按預期進行比較。

它是比較const char* ,標准未定義"1""0"的結果,而定義了2 std::string s的比較,並且在這種情況下輸出是預期的。

快速案例:

char* y = "0";
char* x = "1";
std::cout << (x<y) << endl;
    //output 1 on my platform

char* x = "1";
char* y = "0";
std::cout << (x<y) << endl;
    //output 0 on my platform

我正在指定“在我的平台上”,因為沒有標准規則(但它可以是編譯器規則)指向創建指針的位置或創建指針的順序。

就我而言,地址的分配順序與聲明的順序相反。

我願意打賭,如果你跑:

cout << ("1" < "0") << endl;

cout << ("0" < "1") << endl;

你得到相同的輸出(雖然這不是一個規則)。 請注意,您應該在程序的不同實例中運行它們。 如果在同一實例中運行它們,則可能會得到不同的結果,因為字符串文字位於內存中的單個位置。

表達式“1”<“0”比較兩個指針的值。 一個指向字符序列“1”,另一個指向字符序列。 您的編譯器將字符序列放在內存中,使char序列“1”的地址在“0”之前。

但是,對於字符串,將按預期調用operator <(const string&,const string&)。

因為你正在比較兩個指針(字符串"1""0"表示為char數組,synonymous(kinda)表示char指針)。 如果要比較數字0和1,則不需要引號。 否則,您需要一個字符串比較函數來比較字符串的內容,而不是它們的地址。 最好是將它們包裝在std::string並使用compare()成員函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM