name_abbreviation = name_last.resize(2);
这里我必须先分配
name_abbreviation = name_last;
然后
name_abbreviation.resize(2);
想请问您是否可以向我解释为什么其他方法无效?
由于此操作符优先于此代码:
name_abbreviation = name_last.resize(2);
等于:
name_abbreviation = (name_last.resize(2));
并且在逻辑上等于:
auto tmp = name_last.resize(2);
name_abbreviation = tmp;
std::string::resize()
不能编译,它什么也不会返回,即使它会编译也不会执行您想要的操作。
您想做的事可以通过:
(name_abbreviation = name_last).resize(2);
但是这不是很可读的代码。我个人希望有2条单独的陈述。
注意,相同的结果可以通过简单得多的代码实现:
name_abbreviation = name_last.substr( 0, 2 );
在某些实现上也可能更有效。
resize()
函数不返回任何东西。它更改它所使用的字符串的分配内存大小。因此,将一个字符串分配给另一个只需使用
name_abbreviation = name_last;
使用运算符=
将在L.H.S.右边的字符串大小相同,字符相同。.