这个问题是由Herb Sutter的一篇文章的回复引发的,他在那里解释了MS决定不支持/制作C99编译器,但只是采用了C++(11)标准中的C(99)功能.
一位评论者回答说:
(...)C很重要,值得至少注意一点.
有很多现有的代码是有效的C但不是有效的C++.该代码不太可能被重写(...)
因为我只使用MS C++编程,所以我真的不知道"纯粹的"C,即我没有准备好了解C++的细节 - 我正在使用的语言不在C(99)中,而且我几乎没有一些C99代码在C++编译器中无法正常工作的线索.
请注意,我知道只有C99的restrict关键字对我来说似乎有非常狭窄的应用程序和关于可变长度数组(我不确定它们有多广泛或重要).
此外,我很感兴趣是否存在任何重要的语义差异或陷阱,即C(99)代码将在C++(11)下编译,但使用C++编译器而不是C编译器执行不同的操作.
快速链接:答案中的外部资源:
除了'var'(参见我在这里的另一篇文章)之外,我真正喜欢C#的一个原因是我可以声明,然后使用大括号初始化类的成员,就像这样......
var reallyLongFooVarName = new ReallyLongFooClassName(){
Name = "I'm an instance of Foo",
ID = 23 };
Run Code Online (Sandbox Code Playgroud)
甚至在一条线上,像这样......
var longFooVarName = new ReallyLongFooClassName(){ Name = "I'm an instance of Foo", ID = 23 };
Run Code Online (Sandbox Code Playgroud)
这将创建一个ReallyLongFooClassName实例,然后设置其成员'Name'和'ID'.
这个编译成同样的东西,就像你输入这个......
ReallyLongFooClassName reallyLongFooVarName = new ReallyLongFooClassName();
reallyLongFooVarName.Name = "I'm an instance of Foo";
reallyLongFooVarName.ID = 23;
Run Code Online (Sandbox Code Playgroud)
那么Objective-C/C++有什么东西等同于C#的成员括号初始化吗?
注意:感谢我的另一篇文章,我已经知道'auto'是Objective-C++中的'var'等价物,但Objective-C没有任何这样的等价,这是一种耻辱.再次,请在此处查看我的其他帖子以获取更多信息.)
我知道写初始化器.这完全是一个不同的节拍.我在上面演示的技术在C#中使用属性的setter,或者直接设置成员变量而不必编写构造函数(它们等同于Objective-C的'init'成员.)必须编写init成员强制你必须预先指定您要设置的内容.成员大括号初始化允许您以任何您想要的顺序指定属性/成员变量的任意组合.同样,它只是一次编写多行代码的语法糖.它实际上并没有改变课程.