Vin*_*ent 17 c++ pointers iterator object-address
以下函数的最通用语法是什么:
template<IteratorType> void myFunction(const IteratorType& myIterator)
{
_ptr = &myIterator[0];
}
Run Code Online (Sandbox Code Playgroud)
它需要一个迭代器myIterator(它可以是一个原始指针),目标是将指向的对象的地址分配myIterator给一个原始指针_ptr.目前我使用&myIterator[0]但我意识到只有随机访问迭代器才有operator [].
那么有一种语法适用于所有类型的标准迭代器和指针吗?
For*_*veR 28
您可以取消引用指针,然后获取对象的地址.
template<IteratorType> void myFunction(const IteratorType& myIterator)
{
_ptr = &(*myIterator);
}
Run Code Online (Sandbox Code Playgroud)
Big*_*oss 20
根据标准*运算符返回一个引用,所以在我看来最好的方法是&*myIterator,但由于类可能超载了&运算符,最好的方法是std::addressof(*myIterator)所有类的工作
所有迭代器都需要有operator *(24.2.2:2),所以你可以写
_ptr = &*myIterator;
Run Code Online (Sandbox Code Playgroud)
但是,这对输出迭代器无效,其中*r仅在赋值操作的左侧有效 (24.2.4:2)。
另请注意,*r提供&可以合理应用的值不一定是正确的;例如,专业化std::vector<bool>(23.3.7) 的reference类型不是bool &。在你的情况下,赋值_ptr = &*myIterator会捕捉到这一点,假设这_ptr是一个合适的指针类型,你会得到编译失败。
| 归档时间: |
|
| 查看次数: |
16869 次 |
| 最近记录: |