这不是我第一次遇到代码内部存在依赖于外部环境的循环的情况。
例如:
bool is_sqrt;
std::cin >> is_sqrt;
for(auto &i : vector)
{
do_smth_1(i);
//...
do_smth_n(i);
if(is_sqrt)
std::cout << std::sqrt(i);
else
std::cout << i * i;
do_smth(i);
}
很明显,你可以简单地将条件移到循环之外,只需在循环中写一个替代方案即可else
:
if(is_sqrt) for(auto &i : vector)
{
do_smth_1(i);
//...
do_smth_n(i);
std::cout << std::sqrt(i);
do_smth(i);
}
else for(auto &i : vector)
{
do_smth_1(i);
//...
do_smth_n(i);
std::cout << i * i;
do_smth(i);
}
一段时间后,代码会增长,错误开始出现,因为需要复制代码(而复制本身也同样令人困惑)。我看到使用std::function
/*function
作为解决方案,但显然这两种方法在性能方面都比代码复制更差。实际上,我并不需要这种速度差异,这个问题只是出于兴趣。
如果 C++ 中没有解决这种情况的方法,也许有人在其他语言中见过这种情况?看看会很有趣。