对于经验丰富的C++;程序员 < C++程序员在C++中开发的最常见或最严重的错误是什么? struct和class之间的差异 使用别名的与typedef 什么时候收集我的物品?我现在该怎么摧毁他们 一个int有多大?(它实际上是在C#中定义的) 我的链接器在哪里?(实际上,Mono在某些情况下确实有一个完整的AOT链接器)

对于经验丰富的C++;程序员 < C++程序员在C++中开发的最常见或最严重的错误是什么? struct和class之间的差异 使用别名的与typedef 什么时候收集我的物品?我现在该怎么摧毁他们 一个int有多大?(它实际上是在C#中定义的) 我的链接器在哪里?(实际上,Mono在某些情况下确实有一个完整的AOT链接器),c#,c++,C#,C++,呼叫GC.Collect 莱伊对伊迪斯波塞 值类型与引用类型(结构与类、装箱和拆箱等) 我在C语言中看到了COM风格中的许多C++代码,试图处理语言的不足之处。C语言为你的枚举提供了很多类型的安全支持,通常有更好的API,然后调用/调用回到C++。 我看到的另一件让大多数人感到困惑的事情是C#泛型不是模板 试图在strings上实现const正确性。认为“垃圾收集”=“我根本不必担心对象生命周期”。例如,打开一个FileStream,却忘记关闭它 或: 分配大量对象 将它们放入大型全球词典(通

呼叫
GC.Collect

  • 莱伊对伊迪斯波塞
  • 值类型与引用类型(结构与类、装箱和拆箱等)

我在C语言中看到了COM风格中的许多C++代码,试图处理语言的不足之处。C语言为你的枚举提供了很多类型的安全支持,通常有更好的API,然后调用/调用回到C++。


我看到的另一件让大多数人感到困惑的事情是C#泛型不是模板

试图在
string
s上实现
const
正确性。

认为“垃圾收集”=“我根本不必担心对象生命周期”。例如,打开一个
FileStream
,却忘记关闭它

或:

  • 分配大量对象
  • 将它们放入大型全球词典(通常在“我知道,我会缓存”之后)
  • 想知道为什么应用程序的内存使用总是上升而从不下降(“但它应该进行垃圾收集!”)
  • 混淆“参照传递”和“参照类型”:


    (与C++相比:
    void getAnArray(int-input,std::vector&output);

    每次编写完整的名称空间


    当你输入“<代码> STD::这个<代码>或<代码> Boo::那个< /代码>时,C++是很好的。当你重复代码< > St.Windows。窗体。无论是< /> > > > < /P> < P> >使用匈牙利符号和其他C++命名约定

    private int m_iMyIntField;
    class CWidget { ... }
    

    忘记为每个类成员指定访问修饰符

  • 始终使用有利于类的结构
  • 始终使用in、out和ref参数(这是第1点的结果)
  • 使用int值作为错误条件而不是使用异常
  • 使用虚拟关键字而不是override关键字
  • 认为字符是8位有符号值
  • 顺便说一句,C编译器有很多启发式方法来帮助那些有经验的C++程序员,是一个新手C程序员。例如,如果你说

    int x[];
    
    编译器将有助于指出[]是C#中类型的一部分,因此您可能是指

    int[] x;
    

    C也允许在类声明结束时不必要的分号,这样C++程序员就不会被它咬了。< /P> < P>一个让我感到非常的错误,我相信很多非C++的人也会因为注册的事件而导致内存泄漏。


    IDISPITION开始时(如果我诚实的话仍然如此),但是显然从本地到托管代码会有区别,所以这不是我希望C++开发者真正犯规的东西,他们只是不喜欢它。(PS——我不同意“主观且有争议的”结束投票。我认为这个问题不太可能引起争论!)一个定义良好的语言和环境的乐趣是多大的:)我觉得必须指出C++将其实现定义为编译器可以使用最具性能的本机类型而不是受规范的限制。如果您需要,可以使用大小类型。@在C99中标记有

    stdint.h
    。这还不是标准C++。(它在tr1中,但未在MSVC2008中实现)请参见stdint上的wiki条目。h@KitsuneYMG是的,它在C标准中,而不是C++,这就是为什么在VS2008中不支持它的原因,即使在Tr1中也是如此。然而,它是在boost中,并且只是头文件,所以它不会使您的exe变得更大;)误用匈牙利符号不是C++特有的,它更像Win32和MFC图书馆的人工制品。你是指像ImImPo界面或MyExcor?前三个声音更像C程序员会犯的错误…C++程序员,比如C程序员,通常认为使用值类型是很好的。在C++和C++中,3是同样错误的;这看起来更像是C程序员在这些语言中所做的事情。Re#3:“返回代码被认为是有害的”?很抱歉,但如果您需要收集中间结果并需要继续,则异常是不可接受的。枚举返回代码有其位置。尝试捕获控制“正则”流不是最大的想法。难道<代码>文件名> /COD>在其析构函数中,如<代码> fStase?@ HeLe:您不知道调用析构函数什么时候,所以最好手动调用或使用语义调用Delpices。C++中,您可以确定,一旦变量超出范围,就会调用析构函数,因此通常不需要显式地处理Resources(这是RAII的要点)。当CLR需要回收内存时,会调用
    FileStream
    终结器。如果有足够的内存,那么<> C++ > FielestRAM可能直到程序退出才最终确定。如果清理代码不是关键代码,那么您可以将其留给垃圾收集时间(完成)。如果确实需要确定性清理(如关闭文件句柄),请调用
    IDisposable.Dispose
    +1。我见过代码,程序员担心他的对象会留在内存中,他不断地调用它。“Judah Himango:我的意思是,在C++中,你使用标签。
    int[] x;