Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用字符串';s使用初始值设定项列表填充构造函数_C++_String - Fatal编程技术网

C++ 使用字符串';s使用初始值设定项列表填充构造函数

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构

我正在通读。在第7章中,有一个关于字符串初始化的示例:

但是,可以使用给定字符的任意数量的实例初始化字符串。您可以定义和初始化睡眠时间
字符串
对象,如下所示:

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{}};

我真不敢相信这本书竟然成了书。这太错误了。