gpt4 book ai didi

c++ - 为什么我需要在使用它的循环的每次迭代中清除 stringstream 变量

转载 作者:太空宇宙 更新时间:2023-11-04 16:01:21 24 4
gpt4 key购买 nike

在我的学校,我们必须遵循一种风格指南,该指南规定我们必须在使用它的函数顶部声明每个变量,而不是在使用它之前。这通常意味着您必须在循环内使用变量时重置或清除变量,因为它们未在该循环内声明。我不明白为什么每次循环迭代都需要“清除”stringstream 变量,并希望有人能阐明这一点。我知道如何清除它只是想知道为什么它是必要的。

最佳答案

这背后的基本原理是在循环内创建 对象会导致性能下降。 ::std::stringstream 是这些对象之一,一直创建和销毁字符串流是一个常见的错误。然而,这样的规则不适用于 light 对象,例如基本类型。

考虑 test case :

#include <chrono>
#include <sstream>
#include <iostream>
#include <cstdlib>

int main()
{
using namespace std;
using namespace chrono;

auto const loops_count{1000000};
auto const p1{high_resolution_clock::now()};
{
stringstream ss{};
for(auto i{loops_count}; 0 != i; --i)
{
ss.str(string{}); // clear
ss << 1;
}
}
auto const p2{high_resolution_clock::now()};
{
for(auto i{loops_count}; 0 != i; --i)
{
stringstream ss{}; // recreate
ss << 1;
}
}
auto const p3{high_resolution_clock::now()};
cout << duration_cast< milliseconds >(p2 - p1).count() << "ms "
<< duration_cast< milliseconds >(p3 - p2).count() << "ms"
<< endl;
return EXIT_SUCCESS;
}

第一个循环 35ms,第二个 431ms

关于c++ - 为什么我需要在使用它的循环的每次迭代中清除 stringstream 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440324/

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