搜索

首页  >  问答  >  正文

C++中string类size

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

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

阿神阿神2803 天前549

全部回复(4)我来回复

  • 迷茫

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

    这是因为:前者先做''+'a'得到'a',所以实际上只是append了一个字符

    而后者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
  • 取消回复