c – 参数类型推导,引用和rvalues
发布时间:2020-12-16 03:41:12 所属栏目:百科 来源:网络整理
导读:考虑这样一种情况:函数模板需要转发参数,同时保持它的左值,以防它是非const左值,但它本身与参数实际上是无关的,如: template typename Tvoid target(T) { cout "non-const lvalue";}template typename Tvoid target(const T) { cout "const lvalue or rval
考虑这样一种情况:函数模板需要转发参数,同时保持它的左值,以防它是非const左值,但它本身与参数实际上是无关的,如:
template <typename T> void target(T&) { cout << "non-const lvalue"; } template <typename T> void target(const T&) { cout << "const lvalue or rvalue"; } template <typename T> void forward(T& x) { target(x); } 当x是一个rvalue,而不是T被推导为常量类型时,它会给出一个错误: int x = 0; const int y = 0; forward(x); // T = int forward(y); // T = const int forward(0); // Hopefully,T = const int,but actually an error forward<const int>(0); // Works,T = const int 似乎对于转发来处理rvalues(不需要显式模板参数),需要有一个前向(const T&)重载,即使它的主体是完全重复的. 有没有办法避免这种重复? 解决方法
这是一个已知问题,也是C 0x中rvalue引用的目的.这个问题在C 03中没有通用解决方案.
有一些古老的历史原因,为什么会发生这种情况,这是非常无意义的.我记得曾经问过一次,答案让我非常沮丧. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |