此函数的参数将绑定到右值引用:
void f(int && i);
Run Code Online (Sandbox Code Playgroud)
但是,此函数的参数将绑定到右值或左值引用:
template <typename T>
void f(T && t);
Run Code Online (Sandbox Code Playgroud)
我经常听到这被称为通用参考.
我也听说它被称为转发参考.
他们的意思是一样的吗?
如果函数体调用,它只是转发引用std::forward吗?
c++ templates perfect-forwarding universal-reference forwarding-reference
const和volatile被称为cv-qualifier由C规格.
specifier和qualifier(cv-qualifier)之间究竟有什么区别?限定符也是一个说明符吗?
是否必须qualifier只有左值?
什么是限定词以外的cv-qualifier?
我的上述理解是否有意义?
C++20 对std::contiguous_iterator_tag. 一些 STL 算法(例如std::copy)可以在连续迭代器上表现得更好。但是,我不清楚程序员应该如何访问这个新功能。
为了论证起见,让我们假设我们有一个完全符合 C++20 的库实现。我想编写最简单的连续迭代器。
#include <iterator>
class MyIterator {
int *p_;
public:
using value_type = int;
using reference = int&;
using pointer = int*;
using difference_type = int;
using iterator_category = std::contiguous_iterator_tag;
int *operator->() const;
int& operator*() const;
int& operator[](int) const;
MyIterator& operator++();
MyIterator operator++(int);
MyIterator& operator--();
MyIterator operator--(int);
MyIterator& operator+=(int);
MyIterator& operator-=(int);
friend auto operator<=>(MyIterator, MyIterator) = default;
friend int operator-(MyIterator, MyIterator);
friend MyIterator operator+(MyIterator, int);
friend MyIterator …Run Code Online (Sandbox Code Playgroud) c++ ×4
c++20 ×1
contiguous ×1
declaration ×1
definition ×1
iterator ×1
lvalue ×1
qualifiers ×1
stl ×1
templates ×1