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

Why doesn't C++ like this syntax for strings?

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() returns 什么都没有,即使它可以编译也不会执行您想要的操作。

你想做的可以通过以下方式实现:

(name_abbreviation = name_last).resize(2);

但这不是很可读的代码。我个人更喜欢 2 个单独的声明。

请注意,可以通过更简单的代码获得相同的结果:

name_abbreviation = name_last.substr( 0, 2 );

这在某些实现上也更有效率。

resize() 函数没有 return 一个东西。它改变了它在其上使用的字符串的已分配内存的大小。因此,要将一个字符串分配给另一个字符串,只需使用

name_abbreviation = name_last;

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