为什么 char 可以在 std::array 中初始化为 nullptr,但不能单独初始化?

Jak*_*idt 1 c++

此代码无法编译(使用 gcc 9.3)...

int main() {
    char bar = nullptr; //error: cannot convert ‘std::nullptr_t’ to ‘char’ in initialization
}
Run Code Online (Sandbox Code Playgroud)


但是这段代码确实可以编译...

#include <array>
int main() {
    std::array<char, 1> foo = {nullptr}; // foo[0] == char(0), why?
}
Run Code Online (Sandbox Code Playgroud)


为什么会有区别?

eer*_*ika 5

为什么 char 可以在 std::array 中初始化为 nullptr

它不能。所示程序在 C++ 中格式错误。

当一个格式错误的程序编译时,通常有两种可能性:

  1. 它是一种语言扩展。

  2. 这是一个编译器错误。

在这种情况下,我认为是后者。该错误在 GCC 9 中重现,但似乎已在 GCC 10 中修复。