Мы все знаем, что sizeof пустого класса или объекта пустого класса будет 1 байт. Я столкнулся с чем-то, где sizeof
класс и его объект идут как 0. Программа синтаксически корректна, поскольку не было ошибок компиляции или времени выполнения. Это неопределенное поведение? Случай использования, который я пытаюсь выполнить, имеет смысл и выглядит как действительный? Является ли большой ошибкой не давать точный индекс или размер массива в классе? Фрагмент кода, как показано ниже:Может ли «sizeof» класс или объект когда-либо быть нулевым?
#include<iostream>
using namespace std;
class A
{
char a[];
};
int main()
{
A b;
cout<<sizeof(A)<<endl;
cout<<sizeof(b)<<endl;
return 0;
}
выход:
sizeof
пустой класс является один байт (не равен нулю в основном) и причина этого указана как «Чтобы убедиться, что разные объекты имеют разные адреса».
Что произойдет в этом случае, когда класс sizeof
подходит к нулю? Примечание: Наблюдается то же поведение для int a[]
.
'char a [];' Это не легальный синтаксис C++. – PaulMcKenzie
«Программа синтаксически корректна, поскольку не было ошибок компиляции или времени выполнения.«Я уверен, что есть синтаксические ошибки« без необходимости диагностики ». – user2357112
@PaulMcKenzie На самом деле, как последний член данных в структуре,' char a []; 'действителен C99. – fredoverflow