我想了解,在C 中,對未知邊界的陣列的參考是否可以作為函式的呼叫引數。
示例1
void func(int(&。 a)[])
{
}
int main()
{
cout << "Hello World" << endl;
int k[] = {1,2, 3};
//k[0] = 3;/span>
func(k)。
return 0;
令我驚訝的是,上面這個例子1在用GCC 10.1.0和C 11編譯時可以作業,但在GCC版本低于10.x時卻不能作業。但這樣一來,這段代碼是如何在以下鏈接中編譯的。成功編譯
我的第二個問題是,我們可以對一個函式模板這樣做嗎?比如說,
示例2
template<typename T1>。
void foo(int (&x0) [])
{
}
例子2在任何版本的C 代碼中都是有效的,如C 17等。我在一本書中看到了例子2的用法,他們把int (&x0)[]作為模板函式的一個函式引數。
uj5u.com熱心網友回復:
我不認為我們可以在C 中對未知大小的陣列進行參考。
這曾經是一種情況,盡管它被認為是一種語言缺陷。自 C 17 以來,它一直被允許。
注意,從已知邊界的陣列到未知邊界的陣列的隱式轉換--也就是你在例1的main中所做的--直到C 20才被允許。
例2在任何版本中都是有效的C 代碼,如C 17是的;模板對你是否可以擁有對未知邊界的陣列的參考沒有影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/314129.html
標籤:
