常见的几个C++11特有的基础语法

0. 引入

C++的版本号比较有意思,C++98是1998年发布的,C++11是2011年发布的,C++14和C++17分别是2014年和2017年发布的。

C++11是作为取代C++98的版本,这两个版本都是非常经典的版本。

在工作中,遇到了一些C++11特有的基础语法,下面记录一部分。

注意,本篇只讲解笔者看代码常见到的最基础的C++11语法,并不涉及labmda、thread、smart pointer等高级语法。

1. C++11的编译

在linux中,可以使用如下命令来编译C++程序:

  1. 使用C++11标准来编译
g++ -std=c++11 main.cpp -o main
  1. 使用C++98标准来编译
g++ -std=c++98 main.cpp -o main
  1. 使用C++20标准来编译
g++ -std=c++2a main.cpp -o main

2. auto

使用auto来定义变量,简化编程。

auto a=0; //x has type int because 0 is int
auto b='a'; //char
auto c=0.5; //double
auto d=14400000000000LL;//long long
auto e=mapString.begin();//std::map::const_iterator e = mapString.begin();

3. decltype

decltype能返回“一个变量的类型”,如下示例:

auto x = 1.5;
typedef decltype(x) MYTYPE;
MYTYPE y = x+3;//define y as double
cout<

typedef decltype(x) MYTYPE;就相当于typedef double MYTYPE;

4. in-class initialization

C++11支持在class中对成员变量直接进行初始化。

class C
{

 int a=7; //C++11 only

public:

 C();

};

5. Unicode

C++11支持如下两种类型来定义Unicode字符。

char16_t c = u'于'; //c++11
char32_t c = U'于'; //c++11

6. Fixed width integer types

C++11支持固定长度的整数类型,如下所示:

int16_t x = 666;

不需要导入任何头文件就能编译通过。

7. Defaulted Functions

C++11支持用=default的方式,让编译器生成默认实现的函数。

struct A
{

 A()=default; //C++11

 virtual ~A()=default; //C++11

};

8. int变量的初始化

示例如下:

//allocate an int, default initializer (do nothing)
int * p1 = new int; 
//allocate an int, initialized to 0
int * p2 = new int();
//allocate an int, initialized to 5
int * p3 = new int(5); 
//allocate an int, initialized to 0
int * p4 = new int{};//C++11 
//allocate an int, initialized to 5
int * p5 = new int {5};//C++11

总结

记录了笔者看代码常见到的最基础的C++11语法,从这些语法中也能一瞥C++11的特性。

参考

  1. https://smartbear.com/blog/the-biggest-changes-in-c11-and-why-you-should-care/
  2. https://github.com/ShiqiYu/CPP

你可能感兴趣的:(C++,c++)