C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

118 篇文章 8 订阅

C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

--------------------------------------------------------------------

C + +可以使用 小括号/大括号 直接赋值,并且,兼容了 C风格 的等号(=)赋值。

=======================================

C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

C++ 中,我们可以使用小括号直接赋值的方式,将多个值赋给一个对象或变量。这种方式叫做列表初始化(List Initialization),可以用于初始化各种类型的对象,例如:

    int x(1);             // 将值 1 赋给变量 x
    double pi{3.14159};   // 将值 3.14159 赋给变量 pi
    std::string s{"hello"};// 将字符串 "hello" 赋给变量 s
    std::vector<int> 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 <iostream>//头文件,与C语言的头文件的区别是没有.h
    using namespace std;//命令空间,先写在这里,不用问为什么,后期会单独讲
    int main()//C++规定,主函数的返回值必须是int类型的
    {
        int a = 10;
        cout<<a<<endl;
        int b(12);//C++11支持的写法,相当于int b = 12;
        //使用括号时需要定义的同时初始化
        b = 4;
        cout<<b<<endl;
        double c = 3.13;
        int d(c);
        //后面使用对象初始化时,用的都是圆括号,花括号我们不用
        cout<<d<<endl;//3
        int e{a};
        cout<<e<<endl;
        int f{(int)c};//C++11增加了数据窄化操作,如果非要进行不同类型之间的赋值,需要强转
        cout<<f<<endl;
        return 0;
    }

除了数组和变量,列表初始化还可以用于以下几种类型的对象:

结构体和类对象

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<int> v{1, 2, 3}; // 初始化一个整型向量
    std::map<std::string, int> m{{"one", 1}, {"two", 2}, {"three", 3}}; // 初始化一个字符串到整型的映射

在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化 STL 容器。

需要注意的是,不是所有的类型都支持列表初始化,只有实现了相应的构造函数或者使用了聚合初始化的类型才能支持列表初始化。如果一个类型没有相应的构造函数,或者不是聚合类型,那么列表初始化将会失败。
————————————————
版权声明:本文为CSDN博主「Robin.Su」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/robin__su/article/details/131699245

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值