Meh*_*dad 5 c++ stl typedef reference
STL容器有一个reference和const_reference typedef,在很多情况下我见过(容器bool是我能想到的唯一例外),可以简单地定义为
typedef value_type& reference;
typedef const value_type& const_reference;
Run Code Online (Sandbox Code Playgroud)
但是,这些类型的语义到底是什么?
根据我的理解,他们应该"表现得像对价值类型的引用",但究竟是什么意思呢?
MSDN说这reference是:
一种类型,提供对存储在向量中的元素的引用.
但究竟是什么意思呢?他们需要超载特定的运营商,还是有特定的行为?如果是这样,所需的行为是什么?
你问的是“我可以总是取消引用引用吗?是的,你可以。这意味着取消引用reference可以做所有取消引用可以做的事情value_type&,这就是一切都value_type可以做的事情。如果这对你来说有意义的话。
您不能重载 typedef 上的运算符。typedef 与分配给它们的类型具有相同的行为。它们被 typedef 的原因是为了让它们不那么麻烦并提供一个通用的“接口”
存在的原因reference是为了防止这样的事情发生:
template<typename T>
struct foo {
T& bar();
typedef T& reference;
reference baz();
}
foo<int> x;
foo<int>::T& y = x.bar(); // error! returns a T& but I can't create one!
foo<int>::reference z = x.baz(); // ok!
Run Code Online (Sandbox Code Playgroud)
它还提供了更清晰的界面并允许使用 SFINAE:
template<typename T>
typename T::reference second(T::reference& t) { return t.at(1); };
template<typename T>
T& second(T& t) { return t[1]; };
std::vector v(10);
foo f(10); // type with [] overloaded but no reference typedef
second(x) = 5; // calls first def
second(f) = 3; // calls second def
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3016 次 |
| 最近记录: |