22:50
void (не himself)
Случайно обнаружил, что в Си/Си++ можно приводить к типу... void. То есть, к отсутствующему значению.
Вот так:
(void)любое выражение
И всё, значение типа void. Как можно это применять?
Это значение, конечно же, можно возвращать из функции. Какого типа должна быть функция? void, разумеется!
Так можно избегать лишних фигурных скобок, если надо сделать какое либо действие, возвращающее не void и завершить функцию. Например:
Сначала будут выполнены функции, необходимые для получения значения выражения через операцию "запятая", а потом преобразовано к типу void и возвращено.
Спустя два дня с удивлением увидел такую же штуку (преобразование к void) в исходниках MFC.
У меня только один вопрос -- если я включу оптимизацию компилятора, может ли случиться, что функции не вызовутся?
Вот так:
(void)любое выражение
И всё, значение типа void. Как можно это применять?
Это значение, конечно же, можно возвращать из функции. Какого типа должна быть функция? void, разумеется!
void f()
{
return (void)MessageBox(NULL,"I\'m part of void expression", "HELLO",0);
}
Так можно избегать лишних фигурных скобок, если надо сделать какое либо действие, возвращающее не void и завершить функцию. Например:
if(some&&condition)
return (void)(DoAction1(),DoAction2());
Сначала будут выполнены функции, необходимые для получения значения выражения через операцию "запятая", а потом преобразовано к типу void и возвращено.
Спустя два дня с удивлением увидел такую же штуку (преобразование к void) в исходниках MFC.
У меня только один вопрос -- если я включу оптимизацию компилятора, может ли случиться, что функции не вызовутся?