我正在做一些教程,并且有这一行
const std::string spaces(greeting.size(), " ");
然而,在我将双引号更改为单引号(例如
)之前,这不起作用const std::string spaces(greeting.size(), ' ');
字符串初始化中的引号有什么意义?我试过检查http://www.cplusplus.com/reference/string/string/,但找不到能解释这个问题的东西
答案 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()空格字符数初始化字符串。