Wan*_*uta 19 c c++ optimization complexity-theory
C和C++编译器通常会优化与函数的比较吗?
例如,这个页面表明sizeC++中std :: lists上的函数在某些标准库实现中可能具有线性复杂度O(N)(这对于链表是有意义的).
但在这种情况下,如果myList是一个巨大的列表,这样的事情会怎么样?
if (myList.size() < 5) return 1;
else return 2;
Run Code Online (Sandbox Code Playgroud)
size()函数会查找并计算所有N个列表成员,还是会在找到5个成员后优化为短路?
Jon*_*Jon 15
理论上存在size()内联的可能性,但是要执行编译器必须进行的优化
这是恕我直言的一大堆事情,它包含的功能在其他环境中并非"明显有用".请记住,编译器供应商的资源有限,因此必须有充分的理由来实现这些先决条件,并让编译器将所有部分组合在一起以优化这种情况.
即使这是一个针对某人的性能问题,问题可以在代码中轻松解决,我觉得不会有这样的理由.所以不,通常你不应该期望这样的情况得到优化.
Luc*_*ore 11
实际上,在C++ 11中,std::list经过优化并size()在恒定时间内返回.
对于C++ 03,size()确实在线性时间内运行,因为它需要每次都计算元素.
size()函数会查找并计算所有N个列表成员,还是会在找到5个成员后优化为短路?
从未见过这种优化在实践中发生.虽然它肯定是合法的,但我怀疑是否有任何编译器实际上实现了这样的东西.