[c++]c++11 新标准

1. constexpr

要求编译器去确认变量是常量表达式

constexpr int sz=size(); //编译时除非size()是constexpr function,否则不通过



当用constexpr修饰指针,说明是指针常量,不是指向常量的指针

const int *p=nullptr; //指向常量的指针
constexpr int *q=nullptr;//指针常量



2. alias declaration

using SI=Sales_item;// similar to typedef  Sales_item SI;



3. auto 

编译器自动根据表达式的结果推测变量类型

auto忽略top-level const, low-level const保留

int a=10;
const int * const p=&a;
auto pp=p;// pp is const int *  指向常量的指针,top-level const需要在auto前面加上 const
const auto pp=p;




4. decltype

当我们只想用编译器从表达式中推测出来的类型,而不是用表达式来初始化这个类型(like auto),就用decltype

decltype(f()) sum=x;


decltype同时保留了top-level和low-level的const


5.类中初始化器

{}或者=  ,()不行。

class book{
string isbn;
double price{0.0};
int piece=0;
};



6. range for statement

for(declaration : expression)

    statement;

//example
string str("some string");
decltype(str.size()) count=0;
for(auto c: str)
    if(isspace())
    count++;

//if need to change the element in str using auto &
for(auto &c:str)
    c=toupper(c);



7. vector 用花括号初始化

vector strs={"erd","sdg","acv"};//再也不用一个一个push_back()啦

花括号不能用()代替




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