C++ 14
函数返回值类型推导
c++14 对函数返回类型推导规则做了优化:
auto func(int i) {
return i;
}
返回值类型推导也可以用在模板中:
template<typename T>
auto func(T t){
return t;
}
注意:
- 函数内如果有多个return语句,必须返回相同的类型,否则编译失败
- 如果return语句返回初始化列表,返回值类型推导也会失败
- 如果函数是虚函数,不能使用返回值类型推导
lambda参数auto
c++11中,lambda表达式参数需要使用具体的类型声明:
auto func1 = [](int a){ return a; };
在c++14中,对此进行了优化,lambda表达式参数可以直接是auto:
auto func1 = [](auto a){ return a; };
std::make_unique
c++11中只有std::make_shared,c++14中增加了std::make_unique。
class TestA {
};
std::unique_ptr<A> ptr = std::make_unique<A>();
std::shared_timed_mutex 与 std::shared_lock
c++14通过std::shared_timed_mutex和std::shared_lock来实现读写锁,保证多个线程可以同时读,但是写线程必须独立运行。
实现方式如下:
class TestA {
public:
TestA(): value_(0) {
}
int GetValue() const {
std::shared_lock<std::shared_timed_mutex> readLock(mutex_);
return value_;
}
void SetValue(int v) {
std::unique_lock<std::shared_timed_mutex> writeLock(mutex_);
value_ = v;
}
private:
int value_;
// mutable 可变的,被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。
mutable std::shared_timed_mutex mutex_;
};
|