7
Kod:C++: czy funkcja ponownie deklaruje niezdefiniowane zachowanie?
#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 (testowane na g ++ 5.1):
x:0
x:1
Moje pytanie:
- Czy
int f(int x = 1);
deklaracji lub definicji? - Czy funkcja ta jest niezdefiniowanym zachowaniem?
Zauważ, że 'x = 0' i' x = 1' nie są "częścią" 'f()', to tylko konwencja wywołująca, która jest wykonywana w kontekście wywołującego. W związku z tym możesz nawet określić 'alloca()', wywołujący to nazwie, a nie 'f()' ... – lorro
Bez względu na to, czy jest to legalność, jest to skomplikowany, mylący kod i jako taki najlepiej unikać IMHO. –
[Potrzebujesz lepszego kompilatora lub potrzebujesz podkręcić ostrzeżenia] (http://coliru.stacked-crooked.com/a/1ad7569b3bd7556e). Twoja brakująca instrukcja return tworzy ten kod UB. – NathanOliver