Не печатается Hello, World!

Почему этот код не печатает "Hello, World!"?

#include <iostream>

int main() {
    std::cout << sizeof(std::cout << "Hello, World!") << '\n';
}

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

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

Потому что вы попросили его вывести размер типа выражения std::cout << "Hello, World!", причем этот размер вычисляется во время компиляции, а не во время выполнения программы.

Смотрите, например, какая разница, чему будет равна переменная int i; - ее размер от этого не изменится. Так и

std::cout << "Hello, World!"

что бы вы ни выводили - будет иметь один и тот же возвращаемый тип, так что реально выполнять выражение совершенно ни к чему...

Посмотрите тут - https://gcc.godbolt.org/z/Ke45d7 - как видите, размер вычисляется и подставляется еще на уровне компиляции...

→ Ссылка
Автор решения: HolyBlackCat

When applied to an expression, sizeof does not evaluate the expression

cppreference

Параметр sizeof не вычисляется (то есть никакие функции в нем не вызываются на самом деле, =, ++ и -- не меняют значения переменных, и т. д.).

Потому что для определения размера это не нужно. Размер всегда известен во время компиляции. (Потому что зависит только от типа выражения, который тоже известен во время компиляции.)

→ Ссылка