左右值
左值可以用取地址操作符&获取地址,而右值不能。
int x=1;
int* p = &++x; //ok
p=&x++;//not ok
//++x
int& operator++()
{
*this += 1; //累加后取出
return *this;
}
//x++
int operator++(int)
{
int oldvalue=*this;
++(*this);
return oldvalue;
}
自动类型推导
auto
(1)auto是值类型推断;
(2)配合const,volatile,&,* 等修饰符使用更妙。
decltype (读declare type)
(1)通过给定表达式推断类型
int x=1;
decltype(x) y1;//ok
decltype(x)& y2 =x;//ok
decltype(&x) y3 = &x;//ok,类型是int*
空指针
(1)尽量少用NULL
#define NULL 0
(2)nullptr更安全,尽量用它来初始化指针变量
#定义一个nullptr变量
nullptr_t nil;
int* p = nil;//ok
assert(nil==nullptr);//ok
列表初始化—福音啊
int x{};//x=0
string ss{"ssss"};//ok
vector<int>vec{1,2,3};//ok
新for循环
vector<int> a{1,2,3,4,5};
for(auto i:a)
{
std::cout<<i<<std::endl;
}
for(const auto& i:a)
{
std::cout<<i<<std::endl;
}