2015-05-11 6 views
14

che ho visto in diverse occasioni funzioni da definire con il qualificatore const tipo proprio così:Funzione valore di ritorno definito come una costante

const int foo (int arg) 

Qual è il punto in questo? valore di ritorno della funzione non può comunque essere cambiata ..

+0

C/C++ compilatori potrebbe comportarsi in modo diverso su questo. – Malina

+2

Non stai confondendo questo con 'const int * foo (int arg)', vero? Perché in quel caso il 'const 'avrà senso. – user694733

+0

Questo avrebbe davvero senso. Ma no, non lo confondo con questo. – Malina

risposta

10

Secondo le specifiche C (C99, punto 6.7.3):

Le proprietà associate ai tipi qualificati sono significative solo per le espressioni che sono lvalue.

Le funzioni non sono lvalue, quindi la parola chiave const non ha alcun significato. Il compilatore li ignorerà durante la compilazione.

Riferimento: Online C99 standard

+0

Sembra che questo sia vero anche in C11 secondo http://en.cppreference.com/w/c/language/const e lo standard di lavoro ISO/IEC 9899: 201x all'indirizzo http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf nella sezione 6.7.3 a pagina 120 ha la stessa lingua. –

12

In C, è davvero inutile, e compilatori può emettere segnalazioni corrispondenti:

$ echo 'const int foo (int arg);' | clang -Weverything -fsyntax-only -xc - 
<stdin>:1:1: warning: 'const' type qualifier on return type has no effect 
     [-Wignored-qualifiers] 
const int foo (int arg); 
^~~~~~ 
1 warning generated. 
+0

EiC e gcc in Windows non rilevano messaggi di avviso/errore. – Malina

+3

@Malina: gcc (utilizzando 4.9.2 qui) fa se si aggiunge '-Wextra' – Christoph