Java程序员的C++回归路 (6)

c语言中的字符串示例:

const char ca1[] = "Hello";
const char ca2[] = "World";
if(ca1 < ca2)  // undifined comparison。由于实际上是指向不同对象的两个指针做比较

c语言字符串和c++字符串之间的互相使用:

可以使用c语言中的null itermiated char数组,用于初始化字符串

可以将c语言中的字符串用作操作数

c++中提供c_str()成员函数,用string初始化char[]

第4章:表达式 基础

左值和右值

一个左值表达式的求值结果是一个对象或者一个函数。

当一个对象被用作右值时,使用的是对象的值,当一个对象用作左值时,使用的是对象的地址(在内存中的位置)

值溢出


   short short_value = 32767; // max value
   short_value ++;
   std::cout << "short_value:" << short_value << std::endl;  // 发生了溢出,不同的系统上结果可能不一样(设置可能直接崩溃),值得记录的是,java的现象跟c++是一致的。运行结果是-32768

c++中支持使用:not来作为非条件。

第5章: Statement 第6章: 函数 try 块

如果抛出了异常而且没有合适的catch处理,则最终执行terminate函数,具体的处理方法与系统相关

参数

const参数

在函数定义时,使用const和不使用const是一样的,因为使用const,顶层的const会被忽略掉。

关于const指针、引用参数的一些例子:

int i = 42;
const int *cp = &i; //正确,但是不能用cp改变i的值
const int &r = i; //正确,但是不能用r修改i的值
const int &r2 = 42;  //正确,指向常量
int *p = cp;  // 错误,指针类型不匹配
int &r3 = r;  // 错误,类型不匹配
int &r4 = 42;  // 错误,不能指向常量

可变形参的函数

c++支持initializer_list形参,支持同种类型不同个数的参数

同时支持可变长参数,但是一般仅仅用于和c语言交互的接口,因为很多对象不能正常的拷贝。

不要返回局部对象的引用或指针,否则将指向不可用的地址空间或对象

返回数组指针

int *p[10] :10个指针的数组

int (*p)[10]:一个指针,指向10个整数数组

返回数组指针的方式:

typedef

声明一个返回数组指针的函数

使用尾指针返回类型(auto func(int i)-> int(*)[10])

使用decltype

引用与之类似

调试帮助

Assert 宏

assert由preprocessor处理而不是编译器,所以使用assert时是直接使用。

NDEBUG预处理变量

当使用

#define NDEBUG

在文件开始处时,代码中的assert将不起作用,同时也可以在命令行中使用-D NDEBUG来设置。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzpps.html