我认为通用引用 ( T&&
) 应该采用任何类型的引用。但以下不起作用。
当我尝试在我正在编写的库中保持 const 正确时,我遇到了这个问题。我是 C++ 新手,以前从未见过这样的东西。
测试.cpp:
enum Cv_qualifier {
constant,
non_const
};
template <Cv_qualifier Cv> class A;
template<>
class A<Cv_qualifier::constant> {
public:
template<Cv_qualifier Cv2>
void t(const A<Cv2>&& out) {}
};
template <>
class A<Cv_qualifier::non_const> {
public:
template<Cv_qualifier Cv2>
void t(const A<Cv2>&& out) {}
};
int main()
{
A<Cv_qualifier::non_const> a;
A<Cv_qualifier::constant> b;
a.t(b);
}
错误(用 编译g++ test.cpp -std=c++11
):
test.cpp: In function ‘int main()’:
test.cpp:24:10: error: cannot bind ‘A<(Cv_qualifier)0u>’ lvalue to ‘const A<(Cv_qualifier)0u>&&’
a.t(b);
^
test.cpp:17:10: note: initializing argument 1 of ‘void A<(Cv_qualifier)1u>::t(const A<Cv2>&&) [with Cv_qualifier Cv2 = (Cv_qualifier)0u]’
void t(const A<Cv2>&& out) {}
^
顺便说一句,在实际程序中,class A
不拥有任何实际数据,并且包含对实际保存数据的另一个类的引用。我希望这意味着当我允许成员函数接受临时对象时t
,我不会经常创建间接/复制数据。class A