LIT*_*LIT 0 c++ string resize assign
name_abbreviation = name_last.resize(2);
Run Code Online (Sandbox Code Playgroud)
这里我要先赋值
name_abbreviation = name_last;
Run Code Online (Sandbox Code Playgroud)
然后
name_abbreviation.resize(2);
Run Code Online (Sandbox Code Playgroud)
想请教您能否解释一下为什么其他方式不起作用?
因为由于运算符优先,这段代码:
name_abbreviation = name_last.resize(2);
Run Code Online (Sandbox Code Playgroud)
等于:
name_abbreviation = (name_last.resize(2));
Run Code Online (Sandbox Code Playgroud)
并且在逻辑上等于:
auto tmp = name_last.resize(2);
name_abbreviation = tmp;
Run Code Online (Sandbox Code Playgroud)
这是不可编译的,因为std::string::resize()什么都不返回,即使它会编译它也不会做你想要的。
你想做的事情可以通过以下方式实现:
(name_abbreviation = name_last).resize(2);
Run Code Online (Sandbox Code Playgroud)
但这不是很可读的代码。我个人更喜欢 2 个单独的陈述。
请注意,可以通过更简单的代码实现相同的结果:
name_abbreviation = name_last.substr( 0, 2 );
Run Code Online (Sandbox Code Playgroud)
这在某些实现上也可以更有效。