2011-09-08 25 views
0
static struct inet_protosw inetsw_array[] = 
{ 
    [0] = { /* assignment by index */ 
     .type =  SOCK_STREAM, /* assignment by field */ 
     .protocol = IPPROTO_TCP, 
     .prot =  &tcp_prot, 
     .ops =  &inet_stream_ops, 
     .no_check = 0, 
     .flags =  INET_PROTOSW_PERMANENT | 
       INET_PROTOSW_ICSK, 
    }, 
} 

上述代碼在C中工作,但不在C++中工作。我認爲這兩種方法非常好。 C++如何刪除它?通過索引或字段分配在C++中不起作用

PS:看來字段賦值可以實現: 類型:SOCK_STREAM

+0

更多關於此,http://stackoverflow.com/questions/4900739/why-are-designated-initializers-not-implemented-in-g – jweyrich

回答

0

如果我沒有記錯,ISO C99引入了初始化指示符[0].type,並且自從1998年出現C++標準以來,它並沒有包含這些特徵。

而且在C++ 11中也是不可能的。標準中的相關部分是8.5.1聚合體,該部分中的所有示例都沒有指示符。

+0

在C++ 11中不可能。 – jweyrich

+0

感謝您的提示,我更新了答案。 –

4

C和C++是不同的語言。此代碼示例使用C中存在的對象初始化功能,並且不存在於C++中。

這不是「C++移除它」,而是C++從它分支出來時它不是C的一部分。

+0

那麼說...... –

+0

是的。這兩個特性已添加到新版本gcc – pengguang001