结构内部定义C和C ++中的差异

时间:2014-02-20 22:17:29

标签: c++ c struct

我正在尝试

typedef struct
{
    int x = 5;
    char str[20];
}  nodeStr;

它适用于C ++,但不适用于C.要使其在C中工作,我需要从代码中删除x(即= 5)的定义。在C和C ++中有没有概念上的区别来解释这个?谢谢!

2 个答案:

答案 0 :(得分:4)

类内初始化是一种新的C ++ 11特性 - 如果你使用(不多)旧的C ++编译器,它就不会编译。所以是的,这是C和C ++之间的区别。

答案 1 :(得分:2)

在C ++中,结构与类几乎相同,因此它们可以有构造函数。

// note: removed the typedef to make it slightly clearer
struct nodeStr
{
    int x = 5;
    char str[20];
};

与:

相同
struct nodeStr
{
    int x;
    char str[20];

    nodeStr()
    {
        x = 5;
    }
};

C没有构造函数,因此无法执行此操作。

无论如何,这是概念上的原因。实际的原因要么“因为语言如此说”或“因为他们从未将其添加到C语言中”。