我需要创建一个由100个 A 字符组成的字符串。
为什么以下代码
std::string myString = {100, 'A'};
与之前的结果不一样
std::string myString(100, 'A');
?
std::string myString = {100, 'A'};
使用初始化列表进行初始化。它创建一个包含两个字符的字符串:一个编码为100,另一个是'A'
std::string myString(100, 'A');
调用以下构造函数:
string (size_t n, char c);
使用100个'A'创建一个字符串
char
;如果你的系统将char
类型的值视为ASCII码,那么它就是ASCII码。虽然这很常见,但C++语言定义并不要求如此,也有一些系统不符合这个规定。 - Pete Beckerstd::string s = { 100, 'A' };
是未定义的行为?这难道不会使得在C++11中创建统一初始化语法的大部分意图失效吗? - Daniel FreyCHAR_MAX
的最小值必须至少为127,因此100是char
类型的有效值,无论它代表什么字形(如果有的话--并非所有char
类型的值都必然代表字符,因此理论上你可能在打印它时遇到麻烦)。 - Steve Jessopchar
是一种算术类型和字符表示,将 100 赋值给 char
对象没有任何问题。 - Pete Becker第一个将它初始化为值100和A
,第二个调用了std::string
的构造函数重载。
'A'
字符的字符串。 - juanchopanza
std::string myString{100,'A'};
。 - Edward Strangeinitializer_list
构造函数优先于其他所有构造函数。在这里,=
号没有任何区别。查看演示。 - juanchopanzastd::string myString(100, 'A');
不同。 - Praetorian