bosthhe1 / cpushpush

0 stars 0 forks source link

c++11语法特性 #38

Open bosthhe1 opened 1 year ago

bosthhe1 commented 1 year ago

在c++98中,只有单参数的构造函数中,支持隐式类型转换,多参数不支持

class A
{
public:
    A(int a)
        :_a(a)
    {}
private:
    int _a;
};
int main()
{
    A aa1 = 1;//这是隐式类型转换,先使用1构造一个零时变量,在使用零时变量拷贝构造aa1,编译器优化变为1直接构造aa1
    A aa2(1);//直接构造
}

c++11支持多参数的隐式类型转换构造

struct point
{
    int _a;
    int _b;
    point(int a,int b)
        :_a(a)
        , _b(b)
    {}
};
int main()
{
    point* c1 = new point{ 1, 2 };////这里是使用了c++11的语法,多参数隐式类型转换,然后这里的new是c++语法,开空间加初始化,所以使用new语法的自定义类型需要写构造函数
    point* c2 = new point[2]{{ 1, 2 }, { 3, 4 }};
}
bosthhe1 commented 1 year ago
struct point
{
    int _a;
    int _b;
};
int main()
{
    point a1 = { 1, 2 };//这个是c语言自然支持的语法
    point a2{ 1, 2 };//这里是c++11支持的,可以省略等号
    int b1[] = { 0, 1, 2, 3, 4 };//与上同理
    int b2[]{ 0, 1, 2, 3, 4 };
}
bosthhe1 commented 1 year ago

对于"{ }",以vector为例子,实际上是去调用了vector(initializer_list l )的构造函数,将"{ }"里面的内容写入到 I 中,然后在使用迭代器之类的,将 I 中的数据,拷贝到vector。

bosthhe1 commented 1 year ago

增加decltype关键字,这个关键字和auto差不多,会自动推导类型,但是decltype关键字可以直接当类型使用 注意decltype关键字的使用方式decltype(a) b = a; image 当我们不知道a的类型的时候,可以vector<decltype(a)>也可以推出来,这里就把delctype(a)当作一个类型,但是auto不行