string array[] = "";
如何将const char*
分配给数组?这是一样的:
string array[] = {""};
??这对我来说很有意义。但是,这仍然无效
int array[] = 5;
那么它们之间有什么区别,它对int
数组不起作用?
答案 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::string
与char
非常相似。)
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
。虽然这不完全符合标准,但它适用于大多数编译器。