【发布时间】:2010-03-11 12:25:15
【问题描述】:
当有经验的 C++ 程序员使用 C# 开发时,最常见或最严重的错误是什么?
【问题讨论】:
-
社区维基,也许吧? (PS - “主观和争论”的结束投票,我不同意。我认为这个问题不太可能导致争论!;)
当有经验的 C++ 程序员使用 C# 开发时,最常见或最严重的错误是什么?
【问题讨论】:
struct和class的区别using 别名和typedef 之间的区别
int 有多大? (其实是用C#定义的)【讨论】:
stdint.h。这在标准 C++ 中还不是。 (它在 tr1 中,但未在 MSVC 2008 中实现)请参阅 stdint.h 上的 wiki 条目
我见过许多 C++ 程序员在 C# 中以 COM 风格编写代码,试图处理语言的不足之处。 C# 为您的枚举提供了大量类型安全的支持,并且通常有更好的 API,然后 P/Invoking 回到 C++。
我看到的另一件事引起大多数人的注意是 C# 泛型不是模板。
【讨论】:
致电GC.Collect。
【讨论】:
【讨论】:
认为“垃圾收集”=“我根本不必担心对象的生命周期”。例如,打开FileStream 却忘记关闭它。
或者:
【讨论】:
FileStream 不会像 fstream 那样在其析构函数中关闭吗?
FileStream 终结器。如果有足够的可用内存,那么在程序退出之前FileStream 可能不会最终确定。
IDisposable.Dispose。
混淆“按引用传递”和“引用类型”:
void GetAnArray(int input, ref string[] output);
(与 C++ 比较:void getAnArray(int input, std::vector<std::string>& output);)
【讨论】:
【讨论】:
每次都编写完整的命名空间。
当您键入 std::this 或 boost::that 时,这在 C++ 中很好。当你到处重复 System.Windows.Forms.Whatever 时,在 C# 中就不那么好了。
【讨论】:
顺便说一句,C# 编译器中有许多启发式方法可以帮助有经验的 C++ 程序员和新手 C# 程序员。例如,如果你说
int x[];
编译器会帮助指出 [] 是 C# 中类型的一部分,因此您可能的意思是
int[] x;
C# 还允许在类声明的末尾放置不必要的分号,这样有这种习惯的 C++ 程序员就不会被它所困扰。
【讨论】:
忘记为每个类成员指定访问修饰符。
【讨论】:
public,因为之前的方法也是公开的。我看到这种情况一直发生在学习 C# 的 C++ 程序员身上。
尝试在strings 上实现const 的正确性。
【讨论】:
我相信很多非 C++ 人也是如此,因为注册事件使对象保持活动状态而导致内存泄漏。
IDisposable 一开始就被磨碎了(如果我说实话,现在仍然如此),但从本机代码到托管代码时显然会有所不同,所以我不希望 C++ 开发人员真正犯规,他们就是不喜欢。
【讨论】:
使用匈牙利表示法和其他 C++ 命名约定
private int m_iMyIntField;
class CWidget { ... }
【讨论】: