int *p = a
,decltype(*p)
类型是int&
,decltype(&p)
类型是int**
数组隐式转换为指针
int ia[10];
int *ip = ia; //ia转换为指向数组首地址的元素
sizeof (type)
orsizeof expr
- 对char或者char的表达式 :大小是1
- 被引用对象:被引用对象所占空间大小
- 指针:指针本身大小
- 解引用指针:指向对象类型的大小,指针不需要有效
- 数组:整个数组所占空间大小
- string 或者 vector对象:元素个数
整型提升:小整数(char bool short等)–>大整数(int)。有符号–>无符号
显示转换:
static_cast
,不包含底层const;const_cast
,只能改变运算对象的底层const。不建议使用显示转换
double slope = static_cast<double>(j)/i;
const char *pc;
char *p = const_cast<char*>(pc); //但是通过p写值是未定义的
下表列出 C++ 运算符的优先级和结合性。运算符从顶到底以降序列出。
try
,catch
,throw
:try
语句块内声明的变量在块外部无法访问,在catch
子句内也无法访问
while(1){
try{
if(a != b)
throw runtime_error("data must be same");
} catch(runtime_error err){ //保证了程序出问题后,找到问题,仍能继续进行,不会中断
cout << err.what();
cout << "try again";
}
}
<stdexcept>
中定义了几种常用的异常类。what
返回的内容与异常类型有关。如果有初始化字符串,则返回该字符串。否则,由编译器决定
exception
runtime_error
range_error
overflow_error
underflow_error
logic_error
domain_error
invalid_argument
length_error
out_of_range