#include <iostream>

class A{
  public:
    explicit A(int a, int b){    // explicit 禁止隐式转换
        std::cout << a << " " << b << std::endl;
    }
};

class B{
  public:
    explicit B(int i){
        std::cout << i << std::endl;
    }
  private:
    A a{1, 2};      // ok
    //   A a = {0,  0};   //报错。 A的构造函数加了explicit, 所以这里不能隐式转换
};

struct Pig{
    std::string name{"hello"};
    int age{12};
};


int main() {
    // google c++11编码标准,无论何时,初始化都用{}, 不要用()。 此功能也属于c++11新增的初始化列表功能

    B b{123};

    //Pig pig("a", 1);  // 报错
    Pig pig{"张三", 20};   // ok。 不需要一个个去赋值了,非常方便
    std::cout << pig.name << " " << pig.age << std::endl;

    return 0;
}

打印结果:
1 2
123
张三 20

posted on 2022-09-15 10:46  残月影歌  阅读(16)  评论(0编辑  收藏  举报