为什么 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 上。与右边的字符串大小相同,字符相同..
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 上。与右边的字符串大小相同,字符相同..