不知不觉,《C++面试八股文》已经更新30篇了,这是我第一次写技术博客,由于个人能力有限,出现了不少纰漏,在此向各位读者小伙伴们致歉。
(相关资料图)
为了不误导更多的小伙伴,以后会不定期的出勘误文章,请各位小伙伴留意。
在《C++面试八股文:C++中,设计一个类要注意哪些东西?》一文中,
#include struct Foo{};struct Goo{ void f1(Foo& f){std::cout <<"non const function" << std::endl;} void f1(const Foo& f){std::cout <<"const function" << std::endl;}};int main(int argc, char const *argv[]){ Foo foo; Goo goo; goo.f1(foo); //无法通过编译,error: ‘void Goo::f1(Foo)’ cannot be overloaded with ‘void Goo::f1(Foo)’ return 0;}
这里的例子f1
和f2
方法的参数应该是Foo f
和const Foo f
,这才是顶层const
。在此感谢知乎用户 退乎 的提醒。
在《C++面试八股文:std::string是如何实现的?》一文中,
有std::string重载的相关问题,我已经在 技术勘误:《C++面试八股文:std::string是如何实现的?》 一文中做了详细说明,在此再次感谢知乎用户 庄严 的指正。
在《C++面试八股文:override和finial关键字有什么作用?》一文中,final 误拼为 finial,感谢知乎用户 DiaoYan 的指正。
同时,这张内存布局图也有错误,
应该是这样的:
感谢知乎用户 清越 的指正。
在《C++面试八股文:std::vector了解吗?》一文中,
面试官:
push_back
和emplace_back
有什么区别?
除了文中所说的不同点,还要一点:emplace_back
可以传入构造函数构造对象,而push_back
只能拷贝或移动对象。
感谢知乎用户 选择公理 的指正。
在《C++面试八股文:std::vector和std::list,如何选择?》一文中,
以下代码的输出是什么?
#include #include int main(int argc, char const *argv[]){ std::list li = {1,2,3,4,5,6}; for(auto it = li.begin(); it!= li.end(); ++it) { if(0 == *it % 2) li.erase(it); } for(auto& i : li) std::cout << i << " "; std::cout << std::endl;}
这里给出的答案是有问题的:
erase
函数返回下一个有效迭代器,所以可以把if(0 == *it % 2) li.erase(it)
修改为if(0 == *it % 2) it = li.erase(it)
来解决这个问题。
这里的erase返回的是下一个迭代器,然后++就是下下个迭代器,跳过了下个迭代器。但是上面代码中%2 == 0 也会跳过下个奇数,所以无法暴露这个问题。应该改成:
#include #include int main(int argc, char const *argv[]){ std::list li = {1,2,3,4,5,6}; auto it = li.begin(); while(it!= li.end()) { if(0 == *it % 2) { it = li.erase(it); }else{ ++it; } } for(auto& i : li) std::cout << i << " "; std::cout << std::endl;}
感谢知乎用户 潸然 的指正。
在《C++面试八股文:什么是构造函数?》一文中,
面试官:可以使用
virtual
修饰构造函数吗?二师兄:不可以,因为构造函数在对象构造阶段调用,虚表尚未建立,所以无法调用虚函数实现多态。
这里的描述是有问题的,虚表是在编译期生成,在构造函数执行时,可能还没有被初始化。所以无法调用虚函数实现多态。
感谢知乎用户 handsome奶酪 的指正。
在《C++面试八股文:什么是空指针/野指针/悬垂指针?》一文中,
面试官:你知道
0/NULL/nullptr
三者之间的区别吗?二师兄:虽然三者都能定义空指针,但三者类型不同。
二师兄:
0
是int
类型,NULL
在g++下是一个宏定义,而nullptr
是有类型的;
#define NULL ((void *)0)
这里的定义也是有问题的,完整的定义如下:
#if defined (_STDDEF_H) || defined (__need_NULL)#undef NULL /* in case has defined it. */#ifdef __GNUG__#define NULL __null#else /* G++ */#ifndef __cplusplus#define NULL ((void *)0)#else /* C++ */#define NULL 0#endif /* C++ */#endif /* G++ */#endif /* NULL not defined and or need NULL. */#undef __need_NULL
在GCC11
下,是 __null
, 类型是long
。所以sizeof(NULL) == 8
。
再再再次感谢 庄严 大佬的指正。
感谢小伙伴们的的反馈,这对我来说非常宝贵。不仅帮助我改正了文章中的错误,也让我有机会更新和修正自己的知识储备库。
C++的标准繁杂,不同版本的标准可能有所出入。同时不同编译器对标准的实现也不尽相同,这增加了C++学习者的负担。
前路坎坷,吾辈不可因为荆棘密布望而却步。
关注我,带你21天“精通”C++!(狗头)
-
C++面试八股文:技术勘误不知不觉,《C++面试八股文》已经更新30篇了,这是我第一次写技术博客
-
胥江实验中学蒋凯_胥江实验中学 全球头条1、公交线路:306路。2、全程约14 9公里从阳山花苑步行约410米,到达文
-
权臣年羹尧被杀后,雍正皇帝是如何处置他的妻女的?_微资讯如果您喜欢这篇文章,麻烦手动点击右上方的“关注”。感谢您的支持和鼓
-
中国游客讲述在法遭暴徒砸车经历 基本信息讲解大家好,今日关于【中国游客讲述在法遭暴徒砸车经历】的话题登上了各大
-
嘉实基金:中期市场机会或大于风险-每日速看据一财,“下半年A股公司盈利修复或仍将延续,当前指数表现所隐含的估
-
C++面试八股文:技术勘误
2023-07-02 05:14:53
-
胥江实验中学蒋凯_胥江实验中学 全球头条
2023-07-02 03:05:41
-
权臣年羹尧被杀后,雍正皇帝是如何处置他的妻女的?_微资讯
2023-07-02 00:41:24
-
中国游客讲述在法遭暴徒砸车经历 基本信息讲解
2023-07-01 22:21:15
-
嘉实基金:中期市场机会或大于风险-每日速看
2023-07-01 20:58:39