学了C++那么久,发现还是有英语单词不认识。volatile,从英语的角度来看,是什么意思呢?在网上用谷歌翻译,得到的是「易挥发的」,也有的翻译成「易变的」。但仅仅这些对于我们去理解这个单词是不够的,对于翻译来说,很多时候目标语言很难找到一个词能够反映源语言中单词的全部含义和细节。
Volatile 的意思,若要详细理解,还是应该查阅权威的英英字典。在柯林斯高阶学习词典中,volatile 是这样解释的:
智能指针作为C++11里的新特征,有可能在面试里被问到。本文主要介绍C++里的三个智能指针:shared_ptr、unique_ptr、weak_ptr。其实还有一种auto_ptr指针,但在C++11里已经被弃用了,故此我们不做讨论了。
shared_ptr
unique_ptr
weak_ptr
auto_ptr
最近在牛客网刷题,和leetcode不一样,牛客网需要要自己控制从键盘输入变量。另外在实习的时候,碰巧页遇到几个C++读写文件的问题,之前都是直接网上搜索code,这几天抽空研究了这一块,发现无论是从键盘输入字符串还是从读取文件,都可以采用“流”的思想去理解。
本文转载自C++多态虚函数表详解(多重继承、多继承情况)
在前面的文章中我们已经简单的了解了C++中面向对象的三大特征:封装、继承、多态。封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。也就是说,不论传递过来的究竟是那个类的对象,函数都能够通过同一个接口调用到适应各自对象的实现方法——“一个接口,多种方法”。
C++相对其他面向对象语言来说,之所以灵活、高效。很大程度的占比在于其多态技术和模板技术。
多态有静态多态和动态多态,其中静态多态是通过重载实现,在编译时就确实;而动态多态则是通过虚函数的机制实现的,在运行期间动态绑定。C++虚函数表是支撑C++多态的重要技术,它是C++动态绑定技术的核心。
面向对象的三个基本特征:封装、继承、多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!
内存对齐这个东西我一开始也是不知道的,后来又一次面试被问到了,然后张总跟我随口普及了一下,其实还是蛮简单的,有一点点C的基础估计五分钟就能学会内存对齐的规则了。但如果你想刨根问底,为什么我们现有的计算机要内存对齐,里面的学问还是蛮深的,涉及到了处理器、寄存器这些很核心的内存硬件。
C/C++程序内存中各种变量的存储区域划分是C++面试时常问的一个问题,别的公司我不太清楚,至少某讯是挺爱问的……甚至面试官在面试的时候跟我说,“好的,你能说出这个三个区域就可以了,后面就不做要求了……”。之前看过一篇博客写的很详细,每次面试前临时背一背,现在不想背了,自己过一遍,画一画图加强理解吧。
今天在刷题的时候,遇到几道关于处理32位有符号整数的题目:7.整数反转和 8.字符串转换整数 (atoi)。题目看起来不算很难,但如果在面试时遇到这样的题目,想想面试官是要考察你什么?考察你用long抖机灵吗?考察你会捕获异常吗?我想应该是要考察你对C/C++中整型的上下限的理解以及这方面的细节处理。
我记得有次面试的时候面试官提过一句initializer_list,当时只是知道这个东西是C++11中的新类型,但并没有去深入了解它,今天突然想到了就看了一些文章,随便记录一下。
C++11提供的新类型,定义在头文件中。
12
template< class T >class initializer_list;
回忆一下我们初始化一个vector有哪些方法?
很想写一篇文章来谈一下C/C++中的char和string,顺带也可以说一下python中的string,因为我学习语言的顺序是先学了C再学python然后学C++,一开始对这两个数据类型并没有很敏感,前几天在用C写代码的时候,发现在使用char *和char ch[]的时候有些模糊,而且在给它们初始化或者赋值的时候也会出错。在传统的C里面,我们可以初始化一个定长的char数组,但不能直接给一个定长的char数组赋值:
123
char ch[20] = "Hello,world!"; // validchar sh[20];sh = "Hello,world!"; // invalid
编译器会提示你: