Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-传递NULL与将空std::set分配给传递给方法的可行性和性能_C++_Performance - Fatal编程技术网

C++ C++;-传递NULL与将空std::set分配给传递给方法的可行性和性能

C++ C++;-传递NULL与将空std::set分配给传递给方法的可行性和性能,c++,performance,C++,Performance,我正在做一些性能调整工作。基本上,我已经在我们的代码库中发现了一个潜在的瓶颈,并考虑了最好的解决方案。我将尽量使这个问题尽可能简单。基本上,我有一个方法可以处理一组双值(std::set)。因此,方法签名类似于: void MyClass::CalculateStuff(const std::set<double> & mySet); void MyClass::CalculateStuff(const std::set&mySet); 代码中有几个地方调用此方法。这些地

我正在做一些性能调整工作。基本上,我已经在我们的代码库中发现了一个潜在的瓶颈,并考虑了最好的解决方案。我将尽量使这个问题尽可能简单。基本上,我有一个方法可以处理一组双值(std::set)。因此,方法签名类似于:

void MyClass::CalculateStuff(const std::set<double> & mySet);
void MyClass::CalculateStuff(const std::set&mySet);
代码中有几个地方调用此方法。这些地方中只有少数地方需要使用这套设备,而其他地方则不关心这套设备。我想我可以创建这个方法的另一个版本,包括这个集合,并修改现有的一个以使用空集合。但是,这会为那些不关心集合的地方带来一些开销(因为它们必须进行额外的方法调用)。因此,我想到的另一个选项是使用指向集合参数的指针,如下所示:

void MyClass::CalculateStuff(const std::set<double> * pMySet);
void MyClass::CalculateStuff(const std::set*pMySet);
指针的有效性将决定我们是否要使用集合(即,为集合参数传递NULL指针意味着我们不做与集合相关的工作)。这会更快,但从接口的角度来看显然不干净。我想我可以对代码进行大量注释


你认为应该怎么做?这可能不是什么大问题,但它让我思考,相对于确保代码仍然干净且易于管理,您应该在多大程度上提高代码的速度(如果性能在应用程序中非常重要的话)。在这种情况下,这条线应该画在哪里?

我做游戏编程。对我来说。当游戏开始落后时,我只担心潜在的瓶颈,然后我会进行分析等等

通过指针传入将更高效,因为指向对象的指针只有4字节。但我建议当你传递空值时。您使用
null ptr
作为定义空指针的当前标准,而不是
null
0


我猜你是在传递一个集合来计算这个类的集合。在这种情况下,重载运算符可能是您的最佳选择?

看起来重载正是您想要的。我不明白你说“然而,这会给那些不关心集合的地方带来一些开销”是什么意思。
boost::optional
是一个可选参数,比
const t*
更有效。有趣。当你说“效果更好”时,你是指清洁度还是性能?明白了。我正在做的任务的本质是将时间缩短到毫秒级。我已经找到了一种方法,使这种方法在某些情况下只需要20毫秒,而不是40毫秒(这是非常关键的代码,在我们的应用程序中必须运行得非常快)。然而,为了实现这一点,我需要传入我引入的这个新的set参数。我只是想在性能和清洁度之间取得平衡。您是否考虑过将其转换为程序集调用来执行您的操作?因为这是在c/c++Zanven中用完选项后获得大毫秒增益的下一步,我知道我们的团队以前已经讨论过这一点。无论如何,走那条路不是我的决定我个人还没有做过汇编,但我的朋友是为他的数学图书馆做的。这显然并不难。只是很难找到最有效的方法。祝你好运:P。