相关疑难解决方法(0)

C(99)和C++(11)之间有什么不兼容的区别?

这个问题是由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编译器执行不同的操作.


快速链接:答案中的外部资源:

c c++ c99 c++11

54
推荐指数
2
解决办法
8748
查看次数

Objective-C/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成员强制你必须预先指定您要设置的内容.成员大括号初始化允许您以任何您想要的顺序指定属性/成员变量的任意组合.同样,它只是一次编写多行代码的语法糖.它实际上并没有改变课程.

c# objective-c member-initialization

5
推荐指数
1
解决办法
479
查看次数

标签 统计

c ×1

c# ×1

c++ ×1

c++11 ×1

c99 ×1

member-initialization ×1

objective-c ×1