Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
char* s = "...\0" struct string {
char* s;
uint length;
}
struct string {
char* s;
uint length;
}struct string {
uint length;
char[] s;
}size_t lenght. Во-вторых, open array — это нестандартное расширение. Чем оно удобней обычного указателя?Во-вторых, open array — это нестандартное расширение.
std::cout << 3["habrahabr"];
int k[5]={0, 1, 4, 9, 16};
std::cout << 3[k] << std::endl;
array[index]
компилятор представляет как *(array + index)
Поскольку операция сложения коммутативна, нет никакой разницы между "array+index" и "index+array". Следовательно 3["habrahabr"]
это то же самое, что "habrahabr"[3]то есть «четвертый по счету элемент константного массива, содержащего строку 'habrahabr'»uint8_t.class Foo
{
public:
virtual void doWork() = 0;
virtual void cleanup() = 0;
virtual ~Foo()
{
cleanup();
}
}
class Bar : public Foo
{
public:
void doWork()
{
printf("working...\n");
}
void cleanup()
{
printf("cleaning up...\n");
}
}
char str4[] = {"1234"}; // sizeof(str4) == 5 char str5[4] = {"1234"}; // sizeof(str5) == 4
отсутствие в языке специализированного целочисленного типа для 8-битных величин. Из-за этого char’у приходится брать на себя роль byte;
uint8_t — это не новый тип. Он реализован через typedef. А typedef нового типа, как известно, не создаёт. Из-за этого могут быть проблемы, например, такие, какие описаны в этой статье.typedef на целочисленный 8-битный тип
char в различных вариациях. А так как «символы» и «целые числа» — это всё-таки разные категории данных (например, они должны по-разному печататься), то смешивание их может привести к проблемам.Нет такого родного типа.
А так как «символы» и «целые числа» — это всё-таки разные категории данных (например, они должны по-разному печататься)
то смешивание их может привести к проблемам.
typedef новый тип не создаёт. Это всего лишь синоним, более удобная (для программиста) запись. Для компилятора никаких uint_8t нет.отсутствие в языке специализированного целочисленного типа для 8-битных величин. Из-за этого char’у приходится брать на себя роль byte;
char и не используется. Используется тот тип, который предлагает язык для «беззнаковых 8-битных целых величин» — а именно, uint8_t. Но у него есть «особенности».typedef int BOOL — можно. И оно даже будет работать. Но не всегда, а только в некотором множестве случаев. А в других случаях будут вылезать уши int'а, а не настоящего булевского типа.uint8_t — то же самое.if ( some_bool ) где int some_bool;?static_cast<unsigned>(var_8bit) и тут их можно понять почему так поступили.some_bool допустимы операции ++ или --, которые смысла не несут. Половинчатое решение, «тут поём и тут поём, а вот тут я рыбу заворачивал, тут играть не надо».
Ловушки языка С++