c++ - 在 C++ 'for' 循环中声明用户定义的类类型

标签 c++ loops for-loop variable-declaration

以下是与在 for 循环中声明内置类型变量相关的问题:

但我想缩小这个主题的范围,并询问有关声明用户定义的类类型变量的问题,这些变量是继承的或使用组合创建的,并且具有具有动态内存分配/取消分配(新/删除)的非平凡构造函数/析构函数。

a)  int count = 0;
    while(count < 1000000)
    {
        myClass myObj = some value;
        ++count;
    }

b)  int count = 0;
    myClass myObj;
    while(count < 1000000)
    {
        myObj = some value;
        ++count;
    }

c)  {
        int count = 0;
        myClass myObj;
        while(count < 1000000)
        {
            myObj = some value;
            ++count;
        }
    }
  1. 如果我必须在循环内使用用户定义的类变量(这是最佳做法),是在循环内还是在循环外声明它?

如果它将在循环内声明,构造函数和析构函数链将在每次迭代中调用,但我们将具有受限范围 (a) 的优势。

如果我们在循环外声明了一个变量,每次迭代只会调用赋值运算符,但是这个变量可以在循环范围外访问 (b)。

  1. 编译器是否足够聪明,可以将复杂数据类型声明优化为循环局部变量?内存分配是否发生一次,然后在每次迭代中重复使用相同的空间?

  2. 如果最佳实践是在循环外声明变量,将循环放在范围内以限制范围 (C) 是否是个好主意?

最佳答案

如果你想在循环后立即销毁一个变量,你可以用一个额外的范围来封闭循环。这将限制对象的范围并消除多次构造和销毁的开销。

{
    Object object;
    for (int i = 0; i < 100000; ++i) {
        // ....
    }
} // 'object' will be destroyed

关于c++ - 在 C++ 'for' 循环中声明用户定义的类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31399479/

相关文章:

c++ - 集成 C 和 C++ 程序

c++ - 处理标准一维数组时忽略前导空格

Java 为新连接重新打开 ServerSocket

c++ - AT^SYSINFO 和 C++ 终端程序

c++ - 为什么这段代码没有收缩转换,导致错误?

python - 以有效的方式从列表中消除特定元素的函数

c++ - 循环 - 存储数据或重新计算

Python 3.4 : creating an asterisk diamond

java - 从java中具有多个循环的方法返回单个字符串

java - for 循环计算用户数量