P58 constexpr 和常量表达式
常量表达式 是指值不会改变 并且 在编译过程 就能得到计算结果的表达式;
字面值属于常量表达式;
用常量表示式初始化的const对象 也是常量表达式;
constexpr变量
C++11:允许将变量声明为constexpr类型以便 由编译器来验证变量的值是否是一个常量表达式;
一般来说,如果你认定变量是一个常量表达式,那就把它声明成constexpr类型;
P214 constexpr函数:是指能用于常量表达式的函数
- 函数的返回值类型及所有形参的类型都得是 字面值类型;
- 函数体中必须有且只有一条return语句.
constexpr函数不一定返回常量表达式!!!
P62 decltype 类型说明符
C++11:decltype的作用是选择并返回操作数的数据类型;
decltype( f() ) sum = x; //sum的类型就是函数f的返回类型;
decltype 与 引用:
切记:decltype( (variable) ) 双层括号,结果永远是引用
// decltype的结果可以是引用; int i =23, *p = &i , &r = i; decltype (r+0) b; // r+0 结果是一个int;√ decltype (*P) c; // 错误!!! //如果表达式内容为 解引用操作,则decltype 将得到一个引用类型,引用类型必须初始化;
P109 C风格字符串
char *p = "abcdef"; //空字符‘\0‘结尾;
C标准库的String函数
// C风格字符串的函数 // #include <cstring> strlen(p) 返回p的长度,空字符不计算在内; strcmp(p1,p2) 比较p1,p2是否相等:若p1=p2,返回0,p1>p2,返回正值,p1<p2,返回负值 strcat(p1,p2) 将p2附加到p1之后,返回p1; strcpy(p1,p2) 将p2拷贝给p1,返回p1;
与旧代码的接口
string s("hello world!");
- 允许使用以空字符结束的字符数组来初始化string对象,或为string对象赋值;
- 在string对象的加法运算中,允许以空字符结束的字符数组作为其中一个运算对象(不能都是);
- 不能用string对象直接初始化指向字符的指针;
- 但使用string专门提供的 c_str 成员函数可以完成该功能;
char *str = s; //error! 不能用string对象初始化 char*; const char *str = s.c_str(); // 正确!!!
时间: 2024-10-14 18:08:53