这是有效的 C++ 代码吗?这不正常

Deb*_*obi 2 c++ arrays string gcc6

int main() {
    
    string str[5] = "ABCD";
    std::cout << str[3] << std::endl;
    std::cout << str[0] << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码打印:

A B C D

A B C D

没看懂,怎么str[3]打印ABCD

编译器:GCC 6.3

bol*_*lov 5

该代码不是有效的 C++ 代码,不应编译。并且它不适用于 7 以上的 clang 和 gcc 版本。这很可能是旧版 gcc 中的一个错误,在版本 7 中得到了修复。

std::string str[5]
Run Code Online (Sandbox Code Playgroud)

您在这里拥有的是一个包含 .5 个元素的 C 数组std::string。这是初始化它的方式:

std::string strings[5] = {"1st string", "2nd string", "3rd string", "4th string", "5th string"};
Run Code Online (Sandbox Code Playgroud)

在这种情况下strings[0]将是"1st string"并且strings[3]将是"4th string"

但是不要这样做。不要在 C++ 中使用 C 数组。使用std::vectororstd::array如果您需要一个字符串数组:std::array<std::string> stringsstd::vector<std::string> strings

话虽如此,我怀疑您只想要一个字符串,也就是:

std::string str = "ABCD";
Run Code Online (Sandbox Code Playgroud)

在这种情况下str[0]'A'str[3]'D'