C++ 中,我们可以使用小括号直接赋值的方式,将多个值赋给一个对象或变量。这种方式叫做列表初始化(List Initialization),可以用于初始化各种类型的对象,例如:
int x(1); // 将值 1 赋给变量 x
double pi{3.14159}; // 将值 3.14159 赋给变量 pi
std::string s{"hello"};// 将字符串 "hello" 赋给变量 s
std::vector v{1, 2, 3}; // 初始化一个整型向量
在上面的例子中,使用小括号或大括号括起来的一组值被视为一个初始化列表,用于初始化变量或对象。
需要注意的是,列表初始化具有类型检查和类型转换的功能。如果初始化列表中的值类型不匹配,或者无法进行隐式类型转换,编译器将会报错。例如:
int x{3.14}; // 错误:无法将浮点数转换为整型
char c{-1}; // 错误:无法将负数转换为字符
如果需要对数组进行列表初始化,可以使用大括号括起来一组值的方式进行初始化,例如:
int arr[] = {1, 2, 3}; // 初始化整型数组
int mat[][3] = {{1, 2, 3}, {4, 5, 6}}; // 初始化二维整型数组
在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化数组。注意,对于多维数组,需要用多组大括号来表示不同维度上的值。
为了与对象(类)的初始化方法相同,C++中给普通变量增加了新的赋值方式。
/*输入输出流头文件*/
#include //头文件,与C语言的头文件的区别是没有.h
using namespace std;//命令空间,先写在这里,不用问为什么,后期会单独讲
int main()//C++规定,主函数的返回值必须是int类型的
{
int a = 10;
cout<
除了数组和变量,列表初始化还可以用于以下几种类型的对象:
结构体和类对象
C++ 中的结构体和类对象可以用列表初始化的方式进行初始化,例如:
struct Point {
int x;
int y;
};
Point p{1, 2}; // 初始化一个 Point 对象
在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化结构体变量 p
。
枚举类型
C++ 中的枚举类型也可以用列表初始化的方式进行初始化,例如:
enum Color {
RED,
GREEN,
BLUE
};
Color c{GREEN}; // 初始化一个枚举类型的变量
在上面的例子中,使用大括号括起来的一个值被视为一个初始化列表,用于初始化枚举类型变量 c
。
STL 容器
C++ 中的 STL 容器,如 std::vector
、std::list
、std::map
等,也可以用列表初始化的方式进行初始化,例如:
std::vector v{1, 2, 3}; // 初始化一个整型向量
std::map m{{"one", 1}, {"two", 2}, {"three", 3}}; // 初始化一个字符串到整型的映射
在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化 STL 容器。
需要注意的是,不是所有的类型都支持列表初始化,只有实现了相应的构造函数或者使用了聚合初始化的类型才能支持列表初始化。如果一个类型没有相应的构造函数,或者不是聚合类型,那么列表初始化将会失败。