7
Codice:C++: è la funzione che ripresenta un comportamento non definito?
#include <iostream>
using namespace std;
int f(int x = 0) {
cout << "x:" << x << endl;
return 0;
}
int main() {
f();
int f(int x = 1);
f();
return 0;
}
Output (testato su g ++ 5.1):
x:0
x:1
La mia domanda:
- È
int f(int x = 1);
una dichiarazione o definizione? - È la dichiarazione di funzione come quella di un comportamento non definito?
nota che 'x = 0' e' x = 1' non sono 'parte di' 'f()', è solo una convenzione di chiamata che viene eseguita nel contesto del chiamante. Quindi, potresti anche specificare 'alloca()' lì, il chiamante lo chiamerà, non 'f()' ... – lorro
Indipendentemente dalla legalità, è un codice complicato e confuso e, come tale, è meglio evitare IMHO. –
[È necessario un compilatore migliore o è necessario attivare gli avvisi] (http://coliru.stacked-crooked.com/a/1ad7569b3bd7556e). La tua dichiarazione di reso mancante rende questo codice UB. – NathanOliver