#include <iostream>
using namespace std;
int main()
{
int i1 = 1;
int i2(1);
int i3 = {1};
int i4{1};
auto i5 = 1; // int i5 = 1;
auto i6(1); // int i6(1);
auto i7 = {1}; // initializer_list<int> i7 = {1};
auto i8{1}; // int i8{1};
cout << i1 << endl;
cout << i2 << endl;
cout << i3 << endl;
cout << i4 << endl;
cout << i5 << endl;
cout << i6 << endl;
for(int i77 : i7) cout << i77 << endl;
cout << i8 << endl;
}
代码说明
- i1 i2 的初始化采用了C++传统的初始化形式。i1 所采用的是带等号的拷贝初始化,而i2所采用的是小括号的直接初始化。
- i3 i4 的初始化采用了C++11新引入的统一初始化形式,即使用大括号进行初始化。使用大括号同样可以进行拷贝初始化和直接初始化。
- i5 i6 i7 i8 的初始化采用了C++11新引入的类型自动推导,即使用auto关键字自动推导变量的类型。
- i7 i8 的初始化同时采用了统一初始化形式和类型自动推导,但结果有所不同。
C++17标准规定同时使用大括号和auto时,如果采用直接初始化,则变量将被推导为单个类型。如果采用拷贝初始化,则变量将被推导为初始化列表类型。