2015-04-12 129 views
1

我做了一些教程,并有这条线初始化字符串用双引号

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

然而,没有工作,直到我改变了双引号为单引号像

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

是什么关于字符串初始化中引号的问题?我试着检查http://www.cplusplus.com/reference/string/string/,但没有找到的东西,将这个给我解释

+0

[This reference](http://en.cppreference.com/w/cpp/string/basic_string/basic_string),对我来说已经足够好了。 –

回答

1

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

例如,用'A'等单引号括起来的字符表示一个字符字面量并表示一个字符并且类型为char

如果你会附上一个符号像"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 ::字符串)具有以下构造

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

,并在此声明

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

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

1

那是因为你正在使用此构造函数:string (size_t n, char c)(没有你链接的基准6),填补了新建成的字符串n字符c。如果您使用双引号创建字符串文字,则单引号表示字符。

+0

我明白了,谢谢你指点我。 – Avdept

2

双引号" "是串用C++面值(由const char [N]表示),而单引号' '是一个字符文字(char),所以你分别致电(std::size_t, const char [N])构造。

它不存在,所以你得到一个编译错误。

您需要将其更改为类似可用的构造函数:

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

(你已经做了改变第二个参数' '