相关疑难解决方法(0)

为什么没有std :: is_struct类型特征?

我已经看到,为了检查类型T是否是我可以使用的类:

bool isClass = std::is_class<T>::value;
Run Code Online (Sandbox Code Playgroud)

它对类和结构都返回true.我知道在C++中它们几乎是一样的,但我想知道为什么在类型特征中它们之间没有区别.检查这种差异总是没用,还是有一些我不理解的理由?

c++ type-traits c++11

56
推荐指数
5
解决办法
9478
查看次数

将默认构造函数添加到基类会将sizeof()更改为派生类型

我倾向于认为我对C++内部和内存布局有很好的把握,但这个让我感到困惑.我有以下测试代码:

#include <stdio.h>

struct Foo
{
    //Foo() {}
    int x;
    char y;
};

struct Bar : public Foo
{
    char z[3];
};

int main()
{
    printf( "Foo: %u Bar: %u\n", (unsigned)sizeof( Foo ), (unsigned)sizeof( Bar ) );
}
Run Code Online (Sandbox Code Playgroud)

输出是合理的:

Foo:8 Bar:12

但是,这是非常奇怪的部分,如果我取消注释Foo()上的简单默认构造函数,sizeof(Bar)会发生变化!如何添加ctor可能会改变这些类的内存布局?

Foo:8 Bar:8

使用gcc-7.2编译

c++ inheritance constructor sizeof

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

标签 统计

c++ ×2

c++11 ×1

constructor ×1

inheritance ×1

sizeof ×1

type-traits ×1