C++真他妈复杂

栏目: C++ · 发布时间: 5年前

内容简介:先讲C++基本类型吧,字符串就有两种,C++的bool可以取值true或false,true、false都是关键字。但是int也可以直接赋值给bool,难道bool是int的派生类型?

基本类型

先讲C++基本类型吧,字符串就有两种, std::stringchar* ,有人说char*是C时代的产物,在C++里用std::string就好。那main函数的第二个参数还是必须为 char*[] ,而且字符串字面值”hello”的类型是char*,经常不能直接传给string。

C++的bool可以取值true或false,true、false都是关键字。但是int也可以直接赋值给bool,难道bool是int的派生类型? std::cout << true ,结果为1,似乎bool和int可以相互转化,令人困惑。比较起来,Java需要强制类型转换才能把bool变成int,说明bool和int是两种独立类型。JavaScript console.log(true) 输出的是true,说明bool是一种原始类型。

string.find() 返回类型是 size_t ,但可以赋值给int,那为什么不直接是int(原因省略),不直观。Java、C#就是返回int或long,非常一致。

数组

C++的数组,既可以看成数组,又可以看成指针,这种“波粒二象性”令人困扰。

复杂类型

C++可以对一个类型取引用、取指针。比如int指针类型定义为 int*p=&a ,这里把变量a取地址,赋给指针p。int引用定义为int&p=a。同一个&符号,在左边在右边意思不一样!而且,*前后有没有空格都没有关系。我个人觉得 int* p 表示p是int*类型,然而大部分人似乎写成 int *p ,看起来*就像是对p的运算符。

C++可以声明变量或参数为const,而且经常不得不用const。比如 char* c_arguments[] = { "hi","bye" } 就会出错, const char* c_arguments[] = { "hi","bye" } 才可以。在 Java 、C#里,final、const基本上是加强自我约束的东西,编译器不会逼着你写。

取引用、取指针、数组、const,合起来可以写非常复杂的复杂类型,比如 char*(*arr[10])(int*&p); ,读作arr是一个有10个成员的数组,成员类型为指针,指针指向一个函数,该函数的参数的名称为p,类型为int的指针的引用,函数返回值为char引用。复杂类型的读法是左右散开的方式。类似的东西,用C#来写就是 func<int,char[]>[] arr ,简洁易懂。类型在左边,变量名在右边。不需要也不允许指定那个函数参数的名称。

函数调用

C++要求函数定义必须出现在函数调用之前。如果这个规定是强制的,也就算了,因为Bash、JavaScript都是这种要求。好死不死,C++还有个函数声明的概念,其实只要函数声明在函数调用之前就可以了,因为这个,就出现了所谓头文件(.h)的东西,头文件里只写声明,cpp文件里写定义。

函数也可以有指针,这样操作就很烦了。

面向对象

有两种访问成员运算符, .-> 。如果变量是指针,就要用->。实际上,也可以用 (*pt).member 。这样凭空多出来一个->运算符。


以上所述就是小编给大家介绍的《C++真他妈复杂》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

More Effective C++(中文版)

More Effective C++(中文版)

梅耶(Scott Meyers) / 侯捷 / 电子工业出版社 / 2011-1-1 / 59.00元

《More Effective C++:35个改善编程与设计的有效方法(中文版)》是梅耶尔大师Effective三部曲之一。继Effective C++之后,Scott Meyers于1996推出这本《More Effective C++(35个改善编程与设计的有效方法)》“续集”。条款变得比较少,页数倒是多了一些,原因是这次选材比“一集”更高阶,尤其是第5章。Meyers将此章命名为技术(tec......一起来看看 《More Effective C++(中文版)》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具