我遇到了一個可以工作(使用XLC8和MSFT9編譯器)的代碼片斷,其中包含一個C++文件,其中包含一個使用C鏈接和引用參數定義的函數。這讓我感到不安,因爲引用僅僅是C++。所討論的函數是從C代碼中調用的,在C代碼中聲明瞭一個指針參數來代替參考參數。C++引用參數和C鏈接
簡化的例子:
C++文件:
extern "C" void f(int &i)
{
i++;
}
C文件:
void f(int *);
int main()
{
int a = 2;
f(&a);
printf("%d\n", a); /* Prints 3 */
}
現在,街道上的字是大多數C++編譯器,在引擎蓋下,像指針一樣實現引用。它是這樣的,只是純粹的運氣這個代碼的工作原理,或者說它在C++規範中的某處說什麼當你用一個引用參數和C鏈接定義一個函數時結果是什麼?我一直無法找到關於此的任何信息。
從我所看到的第7.5節C++標準(鏈接規範)對此沒有任何說明。 – 2009-12-15 09:08:32