好玩,诡异,代码大全

简介: 通过学习《Inside the C++ Object Model》发现了一些好玩的代码,记录在此吧,以方便搜集以后发现的好玩,或者归你的代码。 类对象能展现多态吗? struct Base { int j;...

通过学习《Inside the C++ Object Model》发现了一些好玩的代码,记录在此吧,以方便搜集以后发现的好玩,或者归你的代码。

  1. 类对象能展现多态吗?
        struct Base
        {
            int j;
            virtual void f()
            {
                std::cout << "Base::f()" << std::endl;
            }
        };
        
        struct Derived : Base
        {
            void f()
            {
                std::cout<< "Derived::f()" << std::endl;
            }
        };
        
        int main() {
            Base b;
            b.f(); // Base::f() invoked
            b.~Base();
            new ( &b ) Derived; // 1
            b.f(); // which f() invoked?
        }

    你认为控制台会输出哪两句话呢?请仔细分析几分钟。

    好吧,答案揭晓。严格意义上来说没有答案,因为C++ 标准没有定义。具体结果要依赖具体的编译器。但在大部分编译器下,上述代码会输出:

    Base::f()
    Base::f()

    给这种结果一个合适的解释是:类对象不支持多态。也就是说,当你写完最后一行 b.f() 的时候,编译器在编译的时候,已经将其替换成了_Base_FV( &b )了。这个函数就是Base::f()经编译器修饰后的函数。所以b.f()的调用根本不会去查虚表什么的,所以输出上述两行结果。


相关文章
|
消息中间件 前端开发 调度
C++20 协程——你还只是听过?觉得没时间了解,这里可以帮到你。五分钟 从没听过到使用的帮助手册
来源:协程是在C++20 标准中提出的一个新的工具。 它突破传统的程序在cpu中来回切换时需要更新和恢复PCB资源现场的耗时操作(多进程)或者COW(低级调度)操作时间。
252 0
|
SQL IDE 算法
手撕代码是程序员的基本功吗?
现在众多企业都要求在面试中用“手撕代码”来考验应聘者的代码能力,你觉得手敲代码是否可以体现真实的基础实力? 本期话题: 1、你觉得手撕代码是程序员的基本功吗? 2、为什么会用“手撕代码”来考验程序员能力
222 1
|
前端开发 数据库
贼无聊的文章
贼无聊的文章
45 0
|
机器学习/深度学习 人工智能 自然语言处理
AlphaCode 能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了
DeepMind 是最新的人工智能研究实验室。它推出了一个可以生成软件源代码的深度学习模型,成果令人印象深刻。该模型被称为 AlphaCode,基于 Transformer,与 OpenAI 在其代码生成模型中使用的架构是一样的。
177 0
AlphaCode 能替代人类程序员吗?网友:被替代也挺好,这样就可以少写代码多开会了
|
Web App开发 搜索推荐 开发者
上了学这么久,我才知道他们为什么可以这么爽(上)
目录 前情提要 安装插件 1.下载链接 2.安装 遇到无法拖进去怎么办? 3.新的体验
上了学这么久,我才知道他们为什么可以这么爽(上)
程序人生 - 996(三)马云长文再谈“996”:和被剥削没关系,现在的人不傻
程序人生 - 996(三)马云长文再谈“996”:和被剥削没关系,现在的人不傻
134 0
|
程序员
程序员胳膊疼、程序员胳膊疼原因和程序员胳膊疼解决办法
  程序员胳膊疼   程序员因为要输入代码,快速操作鼠标和键盘,操作久了,累了,就胳膊疼。   程序员胳膊疼原因   操作键盘和鼠标会使用胳膊,肩、肘、掌和手指都会用到,这几个部位用法不当不自然就会导致胳膊疼,错误的用法有:肩架、肘拐、掌久放和指集中用。   肩架是指在精神集中紧张状态时,肩外侧向上顶,这种状态就容易疼,要自然放下,两侧放平。
389 0
表白这件事,比解 bug 要难多少?
今天是个粉红色日子,我们来聊聊和技术无关的“技术活”
3101 0
|
Java 测试技术 程序员
我可能是个假程序员!50个程序猿笑话程序猿最烦两件事
程序员最烦的是什么?50个程序猿笑话程序猿最烦两件事。没错,就是这2件事情……梁健也烦! 1、程序猿最烦两件事,第一件事是别人要他给自己的代码写文档,第二件呢?是别人的程序没有留下文档。
2180 0

相关实验场景

更多