auto a =5U;
// unsigned int a = 5;
auto b =5L;
// long b = 5;
auto c =5LL;
// long long c = 5;
auto d =5.0F;
// float d = 5.0;
auto e =5.0L;
// long double e = 5.0;
列表初始化
/*
* 变量初始化的几种方式
*/TEST_F(Chapter2Test, Init) {
int a =10;
int b = {10};
int c{10};
intd(10);
EXPECT_EQ(a, 10) <<"不可能吧, a居然不是10, 而是"<< a;
EXPECT_EQ(b, 10);
EXPECT_EQ(c, 10);
EXPECT_EQ(d, 10);
longdouble pi =3.14159265L;
// 这个会报错, 因为不能将 long double 转换为 int, 会存在丢失信息的风险
// int e{pi};
// 这个不会报错, 它会忽略 转换带来的丢失信息的风险, 进行转换; 但是还是会有 Clang-Tidy 的告警的
// Clang-Tidy: Narrowing conversion from 'long double' to 'int'
intf(pi);
EXPECT_EQ(f, 3) <<"不可能吧, f居然不是3, 而是"<< f;
int o =1;
longg(o);
long h{o};
EXPECT_EQ(g, 1L);
EXPECT_EQ(h, 1L);
// 总结
// {} 初始化数据, 如果发生转换, 会进行转换丢失信息(精度)风险判断, 如果有风险, 就不会进行转换(编译失败)
// {} 初始化的方法,仅被最新的C++11标准支持,有个专门的术语:initializer-list; 这种方法没有使用构造函数
// () 初始化数据, 不会检查是否因为转换导致可能丢失数据
// () 其实是调用了类型的构造函数进行的初始化
}