C++:常见类型的初始化

https://blog.csdn.net/qq_34801642/article/details/104041259
    1. 背景
    2. 初始化

1. 背景
常见类型     包含
内置类型     整型(布尔型,字符型,整型)、浮点型
复合类型     引用、指针、数组
标准库类型     string、vector
2. 初始化

    整型和浮点型初始化时会自动进行类型转换。

#include <iostream>
using namespace std;

int main()
{
    int i1 = 1;
    const int i2 = 1;
    double d1 = 3.14;
    const double d2 = 3.14;

    int x1 = i1; // int <- int
    int x2 = i2; // int <- const int
    int x3 = d1; // int <- double
    int x4 = d2; // int <- double

    const int x5 = i1; // const int <- int
    const int x6 = i2; // const int <- const int
    const int x7 = d1; // const int <- const double
    const int x8 = d2; // const int <- const double

    return 0;
}


    引用类型初始化时类型需严格匹配。若引用类型含有const,可用任何表达式作为初始值。若类间存在继承关系,则基类引用可以绑定派生类对象。

#include <iostream>
using namespace std;
class A
{
public:
    int a;
};

class B: public A
{
public:
    int b;
};

main()
{
    int i1;
    const int i2 = 1;
    double d1 = 3.14;
    const double d2 = 3.14;

    int &x1 = i1; // int & <- int
    // int &x2 = i2;  //错误:int & <- const int
    // int &x3 = d1;   //错误: int & <- double
    // int &x4 = d2;   //错误: int & <- const double

    //引用类型包含const,可用任何表达式作为初始值
    const int &x5 = i1; // const int & <- int
    const int &x6 = i2; // const int & <- const int
    const int &x7 = d1; // const int & <- double
    const int &x8 = d2; // const int & <- const double
    const int &x9 = 1;
    const int &x10 = 3.14;

    //存在继承关系的类,基类引用可以绑定到派生类对象
    A a;
    B b;
    A &a1 = b;// A& <- B
    // B &b1 = a;//错误: B& <- A

    return 0;
}

 

    指针类型初始化时类型需严格匹配。若指针类型含有的const,则可以将非常量转换成常量。若类间存在继承关系,基类指针可以指向派生类对象。

#include <iostream>
using namespace std;
class A
{
public:
    int a;
};

class B: public A
{
public:
    int b;
};

main()
{
    int i1;
    const int i2 = 1;
    double d1 = 3.14;
    const double d2 = 3.14;

    int *x1 = &i1; // int * <- int *
    // int *x2 = &i2;  //错误:int * <- const int *
    // int *x3 = &d1;   //错误: int * <- double *
    // int *x4 = &d2;   //错误: int * <- const double *

    //指针类型包含const,指向常量的指针可用非常量初始化
    const int *x5 = &i1; // const int * <- int *
    const int *x6 = &i2; // const int * <- const int *
    // const int *x7 = &d1; // 错误: const int * <- double *
    // const int *x8 = &d2; // 错误: const int * <- const double *

    //存在继承关系的类,基类指针可以指向派生类对象
    A a;
    B b;
    A *a1 = &b;// A* <- B *
    // B *b1 = &a;//错误: B* <- A *

    return 0;
}



    绑定指针的引用。初始化时,引用绑定对象的类型需要与初始对象的类型严格匹配。

#include <iostream>
using namespace std;
class A
{
public:
    int a;
};

class B: public A
{
public:
    int b;
};

main()
{
    int i1, *p1;
    const int i2 = 1, *p2;
    double d1 = 3.14, *p3;
    const double d2 = 3.14, *p4;


    // int *&x1 = &i1; //错误:等号右边必须为左值
    int *&x1 = p1;
    // int *&x2 = p2;  //错误:int *& <- const int *
    // int *&x3 = p3;   //错误: int *& <- double
    // int *&x4 = p4;   //错误: int *& <- const double

    // const int *&x5 = p1; // 错误:const int *& <- int
    const int *&x6 = p2; // const int *& <- const int
    // const int *&x7 = p3; // 错误: const int *& <- double
    // const int *&x8 = p4; // 错误: const int *& <- const double

    A a, *pa;
    B b, *pb;
    A *&a1 = pa;// A *& <- *a
    // A *&a1 = pb;//错误: A*& <- B
    // B *&b1 = pa;//错误: B*& <- A


    return 0;
}

 
    数组初始化。数组一般用花括号初始化,数组间不能初始化、赋值和拷贝。

#include <iostream>
using namespace std;

main()
{
    int i = 1;
    const int ci = 1;

    int x1[3];
    int x2[3] = {1, 2, 3};
    int x3[3] = {1, 3.14, ci};
    const int x4[3] = {1, 3.14, ci};

    //不能用一个数组初始化另一数组
    // int i4 = i1;

    return 0;
}

    string初始化。

#include <iostream>
#include <string>;
using namespace std;

int main()
{
    string s1;
    string s2(s1);
    string s3("abc");
    string s4(3, 'a');//s4=aaa
    string s5{"abc"};

    string s6 = s1;
    string s7 = "abc";
    string s8 = 'a' + s1;//s8=a
    // string s9 = 'a' + 'b' + s1;//错误:加号两边至少有一边是string类型
    return 0;
}


    vector初始化

#include <iostream>
#include <vector>;
using namespace std;

int main()
{
    vector<string> vi1;
    vector<string> vi2(vi1);
    vector<string> vi3(3);        //vi3包含3个元素
    vector<string> vi4(3, "a");   //vi4包含3个元素,每个元素的初值为a
    vector<string> vi5{"a", "b"}; //vi5包含2个元素,初值分别是a和b

    vector<string> vi6 = vi1;
    vector<string> vi7 = {"abc"};
    return 0;
}

————————————————
版权声明:本文为CSDN博主「扶摇直上九万里wyh」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34801642/article/details/104041259

posted @ 2020-02-03 21:34  keep_smile-resonate  阅读(409)  评论(0编辑  收藏  举报