【发布时间】:2020-08-09 14:36:20
【问题描述】:
我正在尝试了解 C++ 模板并复制语义。
我明白为什么我不能打电话给assign1(它要求提供右值引用,我提供了一个左值引用)
但是为什么我可以调用 assign2 来施加相同的约束呢?
template<typename... Args>
void assign1(Args&& ... arguments) { }
template<typename A, typename... Args>
void assign2(Args&& ... arguments) { }
template<typename A, typename B, typename... Args>
void assign3(Args&& ... arguments) { }
int main() {
const int r = 2;
assign1<int>(r); // no matching function for call to...
assign2<int>(r); // ok!
assign3<int>(r); // no matching function for call to...
}
【问题讨论】:
-
对于
assign1,您显式指定了参数类型,实际参数无法转换为该类型。对于assign2,您明确指定A,但A不用于任何用途。相反,Args会自动从参数类型推导出来。
标签: c++ templates forwarding-reference