3、C++ Primer 4th 笔记,基本语言相关的概念[2]

简介: 1、数组的维数必须用大于等于1的常量表达式定义:只能包含整形字面值常量,枚举常量,或用常量表达式初始化的整形const对象。 数组下标的类型是size_t,是cstddef中定义的与机器相关的无符号整形。

1、数组的维数必须用大于等于1的常量表达式定义:只能包含整形字面值常量,枚举常量,或用常量表达式初始化的整形const对象。

数组下标的类型是size_t,是cstddef中定义的与机器相关的无符号整形。

C++不允许长度为0的数组变量,但明确指出,调用new动态创建长度为0的数组是合法的。

2、把int型变量赋给指针是非法的,尽管此int型变量的值可能为0。但允许把数值0或在编译时可获得0值的const量赋给指针。

void*:可以指向任何非const对象的指针类型;可以进行的操作有:用作函数形参,返回类型,与其它指针进行比较;但是不允许使用void*指针操作它所指向的对象(不能进行解引用操作)

两个指针相减结果是标准类型ptrdiff_t的数据,是signed整形。

3C++允许计算数组或对象的超出未端的地址,但不允许对此地址进行解引用操作;而计算数组超出未端位置之后或数组之前的地址都是不合法的。

1)指向const对象的指针

const double *cptr;

由于没有办法分辩cptr所指的对象是否为const,所以系统会把它所指的所有对象都视为const

cptr不是const。只是无论cptr指向的是const double,还是非const double,都不可以改变其值。

2const 指针

int *const curErr;

curErr是指向int型对象的const指针。

注意const在有反引用操作符*和没有反引用操作符时的区别。

typedef string* pstring;
const pstring cstr;
类同:
const int i;此时,const修饰的是i,而不是int。

4strlen总是假定其参数字符串以null字符结束(因为函数在计算个数以null认为是结束符),但是计算个数不包括null结束符。

    strncat会把目标字符串的最后一个null结束符覆盖,并且在新串后写入新的结束符。

7C++中,字符串字面值就是C风格字符串,都以null结尾。

8、表达式由一个或多个操作数通过操作符组合而成。仅包含一个字面值常量或变量的表达式是最简单的。如果表达式中没有操作符,结果就是操作数本身。

9、移位操作的右操作数不可以是负数,而且必须严格小于左操作数位数的值;否则,操作结果未定义。

位的操作和使用:1UL<<27等等。

10、赋值表达式的值是左操作数的值,其结果的类型为左操作数的类型。

养成使用前置操作是个好习惯。(++i

11sizeof操作符

sizeof(type_name);
sizeof (expr);
sizepf expr;

12C++中,规定了操作数计算顺序的操作符还有条件(?:)和逗号操作符;除此之外,其它操作符并未指定其操作数的求值顺序。

一个表达式里,不要在两个或更多的子表达式中对同一对象做自增或自减操作。

13、类型名后加()来对动态创建的对象初始化。

int *pi = new int();

14、隐式转换

    while(cin) //cin converted to bool

    如short,unsigned short等一起,如果int可以容纳该类型的所有可能值,则转换成int,否则转换成unsigned int

    表达式中的signed intsigned共存时,signed转化成signed int

    整形数值常量0可转换为任意指针类型。

不将数组转换成指针的例外情况下:&(取地址),sizeof,用数组对数组的引用作初始化。

15、强制类型转换[1,2-P160中文版]

cast-name<type>(expression);

1dynamic_cast 支持运行时类别指针或引用所指向的对象。

2static_cast 编译器隐式执行的任何类型转换都可以由static_cast显式完成。

3reinterpret_cast 通过为操作数的位模式提供较底层的重新编译。

强制类型转换关闭或挂起了正常的类型检查,尽量避免使用。如:

int *ip;

char *pc = reinterpret_cast<char*>(ip);

程序员必须永远记住pc所指向的是真实对象是int型,而非字符数组,任何假设pc为普通字符指针的应用,都有可能带来运行时错误。如

string str(pc); //有怪异行为

此外,旧式强制类型转换依赖于所涉及的数据类型,具有与上面三种显式转换一样的形为;编译器根据实际情况应用相关合适的转换。

int ival; double dval;
ival += int (dval); // static_cast: converts double to int
const char* pc_str;
string_copy((char*)pc_str); // const_cast: casts away const
int *ip;
char *pc = (char*)ip; // reinterpret_cast: treats int* as char*

15、结合性:决定同一优先级的操作符如何结合;

优先级:决定复合表达式中不同操作符的结合方式。

参考

[1] 进一步了解显式类型转换

http://blog.163.com/zhoumhan_0351/blog/static/39954227201031695850264/

[2] C++ Primer 4th

目录
相关文章
|
9月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
132 2
|
2月前
|
存储 负载均衡 算法
基于 C++ 语言的迪杰斯特拉算法在局域网计算机管理中的应用剖析
在局域网计算机管理中,迪杰斯特拉算法用于优化网络路径、分配资源和定位故障节点,确保高效稳定的网络环境。该算法通过计算最短路径,提升数据传输速率与稳定性,实现负载均衡并快速排除故障。C++代码示例展示了其在网络模拟中的应用,为企业信息化建设提供有力支持。
85 15
|
2月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
54 8
|
2月前
|
存储 编译器 C++
【c++】多态(多态的概念及实现、虚函数重写、纯虚函数和抽象类、虚函数表、多态的实现过程)
本文介绍了面向对象编程中的多态特性,涵盖其概念、实现条件及原理。多态指“一个接口,多种实现”,通过基类指针或引用来调用不同派生类的重写虚函数,实现运行时多态。文中详细解释了虚函数、虚函数表(vtable)、纯虚函数与抽象类的概念,并通过代码示例展示了多态的具体应用。此外,还讨论了动态绑定和静态绑定的区别,帮助读者深入理解多态机制。最后总结了多态在编程中的重要性和应用场景。 文章结构清晰,从基础到深入,适合初学者和有一定基础的开发者学习。如果你觉得内容有帮助,请点赞支持。 ❤❤❤
250 0
|
9月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
138 0
|
7月前
|
算法 C++
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
2022年第十三届蓝桥杯大赛C/C++语言B组省赛题解
187 5
|
7月前
|
存储 编译器 C语言
深入计算机语言之C++:类与对象(上)
深入计算机语言之C++:类与对象(上)
|
7月前
|
存储 分布式计算 编译器
深入计算机语言之C++:C到C++的过度-2
深入计算机语言之C++:C到C++的过度-2
|
7月前
|
编译器 Linux C语言
深入计算机语言之C++:C到C++的过度-1
深入计算机语言之C++:C到C++的过度-1
|
7月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
61 0

热门文章

最新文章