STL 列表的参数::插入
Parameters to STL list::insert
STL list::insert 的语法如下 -
iterator
insert(iterator __position, const value_type& __x);
为什么要传递迭代器而不是对迭代器的引用?
允许实现通过 const 引用而不是按值传递迭代器。没有相关的语义差异。
在这种情况下,按值传递效率略高。iterator
对象包含指向堆上列表元素对象的单个指针。请记住,通过引用传递本质上是通过幕后的指针传递。(尽管引用与指针不同,但在跨越实际函数调用边界时,没有其他可行的实现。
传递到堆的指针,但按引用传递意味着传递指向iterator
的指针,然后在 insert
函数内部需要两个间接寻址。(这在理论上确实取决于 ABI,但无论如何,按值传递不会有缺点。
传递语义的快速说明:
template< typename param >
void same_params( param a, param b ) {
std::cout << ( &a == &b ) << 'n';
}
int main() {
int const five = 5;
same_params< int const & >( five, five ); // true
same_params< int const & >( five, 6 ); // false
same_params< int const & >( five, 5 ); // unspecified
same_params< int const & >( 5, 5 ); // unspecified
same_params< int >( five, five ); // false (for any arguments)
}
http://ideone.com/2mC07
如果不是传递指针,same_params< int const & >
就没有办法工作。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何将字符串作为要插入QStringListModel的参数
- 无法转换字符串插入函数的参数
- C++标准是否保证失败的插入到关联容器中不会修改 rvalue-reference 参数?
- sqlite3 c 函数:插入语句作为参数时未执行
- 二进制搜索树插入带参数参考
- 如何在C 中的LevelDB中的put()方法的值参数中插入多个值
- 为什么我不能在插入的函数调用中直接使用返回的指针作为参数
- 使用按插入方式排序的参数创建哈希映射
- 在 QString 插入函数中使用参数
- 在 LLVM 中,如何插入/声明具有可变参数数量的函数
- sqlite3带有参数的多个插入物;仅插入一个记录
- C++:此插入表达式的作用以及作为函数参数传递时的工作方式
- 将模板参数插入到ostream中
- 在一组模板参数中插入任意数量的类型
- 在矢量中插入元素时,请避免复制参数
- STL 列表插入要求 3 个参数
- 插入>>运算符重载:从 CIN 检索对象的 CTOR 参数时的异常处理
- 弄清楚链表的插入函数参数
- 如何将变量类型作为参数函数插入