'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++ 中声明、定义和初始化一个值为 0
的 int
对象。它们是严格等价的,两个循环结构也是如此。请注意,在 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;
所有这些都是初始化,而不是赋值。
*他们并没有什么不同。
我在教科书和论坛上看到很多代码,人们在 for
循环中的初始化代码中使用赋值运算符来开始重复。例如,
for ( int i = 0; i < 5; ++i ) // common
for ( int i(0); i < 5; ++i ) // uncommon
我知道初始化变量比赋值更快。为什么人们更喜欢前者而不是后者?
int i = 0;
和 int i(0);
都在 C++ 中声明、定义和初始化一个值为 0
的 int
对象。它们是严格等价的,两个循环结构也是如此。请注意,在 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;
所有这些都是初始化,而不是赋值。 *他们并没有什么不同。