原文作者:aircraft

原文链接:https://www.cnblogs.com/DOMLX/p/10711810.html

一套面试题的目录在此,还在继续完善中。。。。。。

c/c++ 2019面试题目录

1.类中的函数定义后加了一个const代表什么?

代表它将具备以下三个性质:

  1.const对象只能调用const成员函数。
 2.const对象的值不能被修改,在const成员函数中修改const对象数据成员的值是语法错误
  3.在const函数中调用非const成员函数是语法错误   任何不会修改数据成员的函数都应该声明为const类型。
  如果在编写const成员函数时,不慎修改了数据成员,
 或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。
 所以看完上面这句话就应该明白了函数定义后加const的用处,以及什么时候用到const,这会是一个好的编程习惯的。
以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
class Stack
{
public:
void Push(int elem);
int Pop(void);
int GetCount(void) const; // const成员函数
private:
int m_num;
int m_data[10];
}; int Stack::GetCount(void) const
{
++ m_num; // 编译错误,企图修改数据成员m_num
Pop(); // 编译错误,企图调用非const函数
return m_num;
}

2.#include<>与#include""的区别?

<>表明这是一个工程或者标准头文件。查找过程会首先检查预定义的目录,我们可以通过
设置搜索路径环境变量或者命令行选项来修改这些目录、 “”表明该文件是用户自定义的头文件,查找时应从当前目录或者指定目录查找。 总结:自己的定义的头文件用双引号导入,像库文件之类的标准头文件用<>导入

3.c++中的双冒号::

1、表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,
就要写成void A::f(),表示这个f()函数是类A的成员函数。 2、直接用在全局函数前,表示是全局函数
例:在VC里,你可以在调用API 函数里,在API函数名前加:: 3、表示引用成员函数及变量,作用域成员运算符 4、变量前面的双冒号::,代表引用全局变量,比如我在全局定义了一个全局变量
int value = 1; 局部函数内又定义了一个 int value = 2; 而在这个局部函数中我想给全局那个变量赋值就这样 ::value = 250;

4.宏参数的连接,#和##符号的作用。

某面试题:求下面输出结果
一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. #define STR(s) #s #define CONS(a,b) int(a##e##b) printf(STR(vck)); // 输出字符串"vck"
printf("%d\n", CONS(2,3)); // 2e3 输出:2000

5.static定义的函数如何在其他文件调用?(不能在其他文件直接调用!!!)

1. 通过函数指针的方式, 我们只要得到这个函数的地址,那么就一定可以调用它,
大家要知道static函数是对编译器起作用的,在运行时根本没有static了,有的只是函数地址,
所以只要搞到函数地址管它是不是static的,照调不误,
2. 通过非static函数的方式,我们可以定义一个普通的函数,
让这个普通函数调用static函数,让后在把这个普通函数在头文件中声明
举例:利用可在本文件调用的属性,另加一个函数fun,fun调用该static函数;其他文件调用fun即可。 另外,要强调,extern不能作用在static函数

6.sizeof计算变量空间容易出错的地方?

某面试题:
char str[] = "hello";
sizeof(str)=_?_ void Func(char str[100])
{
sizeof(str)=_?_
}
第一个答案是6,因为对数组变量进行sizeof运算的时候得到的是数组占用内存。 第二个答案是4,在函数中形参的作用是传址,本质是一个指针,指向了一个str[100]。 某面试题: class A
{
public:
char c1;
int i;
char c2;
};
int main()
{
printf("%d",sizeof(A));
return 0;
}
问输出是多少?
  很多人都是直接相加求值,但是sizeof对类以及结构体作用时会有一个字节对齐机制,
对齐机制的对齐方式为其最大成员对齐方式,会将定义变量的内存补全,方便系统运算。
c1的偏移量为0,i的偏移量为4,c1与i之间便需要3个字节填充。
c2的偏移量为8,那么结果就是1+3+4+1=9,由于这里最宽的字节
为int,4个字节。补全之后答案为12. 这里吧Int换成double的话答案就是24 也可以自己手动是设置对齐方式,只要在程序的开头部分 加上一句 #pragma pack(x)

7.内联函数与宏的区别?

1、内联函数在编译时展开,宏在预编译时展开。
2、在编译的时候,内联函数可以被镶嵌到代码中,而宏只是一个简单的文本替换。
3、宏不是函数,inline是函数。
4、宏在定义的时候容易因为二义性出错,而内联函数不会。

8.内联函数比宏优势在什么地方?

9.为什么不把所有函数都定义成内联函数呢?

10.下面输出为多少?(某年微软面试题)

int func(x)
{
  int countx = 0;
  while(x)
   {
    countx ++;
    x = x&(x-1);
   }
  return countx;
} 假定x = 9999。 答案:8 思路:将x转化为2进制,看含有的1的个数。

本篇是第一篇面试题总结,后面还有好多篇,想要剑指offer的关注我把!!!

若有兴趣交流分享技术,可关注本人公众号,里面会不定期的分享各种编程教程,和共享源码,诸如研究分享关于c/c++,python,前端,后端,opencv,halcon,opengl,机器学习深度学习之类有关于基础编程,图像处理和机器视觉开发的知识

c++面试题中经常被面试官面试的小问题总结(一)(本篇偏向基础知识)的更多相关文章

  1. c++面试题中经常被面试官面试的小问题总结(二)(本篇偏向指针知识)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/10713204.html 1.利用指针交换两个字符串方法?(这题是我当年读大一的时候看到的,好怀 ...

  2. 面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)

    所有知识体系文章,GitHub已收录,欢迎Star!再次感谢,愿你早日进入大厂! GitHub地址: https://github.com/Ziphtracks/JavaLearningmanual ...

  3. 第一篇 网站基础知识 第4章 Java中Socket的用法

    第4章 Java中Socket的用法 4.1 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServetSocket和Socket两大类,ServetSocke ...

  4. 面试官:说一说Zookeeper中Leader选举机制

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天又是一个阳光明媚的一天,我又 ...

  5. 想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!

    最近社区Java技术进阶群的小伙伴总是会问,如何面试阿里Java技术岗,需要什么条件,做哪些准备:小编就这些问题找到了阿里技术团队中在一线真正带Java开发团队并直接参与技术面试的专家,分享了自身在筛 ...

  6. 面试官问我redis数据类型,我回答了8种

    面试官:小明呀,redis 有几种数据结构呀? 小明:8 种 面试官:那你说一下分别是什么? 小明:raw,int,ht,zipmap,linkedlist,ziplist,intset,skipli ...

  7. 面试官问我MySQL索引,我

    面试官:我看你简历上写了MySQL,对MySQL InnoDB引擎的索引了解吗? 候选者:嗯啊,使用索引可以加快查询速度,其实上就是将无序的数据变成有序(有序就能加快检索速度) 候选者:在InnoDB ...

  8. 面试官一口气问了MySQL事务、锁和MVCC,我

    面试官:你是怎么理解InnoDB引擎中的事务的? 候选者:在我的理解下,事务可以使「一组操作」要么全部成功,要么全部失败 候选者:事务其目的是为了「保证数据最终的一致性」. 候选者:举个例子,我给你发 ...

  9. 面试官问我MySQL调优,我真的是

    面试官:要不你来讲讲你们对MySQL是怎么调优的? 候选者:哇,这命题很大阿...我认为,对于开发者而言,对MySQL的调优重点一般是在「开发规范」.「数据库索引」又或者说解决线上慢查询上. 候选者: ...

随机推荐

  1. REST格式

    首先要明确一点:REST 实际上只是一种设计风格,它并不是标准.(所以你可以看到网上一大堆的各种最佳实践,设计指南,但是没有人说设计标准).aisuhua/restful-api-design-ref ...

  2. Java代码优化(一)

    前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...

  3. what is HTTP OPTIONS verb

    The options verb is sent by browser to see if server accept cross origin request or not, this proces ...

  4. ADO.NET系列之Connection对象

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 ADO.NET概念 ADO ...

  5. DotNetty 使用ByteToMessageDecoder 国家部标808协议封装

    DotNetty 开源地址 https://github.com/Azure/DotNetty 个人博客地址   http://www.dncblogs.cn/Blog/ShowBlog/70 1.国 ...

  6. 构建NetCore应用框架之实战篇(五):BitAdminCore框架1.0登录功能设计实现及源码

    本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.设计原则 1.继承前面框架架构思维,设计以可读性作为首要目标. 2 ...

  7. Prism 的 TabControl 导航

    基于Prism 7.1 最近工作中可能会用到TabControl所以作为小菜的我提前预习了一下,结果并没有我想的那么简单,于是乎 各种网上查,本来用wpf的人就不多 prism 的可查的资料就更少的可 ...

  8. 利用bulk添加百万条数据,进行测试

    (1)连接数据库 public static void BulkToDB(DataTable dt) { //数据库连接 SqlConnection sqlCon = new SqlConnectio ...

  9. Nigix配置

  10. Django安装(第一个项目)

    day60 从系统中选择已存在的解释器. 新建Django项目         命令行创建:             django-admin startproject mysite          ...