noti che le seguenti due funzioni hanno lo stesso tipo e firma:Perché i modificatori di argomento (ad esempio, 'const' o 'volatile') non sono considerati parte del tipo o della firma di una funzione?
void foo1(int t) {} // foo1 has type 'void(*)(int)', and signature '(*)(int)'
void foo2(const int t) {} // Also type 'void(*)(int)', signature '(*)(int)'
(il const
non fa parte del tipo di funzione o la firma funzione). Analogamente, un modificatore (const
o volatile
) sul tipo restituito non influenza il tipo di funzione o la firma della funzione.
Tuttavia, nella definizione della funzione stessa (non mostrata), la variabile denominata t
mantiene la qualifica const
in foo2
.
Ci sono molte domande StackOverflow discutere il motivo per cui il tipo ritorno della funzione non è considerata come parte della funzione di firma (utilizzato per la risoluzione di sovraccarico).
Tuttavia, non riesco a trovare alcuna domanda StackOverflow che chiede perché i modificatori degli argomenti (const
o volatile
) non fanno parte del tipo o della firma della funzione. Inoltre, ho cercato direttamente nel documento degli standard C++ 11 e ho trovato difficile sbrogliare.
Qual è la logica alla base del fatto che i modificatori degli argomenti (ad esempio, const
e volatile
) non fanno parte del tipo o della firma di una funzione?
ADDENDUM Per chiarezza, dalla risposta di R.MartinhoFernandes sotto, devo precisare che in C++ (credo) i modificatori di argomento const
e volatile
vengono ignorate solo come parte del tipo di funzione/firma se sono top- Modificatori di livello - guarda la risposta qui sotto.
Il tipo di ritorno * è * parte della firma della funzione. Non è considerato per la risoluzione dei sovraccarichi. I due sono idee separate. –
Non posso darti la risposta ufficiale al C++, ma dal punto di vista dell'utente non farebbero differenza. Se un utente chiama foo1 o foo2, l'utente lo farà con un int. È nell'implementazione che il modificatore const avrà un effetto. Dal momento che una firma è fondamentalmente l'interfaccia (a cui interessa l'utente), non sarebbe opportuno differenziare. – RonaldBarzell
@ R.MartinhoFernandes Io non la penso così - vedi, ad esempio, http://stackoverflow.com/questions/13687607/is-the-only-purpose-of-a-function-signature-as-opp-to -type-to-define-dupl –