gpt4 book ai didi

c++ - STL list::insert 的参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:32:30 24 4
gpt4 key购买 nike

STL list::insert 的语法如下-

  iterator
insert(iterator __position, const value_type& __x);

为什么传递的是迭代器而不是对迭代器的引用

最佳答案

一个实现将被允许通过 const 引用而不是通过值来传递迭代器。没有相关的语义差异。

在这种情况下,按值传递稍微更有效。 iterator object 包含指向堆上列表元素对象的单个指针。请记住,通过引用传递实际上是在幕后通过指针传递。 (虽然引用与指针不同,但当跨越实际函数调用边界时,没有其他可行的实现。)

因此,按值传递意味着传递指向堆的指针,但按引用传递意味着传递指向- 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++ - STL list::insert 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10368060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com