C++ primer | 第四章 表达式

本文详细介绍了C++中的各类运算符,包括算数运算符、逻辑和关系运算符、赋值运算符等,并探讨了运算符重载的概念及其应用。

表达式 expression 由一个或者多个运算对象operand组成

4.1 基础

重载运算符 overloaded operator 当运算符作用于类类型的运算对象时,用户可以自定义其含义,自定义的过程相当于为已存在的运算符赋予了另外一种含义,所以成为重载运算符。
表达式分为左值和右值,右值不能在赋值语句中的左侧。
c++中,对象被用作左值的时候用的是他的位置,用作右值的时候是用的内容(值)。右值不能替代左值。
要注意,如果在改变了某个运算对象的值,在表达式的其他地方不要使用这个运算对象。

4.2 算数运算符

m%n// 求余数 参与运算的必须是整数,且其符号与m相同
42 % 3.12;//错误! 
//m%(-n)等于m%n
//(-m)%n等于-(m%n)
//除法运算中一律向0取整!!!也就是直接切除小数部分

算数运算符的运算对象和求值结果都是右值
但是要注意布尔值不参与运算

bool b=true;
bool b2=-b; //b2是true!!!因为首先运算时会被提升为1,1取负值后的结果是-1,所以得到的结果依然是true

4.3逻辑和关系运算符

逻辑与或者逻辑或运算符只有当左侧不能确定结果时才会计算右侧的运算结果,所以有时左侧运算是为了确保右侧的运算对象求值过程中的正确性和安全性

4.4 赋值运算

注意初始化不是赋值,c++11中允许使用初始值列表作为赋值语句的运算对象,但是初始化列表会窄化转换,更加严格

int k=0;
k=3.14;//right k=3
k={3.14};// 错误! 窄化转换
//赋值运算满足右结合律
int ival,*pval;
ival=pval=0;//ival不能被赋于指针的值(int*不能被转换为int),尽管0可以被赋值给任何对象但是这里仍然是非法的

另外,赋值运算的优先级较低,一般先加括号

4.5 递增或者递减运算

int i=0,j;
j=++i;//j=1.i=1
j=i++;//j=1;i=2 注意哦!所以建议,除非必须,不要使用后置版本

这里插播一条广告

while (beg!=s.end() && !isspace(*beg)
    *beg = toupper(*beg++);// 错误, 该赋值语句未定义,两端都用到了beg,右侧运算对象还改变了beg的值!注意运算对象可按任意顺序求值

4.6 成员访问运算符

箭头运算符与点运算符都可以访问成员

ptr->men等价于(*ptr).men//注意加括号哦 箭头作用于一个指针类型的运算对象,返回的是一个左值左值左值左值左值,但是点运算取决于成员的属性

4.7 条件运算符

?:

cond?expr1:expr2;//首先如果cond为真,求expr1否则expr2
//也可以嵌套,嵌套的时候书写顺序不需要用括号,但是可读性受到了影响
finalgrade=(grade>90)?"high pass"
                    :(grade>60)?"fail":"pase";

4.8 位运算

<<在之前io库中的重载版本已经看过了,这里时位移运算符
另外还有 位与 位或 位异或 (^两个对象的对应位置只有一个为1,则为1)
注意区别
& &&
| ||
~ !
使用位运算符时要善于使用&=及|=

1UL<<27     //注意这里UL表示无符号长整型,有32位,位移之后得到的值的第27位为1

4.9 sizeof

sizeof (type)
sizeof expr
返回表达式或者一个类型名字所占的字节数,返回类型时size_t

sizeof(ia)/size(*ia)//返回数组ia的数量

4.11 类型转换

尽量不要使用强制转换

4.11.1 算数转换 arithmetic conversion

整型提升 intergral promotion
首先进行整型提升,比如char转换为int
然后如果无符号类型不小于有符号类型就会转化为无符号类型,并且会有副作用的可能。
如果无符号的小于有符号的,且无符号的可以储存再带符号中那么就会转换成有符号类型,如果不能就转化为无符号类型、

4.11.2 其他隐式类型

int ia[10];
int * ip=ia;//ia 转换成指向首元素的指针
while (*cp){}//如果*cp不是空字符,为真
if (cp)//如果cp不是0,为真

4.11.3 显式转换

int i,j;
double slope =i/j; 也叫做cast 强制类型转换
这种方法本质上是十分危险的
另外还有命名的强制类型转换 cast-name<type>(expression)

总结

【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析与p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个流程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员与工程技术人员,尤其适合从事结构设计、力学仿真与多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理与编程实现;③服务于科研复现、论文写与工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论与优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建与p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
下载前必看:https://pan.quark.cn/s/9f13b242f4b9 Android 平板设备远程操控个人计算机的指南 Android 平板设备远程操控个人计算机的指南详细阐述了如何运用 Splashtop Remote 应用程序达成 Android 平板设备对个人计算机的远程操控。 该指南被划分为四个环节:首先,在个人计算机上获取并部署 Splashtop Remote 应用程序,并设定客户端密码;其次,在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,并与之建立连接至个人计算机的通道;再次,在 Splashtop Remote 应用程序中识别已部署个人计算机端软件的设备;最后,运用平板设备对个人计算机实施远程操控。 关键点1:Splashtop Remote 应用程序的部署与配置* 在个人计算机上获取并部署 Splashtop Remote 应用程序,可通过官方网站或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码在平板控制计算机时用验证,密码长度至少为8个字符,且需包含字母与数字。 * 在配置选项中,能够设定是否在设备启动时自动运行客户端,以及进行互联网搜索设置。 关键点2:Splashtop Remote 应用程序的 Android 版本获取与部署* 在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,可通过 Google Play Store 或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码用于连接至个人计算机端软件。 关键点3:运用 Splashtop Remote 远程操控个人计算机* 在 Splashtop Remote 应用程序中识别...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值