搜尋

首頁  >  問答  >  主體

C++中string类size

str.size() 输出结果不一样

str += 'a' + 'a';//报错

阿神阿神2803 天前550

全部回覆(4)我來回復

  • 迷茫

    迷茫2017-04-17 13:52:54

    這是因為:前者先做'

    而後者append了兩個字元。

    其實兩者的輸出應為:

    ABCDa5
    ABCDrrreeea6
    

    因為

    你貼的那個新產生的錯誤的原因是'a' = 97

    97 + 97 = 194

    超出了0-127這個ascii字符的範圍,所以從數值隱式轉換成字符報warning了

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:52:54

    這裡是char類型,不是常數字串,首先根據優先權,會先計算後面的'0'+'a',對於char類型,相加還是一個char類型('a'),所以+= char類型,實際只append了一個字元。

        ¦ /**
        ¦  *  @brief  Append a character.
        ¦  *  @param c  The character to append.
        ¦  *  @return  Reference to this string.
        ¦  */
        ¦ basic_string&
        ¦ operator+=(_CharT __c)
        ¦ {
        this->push_back(__c);
        return *this;
        ¦ }

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 13:52:54

    發程式碼的時候請不要發截圖。

    這是因為(1)運算子優先權不同,+高於+=;(2)加法的運算元(operand)不同。

    s += '
    s += ('
    s = s + ('
    char tmp = '
    s += '
    std::string tmp = s + 'rrreee';
    s = tmp + 'a';
    '; s += 'a';
    ' + 'a'; s += tmp;
    ' + 'a');
    ' + 'a');
    ' + 'a';

    等價於

    rrreee

    類似

    rrreee

    等價於

    rrreee

    兩個char類型的變數(字元)做加法,相當於把兩個字元對應的數值相加,所以''+'a'等價於0 + 97,其結果為97即字元'a'

    rrreee

    類似

    rrreee

    std::stringchar做加法,相當於把字元附加到字串末尾,所以s + ''表示在字串末尾增加一個''字元。

    至於str += 'a' + 'a';//报错的警告就是 @碎鏡 解釋的原因,即字符溢出。

    回覆
    0
  • 黄舟

    黄舟2017-04-17 13:52:54

    '0' + 'a' 得到的是一個新的字元, 所以 你這樣相當於:

    char c = 'rrreee' + 'a';
    s += c; // 只是添加了一个字符

    回覆
    0
  • 取消回覆