标签: object-layout

嵌套类和C++中的多重继承之间的内存布局差异?

我试图了解COM如何指定其对象的布局,以便想要使用COM对象的客户端知道如何做到这一点.

我已经读过实现多个接口的COM对象可以用不同的方式来实现它,包括使用嵌套类或多重继承.

我的理解是两种技术都必须产生相同的内存布局(符合COM规范),以便想要使用COM对象的客户端(例如在C中)知道如何做.

所以我的具体问题是:使用多重继承与嵌套类实现的c ++对象的内存布局是否存在差异.

有人能指出我指定COM对象布局的位置吗?

c++ com object-layout

3
推荐指数
2
解决办法
954
查看次数

C++可以通过编译器在类外优化常量类数据吗?

我知道类之外的常量变量可以直接优化到编译器的函数调用中,但编译器对常量类变量执行相同操作是否合法?

如果有一个类声明如下:

class A {
public:
const int constVar;
    //other, modifiable variables

A(int val): constVar(val) {
         //code to initialize modifiable variables

}
};
Run Code Online (Sandbox Code Playgroud)

我创建一个A的实例并调用这样的函数:

A obj(-2);
int absoluteVal = std::abs(A.constVar);
Run Code Online (Sandbox Code Playgroud)

是否允许编译器执行此操作并使类sizeof(int)更小?:

A obj();
int absoluteVal = std::abs(-2);
Run Code Online (Sandbox Code Playgroud)

c++ memory-layout compiler-optimization object-layout

3
推荐指数
1
解决办法
393
查看次数

指向对象的指针==指向第一个成员的指针?

为什么以下代码中的if条件产生true?

struct A
{
    int firstMember;
} a1;

if (&a1 == static_cast<void*>(&a1.firstMember)) std::cout << "equal";
Run Code Online (Sandbox Code Playgroud)

在阅读Stroustrup关于空类的FAQ时,我有点困惑,特别是下面的陈述:

if (p1 == p2) cout << "nice: good optimizer";
Run Code Online (Sandbox Code Playgroud)

c++ pointers object member object-layout

1
推荐指数
1
解决办法
309
查看次数

实现接口的 CRTP 类的 sizeof

我有一个关于sizeof使用 CRTP 实现接口的类实例的问题,如下例所示。

#include <iostream>
class Interface
{
public:
    virtual int foo() {
        std::cout << "Interface\n";
        return 0;
        };
};

template <class Derived>
class Base : Interface
{
public:
    virtual int foo() override {
        Interface::foo();
        std::cout << "base\n";
        return static_cast<Derived*>(this)->bar2;
        }
    int bar;
};

class Derived : public Base<Derived>
{
public:
    virtual int foo() override {
            std::cout << "Derived\n";
        Base<Derived>::foo();
        return bar;
    }
    int bar2;
};

int main()
{
    std::cout << sizeof(Base<Derived>) << '\n';
    std::cout << sizeof(Derived) << …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism class vtable object-layout

1
推荐指数
1
解决办法
107
查看次数