使用双引号进行字符串初始化

时间:2015-04-12 09:36:07

标签: c++ c++11

我正在做一些教程,并且有这一行

const std::string spaces(greeting.size(), " ");

然而,在我将双引号更改为单引号(例如

)之前,这不起作用
const std::string spaces(greeting.size(), ' ');

字符串初始化中的引号有什么意义?我试过检查http://www.cplusplus.com/reference/string/string/,但找不到能解释这个问题的东西

3 个答案:

答案 0 :(得分:2)

双引号" "是C ++中的字符串文字(由const char [N]表示),而单引号' '是字符文字(char),所以你是调用(std::size_t, const char [N])构造函数。

它不存在,因此您收到编译错误。

您需要将其更改为可用的构造函数之一,如:

string (size_t n, char c);
string (const char* s);

(您已将第二个参数更改为' '

答案 1 :(得分:1)

那是因为你正在使用这个构造函数:string (size_t n, char c)(你链接的引用中的第6个),它使用n字符c填充新构造的字符串。如果你使用双引号你创建一个字符串文字,单引号意味着字符。

答案 2 :(得分:1)

C ++中有字符文字和字符串文字。

例如,用单引号括起来的字符如'A'表示字符文字,代表一个字符,类型为char

如果您将符号A括在双引号(如"A")中,那么您将获得一个字符串文字,其类型为cont char[2]并具有内部表示,如

{ 'A', '\0' }

它包含两个字符,包括终止零。

你可以看到运行这个简单的porgram的差异

#includde <iostream>

int main()
{
    std::cout << "sizeof( 'A' ) = " << sizeof( 'A' ) << std::endl;
    std::cout << "sizeof( \"A\" ) = " << sizeof( "A" ) << std::endl;
}

类std :: basic_string(或std :: string)具有以下构造函数

basic_string(size_type n, charT c, const Allocator& a = Allocator());

并在此声明中

const std::string spaces(greeting.size(), ' ');

使用此构造函数。它使用greeting.size()空格字符数初始化字符串。