Napotkałem działający (z kompilatorami XLC8 i MSFT9) fragment kodu, zawierający plik C++ z funkcją zdefiniowaną przez C linkage i argumentem referencyjnym. To powoduje błędy, ponieważ referencje dotyczą tylko C++. Dana funkcja jest wywoływana z kodu C, gdzie jest zadeklarowana jako przyjmująca argument wskaźnika do tego samego typu zamiast argumentu referencyjnego.Argument o przywołaniu C++ i C linkage
uproszczony przykład:
C++ plik:
extern "C" void f(int &i)
{
i++;
}
C plik:
void f(int *);
int main()
{
int a = 2;
f(&a);
printf("%d\n", a); /* Prints 3 */
}
Teraz Słowo na ulicy jest to, że większość C++ kompilatory, pod maską implementuj referencje tak jak wskaźnik. Czy tak jest, i czy tylko szczęście powód, dla którego ten kod działa lub czy mówi gdzieś w specyfikacji C++, jaki jest wynik, kiedy definiujesz funkcję z argumentem referencyjnym i łączem C? Nie byłem w stanie znaleźć żadnych informacji na ten temat.
Z tego co widzę, sekcja 7.5 Standard C++ (specyfikacja sprzężenia) nie mówi nic na ten temat. –