C++ 11字符串初始化

Vic*_*sky 7 c++ string c++11

我需要创建的100个一个角色.

为什么如下

std::string myString = {100, 'A'};
Run Code Online (Sandbox Code Playgroud)

给出不同的结果

std::string myString(100, 'A');
Run Code Online (Sandbox Code Playgroud)

?

use*_*932 14

std::string myString = {100, 'A'};
Run Code Online (Sandbox Code Playgroud)

是使用初始化列表初始化.它创建一个包含2个字符的字符串:一个包含代码100和'A'

std::string myString(100, 'A');
Run Code Online (Sandbox Code Playgroud)

调用以下构造函数:

string (size_t n, char c);
Run Code Online (Sandbox Code Playgroud)

它创建一个100'A的字符串

  • 形式上,第一个参数只是一个值为100的`char`; 如果您的系统将`char`值视为ASCII,则为ASCII.虽然这很常见,但C++语言定义并不要求它,并且有些系统并不是真的. (5认同)
  • @DanielFrey:这不是UB.`CHAR_MAX`必须至少为127,所以100是`char`的有效值,无论它代表什么字形(如果有的话) - 并非`char`的所有值都必然代表字符,所以理论上你可能有麻烦*打印*它). (3认同)