好玩,诡异,代码大全

简介: 通过学习《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()的调用根本不会去查虚表什么的,所以输出上述两行结果。


相关文章
|
Linux C语言 Windows
C语言文件编程-Linux环境下运行
本文介绍了在Linux环境下使用C语言进行文件编程时的两种主要接口:C标准库函数与Linux系统调用。C标准库提供了`fopen`, `fread`, `fwrite`, 和 `fclose`等函数,适用于普通文件操作;而Linux系统调用如`open`, `read`, `write`, 和 `close`则更适合处理设备文件,同时也可用于普通文件。这两种方法的主要区别在于前者使用文件指针,后者使用文件描述符。文章还给出了两个示例程序:一个使用C标准库函数实现文件复制,另一个则使用Linux系统调用完成相同任务。
199 2
电影《我不是药神》观后感
 第一次写关于电影的观后感,献给徐峥的《我不是药神》的电影,相信我这是一部即使我剧透了一部分的电影内容你依然会去电影院看的现实题材电影。这或许是徐峥截至目前为止演的最有冲击力的一部电影  电影的故事主线是阿三的国度印度生产一种印度版的白血病专用药格列宁,价格只有正规市场价格的10%左右,一个现实社会中的小人物阴差阳错的走上了代人“走私药品”的道路,为很多因为高价买不起只能等死的白血病人带来希望的故事。
1996 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
588 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
233 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
827 60
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1188 157