In qualche modo, sì. Questo è un compound statement expression, che si potrebbe considerare come una funzione lambda che viene immediatamente chiamata e chiamata solo una volta.
versioni recenti di MSVC dovrebbero supportare funzioni lambda, in modo che sarebbe qualcosa di simile:
[](){ /* your compound statement expression here */ }();
EDIT: rimosso un surplus parentesi
EDIT 2: Per il vostro divertimento, ecco un esempio di come usare una variazione con un codice reale (certamente totalmente sciocco). Mi piace troppo l'utilità reale del codice, ma come espressiva è e come ben il compilatore anche ottimizza:
#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;
}
... che gcc 4.5 compila a:
movl $2, 8(%esp)
movl $2, 4(%esp)
movl $LC0, (%esp)
call _printf
Can Chiedo un riferimento al costrutto? Grazie! – xanatos
I secondi xanatos. Cosa fa/significa? – 0xC0000022L
@xanatos, @STATUS_ACCESS_DENIED: consente di disporre di un blocco di istruzioni che valutano un valore. È molto utile per scrivere macro. È un'idea presa a prestito dal lisp in cui __every__ raggruppamento di affermazioni è così. – Omnifarious