Union是个不被注意的关键字,意为联合体,这是个诡异的名字.若不是为了继承C语言,它也不会出现在C++中(虽说,union在C++中得到了扩充,完成了接近类的功能).它的作用主要是节省内存空间,在嵌入式编程中有用.但在为当代微机设计的C++中,它也并非一无是处.请看看下面的代码: class A { private: ]; public: A(](n){} };//Wrong code 你以为这代码能通过编译?是的,按道理来讲应该这样,因为逻辑上没有任何错误.但是运行一下编译器,你会得到如下错…
在我们实际编程中,我们经常会碰到变量初始化的问题,对于不同的变量初始化的手段多种多样,比如说对于一个数组我们可以使用 int arr[] = {1,2,3}的方式初始化,又比如对于一个简单的结构体: 这些不同的初始化方法都有各自的适用范围和作用,且对于类来说不能用这种初始化的方法,最主要的是没有一种可以通用的初始化方法适用所有的场景,因此C++11中为了统一初始化方式,提出了列表初始化(list-initialization)的概念. 统一的初始化方法 在C++98/03中我们只能对普通数组和P…
列表初始化(1)_统一初始化 1. 统一初始化(Uniform Initialization) (1)在C++11之前,很多程序员特别是初学者对如何初始化一个变量或对象的问题很容易出现困惑.因为可以用小括号.大括号或赋值操作符等多种方式进行初始化. (2)基于这个原因,C++11引入了“统一初始化”的概念.这意味着我们可以使用{}这种通用的语法在任何需要初始化的地方. [实例分析]初始化列表   #include <iostream> #include <vector> #incl…
1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低精度浮点数.如从long double转double或float. ③从整型数隐式转换为浮点数,并且超出浮点数的表示范围,如float=(unsigned long Long)-1,注意这表示将-1先强制转换为unsigned long long,再隐式转换为float. ④从整型数隐式转换为长度较…
1. 初始化列表的实现 (1)当编译器看到{t1,t2…tn}时便会生成一个initializer_list<T>对象(其中的T为元素的类型),它关联到一个array<T,n>. (2)对于聚合类型,编译器会将array<T,n>内的元素逐一分解并赋值给被初始化的对象.这相当于为该对象每个字段分别赋值. (3)对于非聚合类型.如果该类存在一个接受initializer_list<T>类型的构造函数,则初始化时会将initializer_list<T&g…
什么是列表初始化 使用一个花括号来初始化变量,表现形式如下: std::vector<int>a{1,2,3,4,5}; 或者 std::vector<int>a = {1,2,3,4,5}; 这里用到了一个新的类型,即initializer_list,包含在标准库头文件中. 优点 在C++11以前,如果要初始化一个vector,需要这样做 std::vector<int>a; a.push_back(1); a.push_back(2); a.push_back(3)…
initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list 参数. #include <iostream> #include <vector> #include <initializer_list> template <class T> struct S { std::vector<T> v; S(std::initializer_list<T>…
1. 使用列表初始化 在c++98/03中,对象的初始化方法有很多种,例如 int ar[3] = {1,2,3}; int arr[] = {1,2,3}; //普通数组 struct A{ int x; struct B{ int y; int z; } b; }a = {1, {3,4}}; //POD类型,可以直接使用memcpy复制的对象 int i = 0; Foo foo = f;//拷贝初始化 int i(0); Foo f(123); //直接初始化 在c++98/03中,普通…
一.各种初始化的形式 /* 定义变量形式一:不指定初始值 */ int a; // 默认初始化 /* 定义变量形式二:指定初始值 */ int b = 1; // 拷贝初始化 int b(1); // 直接初始化 int b = {1}; // 列表初始化 int b{1}; // 列表初始化 二.默认初始化 定义变量时没有指定初值(此时变量被赋予了“默认值”) 内置类型:①全局变量被初始化为0,②局部变量不被初始化(值是未定义的) 类类型:①有默认构造函数则由默认构造函数初始化,②无默认构造函…
C++关于struct和class的区别,可以看上一篇文章:c ++ class和struct[转] 结构体成员列表初始化,来个例子: #include <iostream> #include <cstdio> using namespace std; struct Child{ string name, fun; int age; Child(){//初始化fun和age this->name = name; // name = name; 错误示例 }; }; struc…