在C和C++中,可以使用大括号初始化数组和结构:
int a[] = {2, 3, 5, 7};
entry e = {"answer", 42};
Run Code Online (Sandbox Code Playgroud)
然而,在2007年的一次演讲中,Bjarne提到这种语法也适用于标量.我尝试过这个:
int i = {7};
Run Code Online (Sandbox Code Playgroud)
它确实有效!允许使用大括号初始化标量的原理是什么?
注意:我特别不是在谈论C++ 11统一初始化.这是很好的旧C89和C++ 98.
在阅读这个问题时,我想测试GCC中的输入,看看会输出什么错误.令我惊讶的是以下一行:
char array[] = {"s"};
Run Code Online (Sandbox Code Playgroud)
编译时没有错误或警告,导致包含大小为2的数组"s\0".我原本期望编译器错误,因为表达式的右侧是类型char*[].
在这种情况下,数组初始化只有一个元素不被视为数组,为什么?
我正在学习C++ /通用编程,有时在为旧标准编写练习时尝试使用C++ 11功能.
此练习涉及指向字符串的指针向量.
#include <vector>
#include <string>
#include <iostream>
int main()
{
using std::string ;
using std::vector ;
using std::cout ;
using std::endl ;
vector<string *> v = {new string("Hello") , new string("World")} ;
for (string * x : v) {
cout << *x << " " ;
delete x ;
}
cout << endl ;
}
Run Code Online (Sandbox Code Playgroud)
我有点困难,想知道如何使用这个向量的初始化列表,但这似乎工作.
这个版本也有效:
//...
string s1 = "Hello" ;
string s2 = "World" ;
vector<string *> v = {&s1 , &s2} ;
for …Run Code Online (Sandbox Code Playgroud)