#include "mainwindow.h"
#include <QApplication>
#include <QtDebug>
struct STR
{
};
class Test
{
public:
Test() {
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
STR aa,bb;
Test cc,dd;
qDebug() << "aa" << sizeof(aa) << &aa;
qDebug() << "bb" << sizeof(bb) << &bb;
qDebug() << "cc" << sizeof(cc) << &cc;
qDebug() << "dd" << sizeof(dd) << ⅆ
return a.exec();
}
出力結果:
aa 1 0x28fde7
bb 1 0x28fde6
cc 1 0x28fde5
dd 1 0x28fde4
オンラインステートメントによると:このあいまいな1はコンパイラによって挿入された文字であり、2つの空の構造体またはクラスがメモリ内で一意のアドレスを持つようにします
#include "mainwindow.h"
#include <QApplication>
#include <QtDebug>
struct STR
{
char a[0];
};
class Test
{
public:
Test() {
}
char a[0];
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
STR aa,bb;
Test cc,dd;
qDebug() << "aa" << sizeof(aa) << &aa;
qDebug() << "bb" << sizeof(bb) << &bb;
qDebug() << "cc" << sizeof(cc) << &cc;
qDebug() << "dd" << sizeof(dd) << ⅆ
return a.exec();
}
出力結果:
aa 0 0x28fde8
bb 0 0x28fde8
cc 0 0x28fde8
dd 0 0x28fde8
コンパイラは空のアドレスを指定し、すべての空のメモリオブジェクトはこのアドレスを指します。