初始化字符串时额外的花括号

αλε*_*λυτ 4 c++ initialization

根据问题string array [] =""是什么; 意思是,它为什么有效?我想问一下下面代码中s1s2之间的区别:

int main() {
    const char* s1 = { "Hello" }; // strange but work as followed
    const char* s2 = "Hello"; // ordinary case 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么允许额外的花括号?任何对C++标准的引用都会很有用.

eca*_*mur 11

在C++ 98(和C++ 03)中,这非常简单; 在第8.5条中:

14 - 如果T是标量类型,则表单的声明 T x = { a }; 等同于 T x = a;

在C++ 11中,列表初始化(8.5.4p3)涵盖了这一点:

[...]如果初始化列表具有E类型的单个元素且T不是引用类型或其引用类型与E引用相关,则从该元素初始化对象或引用[...]

认为与使用大括号初始化标量是一样的问题.