Непонятное выражение sizeof(0)["\0"]

Объясните, что означает это выражение и почему выводит единицу?

#include <iostream>

int main() {
   std::cout << sizeof(0)["\0"] << '\n';   
}

Ответы (1 шт):

Автор решения: KoVadim

sizeof это интересная штука и не то, чем кажется. Оно вычисляет значения выражения "виртуально", что бы узнать тип, а потом возвращает его значение. Давайте пошагово повторим за компайлером.

Исходное выражение

std::cout << sizeof(0)["\0"] << '\n';   

Вначале добавим правильные скобки

std::cout << sizeof((0)["\0"]) << '\n';   

А тут спрятана старая сишная истина - a[b] == b[a] == *(a+b). Переставим.

std::cout << sizeof("\0"[0]) << '\n';   

Теперь очевидно, что там просто один символ

std::cout << sizeof('\0') << '\n';   

А sizeof(char) в плюсах - это всегда по правилам 1.

→ Ссылка