[C++ 面试基础知识总结]表达式和函数
2023-09-14 09:04:37 时间
最终得到b2值为true,原因在于bool值不能直接进行算数运算,需要转化成int,-b的结果是-1,不等于0,所以b2的值为真。
C++11新标准则规定商一律向0取整,所以-(m)/n和m/(-n)都等于-(m/n),m%(-n)等于m%n,(-m)%n等价于-(m%n)。
-21/ -8 // 根据商向0取整的原则,结果为2 -21% -8 // 由于商为2,余数为(-21-(-8)*2)=-5 21/ -5 // 根据商向0取整的原则,结果为-4 21% -5 // 由于商为-4,余数为(21-(-5)*(-4))=1逻辑运算符
和||都是短路求值,仅当左侧运算对象无法确定表示结果时才会计算右侧运算对象。
#include iostream int _tmain(int argc, _TCHAR* argv[]) auto i = 0; if (++i == 1 || ++i == 0) cout i endl; return 0; }
输出结果为1,因为执行++i == 1后,已经可以判定整个表达式为真了,不用再去计算右侧运算对象了,++i == 0没有执行,所以只对i进行了一次递增操作。
强制转换类型static_cast可以进行不包含底层const的类型转换,const_cast 只能改变运算对象的底层const。
const char *p; static_cast char*p // 错误,不能用static_cast转换掉const const_cast char*p // 正确,const_cast去掉了const属性 static_cast string // 正确,字符串字面值转换成string类型 const_cast string // 错误,const_cast只能改变常量属性
数组是无法拷贝的,所以我们为函数传递一个数组时,实际上传递的是指向数组首元素的指针。函数也不能返回数组,只能返回数组的指针或引用。
//以下两个函数是等价的 void print(const int*); void print(const int[]); //以下两个函数是等价的 void print(int (*a)[]); void print(int a[][]);
// 返回一个有10个元素的整型数组的指针,函数有一个int类型的形参i int (*func(int i))[10]; // C++11的尾置返回类型写法,与上述声明等价 auto func(int i) - int(*)[10]; // C++11中可用decltype,需要注意decltype并不负责把数组转化成指针,需要在声明函数的时候加一个* int a[10]; decltype(a) *func(int i);不能返回局部函数的指针和引用
局部对象在函数完成后,它所占的的存储空间也随之被释放掉,因此,函数终止意味着局部变量的指针或引用将指向不再有效的内存区域。
const string func(){ string ret; if (!ret.empty()) return ret; else return "Empty"; }
两个返回都是错误的,试图返回局部变量或局部临时值的引用。
重载函数名字和返回类型相同,但形参列表不同。顶层const不影响传入函数的对象,而底层const会。
int func(double*); //正确重载函数,用于double型指针 void func(int*); //错误,只有返回类型不同 int func(const int*); //底层const,正确重载函数,用于常量整型指针 int func(int* const); //顶层const,重复声明
如果在内层作用域中声明名字,将会隐藏外层作用域的同名实体。在不同的作用域无法重载函数名。
string read(); void func(const string void func(double): int _tmain(int argc, _TCHAR* argv[]) bool read = false; //错误,声明变量也会隐藏同名函数 string s = read(); void func(int); //错误,内层作用域中的的func函数隐藏了外层的func函数,现在的func只能接收int型参数。 func("value"); //不会报错,但是调用的是void func(int) func(3.14); return 0; }
确定某次调用该选用哪个重载函数时会进行函数匹配,如果有且仅有一个函数匹配情况优于其它所有函数,则匹配成功,否则会因调用二义性而失败。
匹配优先级:
1.精确匹配:类型相同,数组类型或函数类型转化成对应的指针,顶层const
2.转换const
3.类型提升
4.算数类型转换或指针转换
5.类类型转换
void f(); void f(int); void f(int,int); void f(double,double); //匹配到 f(double,double) f(3.14); //二义性,关于前一个参数f(int,int)更优,而后一个f(double,double)更优。 f(2,3.14); void ff(int); void ff(short); void ff(float); //匹配到ff(int),小整数型会直接提升到int ff(a); //二义性,字面值3.14的类型是double,存在多种可能的算数型转换 ff(3.14);
// f的形参为1个int型整数,返回值是一个指针,指向一个int*(int*,int)函数 int (*f(int))(int*,int); // 等价写法 auto f(int) - int*(int*,int)
Java面试|Java基础知识总结一 Java面试|Java基础知识总结一 什么是Java? Java 是 Sun Microsystems 于1995 年首次发布的一种 编程语言 和计算平台。编程语言还比较好理解,那么什么是 计算平台 呢? Java 是快速,安全和可靠的。 从笔记本电脑到数据中心,从游戏机到科学超级计算机,从手机到互联网,Java 无处不在! Java 主要分为三个版本 JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版 JavaME(J
这些Java基础知识,诸佬们都还记得嘛(学习,复习,面试都可) 本文主要讲解了几个Java方面的知识,也是面试中经常问到的部分,非常适合刚入坑Java的小伙伴儿们学习以及准备面试的大佬巩固。如果对这方面感兴趣,那就快来看看吧
【实战】Next.js + 云函数开发一个面试刷题网站 前段时间开发了一个面试刷题小程序——面试狗,主要使用了 uniapp + unicloud 云开发实现,今天我们来开发一个与之对应的 PC 版面试刷题网站。
C++基础知识第三天(面试必备) 1.struct 的区别(C 和 C++): C语言中只能定义变量。 C++语言中可以定义变量和函数。同时C++语言中,struct 中所有变量和函数都是 public 权限 2.类的封装: 3.类内部的三种权限 public:共有属性(修饰的成员变量和方法; 可以在类的内部和外部使用。) private:私有属性(修饰的成员变量和方法,只能在类的内部使用,不能在类的外部使用) protected:主要用于继承,保护属性(修饰的成员变量和方法; 可以在类的内部和继承的子类使用,不能在类的外部使用) 4.struct 和 class 的区别
Java工程师面试必问的基础知识整理(超详细) 最近又重新复习了一遍java基础知识,做了一下整理。这些知识点大部分为面试必问,建议收藏。 在理解的基础上进行记忆会更深刻,推荐用自己语言组织归纳,这样面试官认为你至少还是知道这个知识点的。 直接上干货!
学习Java基础知识,打通面试关~十三锁机制 做java中经常问道的一个问题就是线程池用过吗?通用的有哪些?如果不用通用的我们应该怎么创建线程池?这些问题。今天自己也做下总结。虽然原先也写过。现在再总结下,让自己能弄明白。
相关文章
- [C/C++基础知识] 面试再谈struct和union大小问题
- [C/C++基础知识] 那些被遗忘的链表知识
- C++学习2——基础知识
- C++ code:函数指针数组
- C/C++每日一练(20230415)
- [C++ 面试基础知识总结] 变量和基本类型
- C++:C++编程语言学习之数组/指针的简介、案例应用之详细攻略
- C++设计模式:享元模式
- C++音视频开发核心知识,小白入门必看基础知识
- 【华为OD机试 2023最新 】 微服务的集成测试(C++ 100%)
- C++ queue队列如何遍历
- C++ 11 右值引用以及std::move
- Ubuntu 14.04报错: error while loading shared libraries libc++.so cannot open shared object file解决
- C++之using用法(一百一二十九)
- C++11 之for 新解
- C++代码扫描基础知识
- 使用Windbg定位Windows C++程序中的内存泄露
- C++自绘对话框标题栏
- C++中string占用内存大小
- PAT 1147 Heaps C++版
- 【C++ 科学计算】线性代数和科学计算库 Armadillo 构建安装
- C++基础知识要点--类(Primer C++ 第五版 · 阅读笔记)