(gelöst) [C++]const eines Parameters für Linker relevant?
Verfasst: 30.03.2018, 11:09
Sagen wir, ich habe zwei .cpp-Dateien.
Die eine definiert eine Funktion
void foo(int * const x) {
// tut nix weil Beispiel
}
In der anderen .cpp wird diese Funktion deklariert:
void foo(int *); // KEIN CONST!
Visual C++ kann dann nicht mehr kompilieren (Linkerfehler, Funktion nicht gefunden).
Ich bin mir recht sicher, dass das ein Linker-Bug ist:
Die eine definiert eine Funktion
void foo(int * const x) {
// tut nix weil Beispiel
}
In der anderen .cpp wird diese Funktion deklariert:
void foo(int *); // KEIN CONST!
Visual C++ kann dann nicht mehr kompilieren (Linkerfehler, Funktion nicht gefunden).
Ich bin mir recht sicher, dass das ein Linker-Bug ist:
- Ich glaube, der C++-Standard schreibt vor, dass const an by-value-Parametern keine Auswirkungen auf die Signatur hat. (Weil es ein Detail der Implementierung ist und in der Deklaration nichts verloren hat.)
- Wenn man die Deklaration vor die Definition kopiert, kompiliert es plötzlich. (Das entspricht etwa dem #include eines Headers.)
- Wenn man die Funktion von int *-Parameter zu int-Parameter ändert, kompiliert alles. Das passiert irgendwie nur mit Zeigern. (Ich hatte vor fünf Jahren ein Ticket eröffnet mit int als Beispiel. Mich beschleicht das Gefühl, dass sie nur den Fall gefixt und Zeiger vergessen haben.)