'int i = 0' 与 'int i(0)' 在 'for' 循环中(分配与初始化计数变量)

'int i = 0' vs. 'int i(0)' in a 'for' loop (assigning vs initializing the count variable)

我在教科书和论坛上看到很多代码,人们在 for 循环中的初始化代码中使用赋值运算符来开始重复。例如,

for ( int i = 0; i < 5; ++i )   // common 
for ( int i(0);  i < 5; ++i ) // uncommon 

我知道初始化变量比赋值更快。为什么人们更喜欢前者而不是后者?

int i = 0;int i(0); 都在 C++ 中声明、定义和初始化一个值为 0int 对象。它们是严格等价的,两个循环结构也是如此。请注意,在 C 中,int i(0); 不是允许的结构。

您提到的两种初始化形式是:-

T t = u;     _1
T t(u);      _2

_1

可能涉及两次通话。一种是转换构造函数,另一种是复制构造函数。尽管大多数编译器可以省略复制构造。

_2

这只需要调用一次转换构造函数

因此,_2 优于 _1。至于内置类型,不会有太大区别。

在C语言中,必须先定义变量,然后再初始化。要执行 for 循环,您需要在函数开头定义变量,然后才写 for( i=0 ; i<5 ; ++i )。所以,经常使用这种语言的人可能不习惯这种类型的赋值,可能在 C++ 中,或者只是不想让可能的初学者读者感到困惑。

但是,在 C++ 中,使用 for( int i=0 ; i<5 ; ++i )for ( int i(0); i < 5; ++i ) 是相同的,因为在这两种情况下,变量都是在循环的第一次迭代之前创建的。

你可以这样写:

int i(5);

int i{5};

int i=5;

所有这些都是初始化,而不是赋值。 *他们并没有什么不同。