首页 > 代码库 > C++ primer 第一部分C++基础(1-7章) 不熟悉的知识点 小结

C++ primer 第一部分C++基础(1-7章) 不熟悉的知识点 小结

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();    // 正确!!!

 

C++ primer 第一部分C++基础(1-7章) 不熟悉的知识点 小结