扩展精度浮点数,10位有效数字
初始化的几种不同形式,其中用花括号来初始化变量称为列表初始化;
比如:
int i = 0;
int i = {0};
int i{0};
int i(0);
需要注意的是,当用于内置类型的变量时,这种初始化形式有一个重要的特点:如果我们使用初始化且初始值存在丢失信息的风险,则编译器报错;
例如:
long double ld = 3.1414141414;
int a{ld}, b = {ld}; //报错
int c(ld), d = ld; //正确
cout << "a:" << a << "b:" << b << "c:" << c << "d" << d << endl;
运行的时候,a,b则会提示报错信息:error: type ‘long double‘ cannot be narrowed to ‘int‘ in initializer list [-Wc++11-narrowing],这是因为使用long double的值初始化int变量时可能会丢失数据,所以拒绝a和b的初始化请求;虽然c,d虽然没有报错,但是确实丢失了数据;
[这是为什么?]
有几种生成空指针的方法:
int *p1 = nullptr; // 等价于int *p1 = 0;
int *p2 = 0;
int *p3 = NULL; // 等价于int *p3 = 0;
在新标准下,建议尽量使用新标准nullptr,nullptr是一种特殊类型的字面值,它可以被转换成任意其它的指针类型,虽然其它的方式也是可以的;
将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量表达式;
声明为constexpr的变量一定是一个常量,而且必须用常量表达式来初始化,比如说下面的情况则是不正确的:
int t = 10;
constexpr int q = t + 20;
cout << "q" << q << endl;
需要将t声明为 const
才是正确的;
一般来说,如果你认定变量是一个常量表达式,那就把它声明为constexpr类型;
使用类型别名可以使复杂的类型名字变得更简单明了,易于理解和使用;
现在有两种方法可以用来定义类型别名,一种是 typedef
,另一种则是新标准中的 using
原文:https://www.cnblogs.com/dwx-bzdcxy/p/14733377.html