string array [] =“”;意思是,它为什么有效?

时间:2014-01-31 13:38:17

标签: c++ arrays

string array[] = "";

如何将const char*分配给数组?这是一样的:

string array[] = {""};

??这对我来说很有意义。但是,这仍然无效

int array[] = 5;

那么它们之间有什么区别,它对int数组不起作用?

2 个答案:

答案 0 :(得分:5)

这是错误的代码;你的编译器(可能是gcc / g ++?)中的一个错误就是接受它。

clang会出现以下错误(link):

a.cpp:5:17: error: array initializer must be an initializer list
    std::string array[] = "";
                ^
1 error generated.

Visual C ++同意(link):

testvc.cpp(2) : error C3074: an array can only be initialized with an initializer-list

标准中的相关条款是8.5p17:

  

[...]
   - 如果目标类型是字符数组,char16_t数组,char32_t数组或wchar_t数组,初始化程序是字符串文字,请参见8.5.2。
  [...]
   - 否则,如果目标类型是数组,则程序格式错误。
  [...]

作为错误提交给gcc:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60009

答案 1 :(得分:0)

实际上,该功能是空char数组初始化的延续。(std::stringchar非常相似。)

char buf[10] = "";相当于char buf[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};,但char buf[10] = "a";相当于char buf[10] = {'a', 0, 0, 0, 0, 0, 0, 0, 0, 0};。为什么?由于char是算术值,因此它会自动初始化为零。

您的编译器将""视为char值(技术上为const char*),只需将其转换为std::string。虽然这不完全符合标准,但它适用于大多数编译器。