C ++为什么不喜欢这种字符串语法?

问题描述 投票:1回答:2
name_abbreviation = name_last.resize(2);

这里我必须先分配

name_abbreviation = name_last;

然后

name_abbreviation.resize(2);

想请问您是否可以向我解释为什么其他方法无效?

c++ string resize assign
2个回答
4
投票

由于此操作符优先于此代码:

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 );

在某些实现上也可能更有效。


1
投票

resize()函数不返回任何东西。它更改它所使用的字符串的分配内存大小。因此,将一个字符串分配给另一个只需使用

name_abbreviation = name_last;

使用运算符=将在L.H.S.右边的字符串大小相同,字符相同。.

© www.soinside.com 2019 - 2024. All rights reserved.