C++ 使用字符串';s使用初始值设定项列表填充构造函数
我正在通读。在第7章中,有一个关于字符串初始化的示例: 但是,可以使用给定字符的任意数量的实例初始化字符串。您可以定义和初始化睡眠时间C++ 使用字符串';s使用初始值设定项列表填充构造函数,c++,string,C++,String,我正在通读。在第7章中,有一个关于字符串初始化的示例: 但是,可以使用给定字符的任意数量的实例初始化字符串。您可以定义和初始化睡眠时间字符串对象,如下所示: string sleeping {6, 'z'}; 字符串对象睡眠将包含“zzzz”。字符串长度为6 使用我的编译器,Apple LLVM 6.0版(clang-600.0.57),示例无法按所述工作。相反,它的工作原理就像我给出: string sleeping {"\6z"}; 使用 我知道我可以通过使用parens使用fill构
字符串对象,如下所示:
string sleeping {6, 'z'};
字符串
对象睡眠
将包含“zzzz”
。字符串长度为6
使用我的编译器,Apple LLVM 6.0版(clang-600.0.57)
,示例无法按所述工作。相反,它的工作原理就像我给出:
string sleeping {"\6z"};
使用
我知道我可以通过使用parens使用fill构造函数:
string sleeping(6, 'z');
但为了满足我的好奇心,有没有办法像书中的示例那样,将fill构造函数与初始值设定项列表一起使用?不,这是不可能的,标准:
- 如果
T
是聚合类型[…]李>
- 否则,如果
T
是字符数组[…]李>
- 如果
T
是聚合类型[…]李>
- 否则,如果带括号的init列表为空[…]李>
- 否则,将分两个阶段考虑
T
的构造函数:
- 将检查将
std::initializer\u list
作为唯一参数或作为第一个参数(如果其余参数具有默认值)的所有构造函数,并通过重载解析与类型为std::initializer\u list
因此,将std::string
中的std::initializer\u list
作为其第一个参数的变量将始终优先于使用计数和字符的参数
使用此构造函数的列表初始化的唯一方法是还提供分配器:
std::string s{6, 'z', std::string::allocator_type{}};
我真不敢相信这本书竟然成了书。这太错误了。