C++题目知多少-1

1.虚函数表在哪里?

        虚函数表存储在可执行目标文件的只读数据段.rodata)、虚函数存储在代码段(.text)。虚表指针存储位置与对象所在位置相同,如果不是静态或全局对象,要等到可执行目标文件加载到内存在运行时创建。

        可执行目标文件布局如下:

可执行目标文件加载到内存后如下:

虚表指针的存储的位置与对象存储的位置相同,可能在栈、也可能在堆或数据段等。

参考博文:虚函数表存储位置_虚函数表存在什么位置-CSDN博客

2.成员函数声明为const的作用,有没有方法在声明const函数中对成员进行修改?

        如果一个成员函数被声明为const,这意味着该函数承诺不会修改对象的状态,也就是说,它不会改变对象的任何成员变量的值。const成员函数主要用于那些只读操作,比如获取对象的属性值。

        然而,如果你确实需要在const成员函数内修改成员变量,有几种方法可以实现,但这些方法通常不被推荐,因为它们违反了const成员函数的本意:

1)使用mutable关键字mutable关键字可以用于成员变量,即使在const成员函数中也可以被修改。但是,这通常用于那些即使在对象是const的情况下也需要修改的变量,如缓存数据。

2)使用const_cast:你可以使用const_cast来去除对象的const属性,从而修改成员变量。但这种方法破坏了const的约束,比较危险。

#include <iostream>
class MyClass {
public:
    void constFunction() const {
        //value = 10;  //编译不通过

        value2 = 10;
        int* ptr = const_cast<int*>(&value);
        *ptr = 10; 
    }

    int getVal()
    {
        return value;
    }

    int getVal2()
    {
        return value2;
    }

private:
    int value = 0;
    mutable int value2 = 0;
};
int main()
{
    MyClass obj;
    obj.constFunction();
    std::cout << obj.getVal() << std::endl;
    std::cout << obj.getVal2() << std::endl;
}

  输出结果:

10
10

上述示例代码,在const成员函数中无法直接修改value,但是可以修改mutable声明的value2;同时,可以通过const_cast转换来间接修改value。

3.c++强转方式有哪些?

1)static_cast:‌用于基本数据类型之间的转换,‌以及具有继承关系的指针或引用之间的转换。‌static_cast在编译时进行类型检查,‌如果转换不合法则会产生编译错误。‌

2)dynamic_cast:‌专门用于具有继承关系的指针或引用之间的转换,‌可以在运行时检查类型是否匹配。‌如果转换不合法,‌则返回空指针或引用。‌

3)const_cast:‌用于去除指针或引用的const属性,‌可以将const类型转换为非const类型。‌const_cast可以改变指针或引用的常量属性,‌但不能改变对象本身的常量属性。‌

4)reinterpret_cast:‌用于不同类型之间的转换,‌可以将一个指针或引用转换为另一个类型的指针或引用。‌reinterpret_cast不进行类型检查,‌因此可能会导致未定义的行为,‌应谨慎使用。‌

4.zmq消息队列的模式有哪些?

1)客户端-服务器模式(Client-server)

2)  广播盘模式(Radio-dish)

3)  发布订阅模式

4)请求应答模式

5)流水线模式

6)独占对模式

7)本机模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞翔的小七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值