C++如何在循环中声明"complex"对象?



编辑:如@HolyBlackCat所述"如果你需要它在迭代之间保持它的[变量的]值,它必须保持在外部"当然,即使是原始类型也是如此,例如int。所以这个问题实际上只是噪音,对不起

我试图弄清楚在声明对象时如何保持一致;在循环内部还是外部声明变量"仅在循环中使用的变量的问题。参见例如,在循环中声明变量,好的做法还是坏的做法?。

请考虑以下示例。设V是一个具有默认构造函数的对象。

// Example 1
std::vector<int> V;               // Works as intended
for (int i=0; i<2; i++) {         // ...but V should be declared inside loop(?)
V.push_back(i);
// V used only inside loop
}                                 
// Example 2 
for (int i=0; i<2; i++) {         // OK Syntax, Wrong Semantics
std::vector<int> V;           // V is "created" anew in each loop-step
V.push_back(i);
// V used only inside loop         
}
// Example 3
for (int i=0; i<2; i++) {         // Syntax Error, other syntax possible?
std::vector<int> V.push_back(i);
// V used only inside loop 
}

示例1:定义我想要的近似语义——此外,V是循环的局部,我更喜欢在循环中定义V。

示例2:在循环中定义V,但也在每个循环步骤中重新创建它,这不是所需的语义。

实例3:";不错的尝试"语法探索-我试图声明和";立即使用";对象V。这是非法语法。

如果在一天结束时,许多类型的对象都在循环外声明得最优雅(就像本例中V的情况一样;否则,如果在循环内声明,则声明必须以某种方式"保护"(,那么我可能会倾向于声明循环外的所有对象,就在循环之前,而不是循环内。。。

请就这个问题给我建议,如何获得示例1的语义,但在循环中声明V(如果可能的话(。

是的,您可以这样做:

std::vector<int> V{i}; 

其在向量CCD_ 1被声明时用值CCD_。


另一方面,您的两个循环实际上都没有做任何有用的事情。您每次都在循环中重新定义V,因此以前的push_backs不可见。此外,Vfor循环的范围之外是不可用的。

看起来你想做的是用计数填充一个向量。简单的方法是:

std::vector<int> V(2);
std::iota(V.begin(), V.end(), 0);

您每次都试图声明一个新的向量,并且在声明时直接使用push_back,这是不可能的,即语句:

是否可以在相同的声明语句中声明并立即使用对象V

不正确。

相关内容

  • 没有找到相关文章

最新更新