字符串数组[] = " " 是什么;意思是,为什么它有效?

What does string array[] = ""; mean and why does it work?

本文关键字:为什么 有效 意思是 是什么 数组 字符串      更新时间:2023-10-16
string array[] = "";

我如何能够将const char*分配给数组?与:

相同
string array[] = {""};

??这对我来说很有意义。但是,这仍然不起作用

int array[] = 5;

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

这是不正确的代码;接受它是您的编译器(可能是GCC/G ?)中的错误。

clang给出以下错误(链接):

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

Visual C 同意(链接):

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

实际上,该功能是从空的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。虽然这并不完全符合标准,但它适用于大多数编译器。