Полноэкранное видео в Webview не работает во Flutter

Большинство компиляторов C ++ выбрали для повышения компиляции при попытке получить sizeof(void).

При компиляции C gcc не соответствует и решил определить sizeof(void) как 1. Это может показаться странным, но имеет логическое обоснование. Когда вы выполняете арифметику указателя, добавляя или удаляя одну единицу, это означает добавление или удаление объекта, указывающего на размер. Таким образом, определение sizeof(void) как 1 помогает определить void* как указатель на байт (нетипизированный адрес памяти). В противном случае у вас было бы удивительное поведение, используя арифметику указателя, такую ​​как p+1 == p when p void*. Такая арифметика указателя на указателях void не допускается в c ++, но отлично работает при компиляции C с gcc.

. Рекомендуемым стандартным способом было бы использовать char* для этой цели (указатель на байт).

Еще одно подобное различие между C и C ++ при использовании sizeof возникает, когда вы определили пустую структуру типа:

struct Empty {
} empty;

Использование gcc в качестве моего компилятора C sizeof(empty) возвращает 0. Используя g ++ тот же код вернет 1.

Я не уверен, что называет состояние как стандартов C, так и C ++ в этой точке, но я считаю, что определение размера некоторых пустых структур / объектов помогает в управлении ссылками, чтобы избежать этих двух ссылки на разные последовательные объекты, первый из которых пуст, получает тот же адрес. Если ссылка реализована с использованием скрытых указателей, как это часто делается, обеспечение того, что другой адрес поможет их сравнить.

Но это просто избегает неожиданного поведения (сравнение ссылок на столбик) путем введения другого (пустые объекты, даже POD потребляют не менее 1 байт памяти).

3
задан Masum 19 March 2019 в 09:38
поделиться