Непонятное выражение 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.