Was ist der Grund, warum die Array-Größe nicht aus der Initialisierungszeichenfolge in der Mitgliedsvariablen abgeleitet werden kann?

Betrachten Sie den Code:

struct Foo
{
    const char str[] = "test";
};

int main()
{
    Foo foo;
}

s kann nicht sowohl mit g ++ als auch mit clang ++ kompiliert werden und spuckt im Wesentlichen @ au

error: array bound cannot be deduced from an in-class initializer

Ich verstehe, dass dies wahrscheinlich im Standard steht, aber gibt es einen besonders guten Grund dafür? Da es sich um ein String-Literal handelt, sollte der Compiler in der Lage sein, die Größe problemlos abzuleiten, ähnlich wie es der Fall ist, wenn Sie einfach ein Out-of-Class-@ deklariereconst C-ähnlicher nullterminierter String.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage