gpt4 book ai didi

c++ - &p[0] 与 boost::scoped_array 中的 p.get() 的性能影响

转载 作者:行者123 更新时间:2023-11-30 03:12:49 25 4
gpt4 key购买 nike

主题一般说明了一切。基本上是这样的情况:

boost::scoped_array<int> p(new int[10]);

&p[0]p.get() 在性能上有什么明显的区别吗?

我问是因为我更喜欢第一个,它有一个更自然的指针类语法。事实上,它使您可以将 p 替换为 native 指针或数组,而无需更改任何其他内容。

我猜因为 get 是一个单行代码“return ptr;”,所以编译器会内联它,我希望它足够聪明,可以内联 operator[] 以这样一种方式,它能够不取消引用然后立即引用。

有人知道吗?

最佳答案

知道的唯一方法是实际测量它!

但是如果您有 boost:scoped_array 的源代码,您可以查看代码并查看它的作用。我确信它非常相似。

T * scoped_array::get() const // never throws
{
return ptr;
}

T & scoped_array::operator[](std::ptrdiff_t i) const // never throws
{
BOOST_ASSERT(ptr != 0);
BOOST_ASSERT(i >= 0);
return ptr[i];
}

编写两个版本的代码(一个使用 get(),另一个使用 operator[])。在打开优化的情况下编译为 assembley。查看您的编译器是否真的设法优化掉 ptr+0。

关于c++ - &p[0] 与 boost::scoped_array 中的 p.get() 的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/273869/

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