- 主题:从一段代码看编译器优化带来的编程挑战
例子来自于当前一个大型项目。简化起见,代码原理大概是下面的样子。
std::vector<int> test_re(int a)
{
std::vector<int> result;
if (a < 0)
{
return result;
}
result.push_back(a*100);
result.push_back(a*200);
}
int main()
{
auto a = test_re(10);
std::cout << "a.size() = "<<a.size() << std::endl;
}
这段代码运行的很好,也没啥问题。直到有一天,由于某种功能变化,有人把a提前声明了。然后系统就崩了。
本着谁修改就是谁的问题,开发人员懵逼了很久,直到看了test_re的源码.....
--
修改:foliver FROM 124.77.82.*
FROM 124.77.82.*
原来的代码,这个编译器直接启用了rvo优化,result实际上被调用着直接替代了。所以一切正常。
【 在 ArchLinux 的大作中提到: 】
: 这个test_re怎么最后没返回东西?
:
: 【 在 foliver 的大作中提到: 】
: ...................
--来自微水木3.5.10
--
FROM 124.77.82.*
result是return的,一开始就判断了。
【 在 z16166 的大作中提到: 】
: 这个函数没有写要return哪个变量或者常量,咋可能是RVO优化
:
: 【 在 foliver 的大作中提到: 】
: ...................
--来自微水木3.5.10
--
FROM 117.136.120.*