В некотором смысле, да.Это составное выражение , которое можно рассматривать как лямбда-функцию, которая вызывается сразу и вызывается только один раз.
В последних версиях MSVC должны поддерживаться лямбда-функции, поэтомучто-то вроде:
[](){ /* your compound statement expression here */ }();
РЕДАКТИРОВАТЬ: убрал лишнюю скобку
РЕДАКТИРОВАТЬ 2: для вашего развлечения, вот пример того, как использовать любой вариант с некоторым (по общему мнению, глупым) реальным кодом,Не берите в голову реальную полезность кода, но насколько он выразителен и насколько хорошо компилятор даже оптимизирует его:
#include <string.h>
#include <stdio.h>
int main()
{
unsigned int a =
({
unsigned int count = 0;
const char* str = "a silly thing";
for(unsigned int i = 0; i < strlen(str); ++i)
count += str[i] == 'i' ? 1 : 0;
count;
});
unsigned int b =
[](){
unsigned int count = 0;
const char* str = "a silly thing";
for(unsigned int i = 0; i < strlen(str); ++i)
count += str[i] == 'i' ? 1 : 0;
return count;
}();
printf("Number of 'i' : %u\t%u\n", a, b);
return 0;
}
... который gcc 4.5 компилирует в:
movl $2, 8(%esp)
movl $2, 4(%esp)
movl $LC0, (%esp)
call _printf