Не печатается Hello, World!
Почему этот код не печатает "Hello, World!"?
#include <iostream>
int main() {
std::cout << sizeof(std::cout << "Hello, World!") << '\n';
}
Ответы (2 шт):
Потому что вы попросили его вывести размер типа выражения std::cout << "Hello, World!", причем этот размер вычисляется во время компиляции, а не во время выполнения программы.
Смотрите, например, какая разница, чему будет равна переменная int i; - ее размер от этого не изменится. Так и
std::cout << "Hello, World!"
что бы вы ни выводили - будет иметь один и тот же возвращаемый тип, так что реально выполнять выражение совершенно ни к чему...
Посмотрите тут - https://gcc.godbolt.org/z/Ke45d7 - как видите, размер вычисляется и подставляется еще на уровне компиляции...
When applied to an expression,
sizeofdoes not evaluate the expression
Параметр sizeof не вычисляется (то есть никакие функции в нем не вызываются на самом деле, =, ++ и -- не меняют значения переменных, и т. д.).
Потому что для определения размера это не нужно. Размер всегда известен во время компиляции. (Потому что зависит только от типа выражения, который тоже известен во время компиляции.)