gpt4 book ai didi

c++ - 按值或 const 引用传递 boost::python::object?

转载 作者:太空狗 更新时间:2023-10-29 23:07:51 24 4
gpt4 key购买 nike

我应该按值还是按常量引用将 boost::python::object 对象传递给 C++ 函数?我几乎总是通过 const 引用传递 C++ 中的重要对象。然而,在 Boost Python 文档示例中,它们总是按值传递 boost::python::object。所以我想知道这背后是否有原因,或者他们只是这样做是为了让文本更易于阅读或其他什么。

最佳答案

boost::python::object 是一个普通对象。

它只是 PyObject* 的包装器,因此对 boost::python::object 的引用基本上只是携带一个指向指针的指针。这有点毫无意义的间接性。

您确实可以通过传递引用来避免增加引用计数。但我猜测使用引用的间接性比增加引用计数更有害。

编辑

我整理了一个基准:

void by_value(boost::python::object o)
{
o + boost::python::object(1);
}

void by_const_ref(const boost::python::object & o)
{
o + boost::python::object(1);
}

结果,使用 -O3 编译时

by-value:       9:215190247
by-const-ref: 5:764022989

鉴于:

void by_value(boost::python::object o)
{
for(int x = 0;x < 1000;x++)
o + boost::python::object(1);
}

void by_const_ref(const boost::python::object & o)
{
for(int x = 0;x < 1000;x++)
o + boost::python::object(1);
}

我得到:

by-value:       5:199017623
by-const-ref: 8:720536289

@eudoxous 是正确的,更新引用计数所需的写入非常昂贵。但是,使用引用造成的间接性也是有代价的。但是,它似乎比我预期的要小。

关于c++ - 按值或 const 引用传递 boost::python::object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11439165/

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