一、临时对象
临时对象指的是没有名字的对象。
对于这样的对象不论是传递参数,还是已返回值返回时,都不会调用拷贝构造。下面这段代码在C++17是可以正常编过的。
class A{
public:
A(const A&) = delete;
};
void test(A a){
}
A test2(){
return A{};
}
test(A{});
auto a = test2();
二、用处
对于一些没有拷贝构造的结构,如unique_ptr、atomic等,我们可以写如下的通用工厂函数。
template <typename T, typename ... Args>
T Create(Args&& ... args){
return T{std::forward<Args>(args)...};
};
std::unique_ptr<int> p = Create<std::unique_ptr<int>>(new int{5});
std::atomic<int> atomic = Create<std::atomic<int>>(1);
三、表达式值的分类
自从C++11开始、直到C++17。表达式值的分类都如下所示: