C++是真的他妈难学啊,总是有一堆莫名其妙的东西,他妈的编译原理也是一脸懵逼。
尾随返回类型
int add (int a, int b){
return a + b;
}
//像这种,返回类型都是放在前面的
auto myFunction() -> int{
return 5;
}//目前没懂这是为了干啥,放屁吗在那,看鸿蒙的代码也没懂,也没用这些东西啊操
decltype
result_of
用于推断函数调用的返回类型
result_of<F(Args...)>::type
其中result_of是一个模板结构体,而不是一个类型,
而我们引出来的type才是一个F(Args...)返回的类型
std::result_of<decltype(multiply)&(int, int)>::type
//decltype适用于推断类型的,那么为什么还要在后面加上(int,int)呢?
//是因为有可能遇到函数重载,想象一下multiply有参数类型为double和参数
//类型为int的情况。
auto enqueue(F&& f, Args&&... args)
-> std::future<typename std::result_of<F(Args...)>::type>;
//关于这段代码为什么F能被推断为是函数,是因为F(Args...)
future
与并发编程相关的模板类,当启动一个异步操作时,我们会得到一个future对象,
当这个get出结果的时候,
future<int> fu = async(compute);
auto ret = fu.get();//假设compute是一个函数返回的是int类型,
通用引用(转发引用)
看上去是右值引用,但是既可以绑定右值也可以绑定左值,通常与forward一起用
template<typename T>
void wrapper(T&& arg){
somefunction(forward<T>(arg));
}
forward是不会改变参数是左值还是右值,完美的保留了参数的原始类型和值类别。
packaged_task
既能封装函数也能封装对象,实现异步编程的强大工具,特别是在需要异步执行任务并在将来某个时刻获取其结果的场景中。
bind
参数是函数和若干参数,返回值类型是函数对象。
Top comments (0)