C++ LValue 和 Rvalue 的参考,无需类型推断
C++ reference for both LValue and Rvalue without type deduction
我正在阅读一个关于左值/右值引用的好教程。如果我正确理解了何时存在类型推导,那么像T&&
可以同时接受左值和右值。
但是有没有办法在没有泛型类的情况下实现这一目标?我想避免重复我接受左值和右值的所有方法。当然,避免按值传递大型对象。
r 值
引用主要用于移动构造函数和移动赋值。
对于常规方法,您可以只坚持使用一种引用类型:
对于只读参数(不带副本),常量引用就足够了。
如果你必须做一个副本,你可以按值获取你的参数并使用
std::move
:
例:
class Test
{
public:
void displayString(const std::string& s) const { std::cout << s << m_s; }
void setString(std::string s) { m_s = std::move(s); }
private:
std::string m_s;
};
如果您实现的函数不需要 rvalue 语义,那么您可以简单地通过引用或常量引用传递参数。
但是,如果可以利用右值并且不想复制代码,则可以按值传递并移动结果。这应该几乎与代码复制或具有通用引用的实现一样有效,并且更易于维护。
这个答案显示了技术:C++11 中的所有/大多数 setter 函数是否应该编写为接受通用引用的函数模板?
// copy, then move
void set_a(A a_) { a = std::move(a_); }
相关文章:
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 不能使这种类型的"void(C::* volatile)(int) const "在参考手册C++示
- 返回int数据类型v/s传递参考
- 将参考类型作为嵌套模板结构中的模板参数作为模板参数不起作用
- 如何检查两种类型是否相同,忽略const和参考
- CPP中的单个参考代表两种或多个数据类型
- const自动参考绑定到(NULL)指针 - 实际类型是什么
- 维护对元素参考类型
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- 在编写特征以进行参考和非参考类型时,如何减少重复
- Python ctypes,回调函数增强类型是C++参考
- 通过参考推断模板包中的冲突类型
- 如何使用自我参考类型并在C 类中使用别名
- 如何在基本类型参考中存储对派生类型的参考
- 试图分配输出以查看指针和参考输出时,请勿命名类型错误
- 了解普遍参考的类型扣除
- sizeof参考对于类型和数据成员的不同
- rvalue参考绑定到std ::功能类型的LVALUE
- 如果铸造运算符对类型和引用类型的引用,为什么直接列表初始化会导致类型参考铸件的模棱两可
- C 型转换到类型与 C 型转换到类型参考