printf
Lo standard di conversione %
prevede un puntatore a un array char
. Notare la mancanza di const
. Posso vedere le ragioni di ciò in C, e poiché C++ incorpora lo standard C99, questo non cambierebbe. Tuttavia, se sto scrivendo il mio printf
, posso tranquillamente convertire l'argomento const char*
invece ?:printf% s const char *
case 's' :
ptr = va_arg(va, const char*);
_puts(ptr, strlen(ptr));
break;
Sarebbe questo avere la semantica non intenzionali (nota: Non sto chiedendo su un comportamento indefinito, perché un tale l'implementazione non sarebbe comunque conforme)?
perché mai hai bisogno di puntini di sospensione in C++ 11 ???? – SergeyA
Rispondendo alla domanda diretta, non avrà alcun effetto. va_arg è una macro e utilizzerà semplicemente qualunque tipo tu abbia fornito. – SergeyA
È possibile chiamare una funzione con 'char const *' utilizzando una variabile non const. Quindi ti consiglio di usare il tipo 'char const *' nella tua funzione. –