En C++ 11 se puede escribir (en caso de vacío):
somecondition ? foo() : [] {}() ;
Así que el NOP es en realidad una lambda vacía. Además de vacío, puede devolver cualquier tipo y valor.
Esto puede parecer un poco exagerado por sí mismo, pero supongamos que tiene esto:
somecondition1 ? foo1() :
somecondition2 ? foo2() :
somecondition3 ? foo3() :
flip_out_because_unhandled_condition() ;
Ahora bien, si alguien añade somecondition4, pero se olvida de incluirlo en el código de control, el software se llame a la flip_out_ .. .función que causa todo tipo de efectos no deseados. Pero tal vez alguna condición4 no necesita ninguna atención especial, solo necesita ser ignorada. Bueno, entonces usted podría escribir:
somecondition1 ? foo1() :
somecondition2 ? foo2() :
somecondition3 ? foo3() :
somecondition4 ? []{}() :
flip_out_because_unhandled_condition() ;
posible duplicado de [¿Cómo implemento no-op macro (o plantilla) en C++?] (Http://stackoverflow.com/questions/1306611/how-do -i-implement-no-op-macro-or-template-in-c) – user