C++98和C++11的构造和初始化、initializer_list以及decltype关键字(一般)

目录

前言

C++98的构造与初始化

C++11的构造与初始化

初始化列表的initializer_list

decltype关键字


前言

        2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字取代了C++98成为了C++11前最新的C++标准名称。不过由于C++03主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并成为C++98/03标准,从C++0x到C++11到,C++委员会十年磨一剑,第二个真正意义上的C++新标准C++11在2011年姗姗来迟。

        C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,此外C++11能更好的用于系统开发和库开发、语言更加泛化和简单化、程序更加稳定和安全,不仅功能强大,而且还能提升程序员的开发效率,在公司实际项目开发中也用的较多。

官网查看各编译器对C++11标准的接收情况:C++11 - 维基百科,自由的百科全书 (wikipedia.org)

C++98和C++11的构造和初始化、initializer_list以及decltype关键字(一般)_第1张图片

补充:模板的概念是C++98引入的,不是C++11,构造函数的概念更早

C++98的构造与初始化

基本概念:C++98只能使用{}聚合类型(不做解释了,数组和普通的结构体之类的,可以自行了解)进行聚合初始化(不涉及构造),使用()内置类型和自定义类型进行构造和初始化(本质都调用了各自类型的构造函数,然后用给定的数值进行初始化,构造 != 初始化),且{}此时需要=,而()有没有都行

注意事项:

1、Date d =()对自定义或内置类型构造时,()会被视为逗号表达式,若()内为空时会报错,若()有参数时,则参数个数无论为多少都只会调用该类单参数构造函数

#include 
using namespace std;

class Date
{
public:
	Date()
	{
		cout << "Date()" << endl;
	}

	Date(int year)
		:_year(year)
	{
		cout << "Date(int year)" << endl;
	}

	Date(int year, int

你可能感兴趣的:(C++从入门到入土,c++,开发语言)