我是一位经验丰富的C#开发人员,我应该知道在c / c ++中有效编码的内容是什么?

时间:2009-10-12 17:20:11

标签: c# c++ c

我在大学的c / c ++方面有一点经验,但多年没有参与其中。即使考虑到c / c ++职位,我还需要知道哪些事情?

19 个答案:

答案 0 :(得分:17)

指针算法可能位于列表的顶部。此外,很好地理解非托管世界中的内存管理会有所帮助 - 比如记住删除使用 new 构建的内容。

答案 1 :(得分:15)

答案 2 :(得分:9)

我不同意你收到的很多建议。您应该专注于手动内存管理。在C中很难避免手动内存管理。但是,大多数C ++代码几乎不需要使用手动内存管理。手动内存管理在大量代码中被严重过度使用,导致许多容易避免的问题。

研究的第一个也是最重要的是标准库。它与.NET有很大的不同(说得客气一点)。我的直接建议是获取 Accelerated C ++ 的副本,并完成它。它专为完全符合您职责的人设计(即学习C ++,但已经拥有至少一种其他语言的经验),对于这种情况,我很确定没有更好的书可用。

编辑:(主要是回应肯尼的评论) - 特别是如果你维护现有的代码,你很可能会被困在了解任何理智的人可能会遇到的各种不愉快相当避免。同样,根据您加入的团队,即使在新代码中,您也可能会遇到丑陋。不幸的是,如果没有相当多的语言背景和经验,可能根本不清楚要寻找什么。

答案 3 :(得分:6)

从实际的角度来看,我会说优先考虑的是你在对象生命周期的手动管理中给自己一个锻炼。 C#和.Net世界中的节省时间是垃圾收集器提供的神奇功能。一个人仍然需要管理托管世界中的内存,但这是一个更简单的任务,并不一定与维护对象所有权和生命周期的心理模型有关。

在C / C ++中,您将重新进入毛茸茸的内存管理,生命周期管理和对象所有权的世界。

答案 4 :(得分:3)

我希望我的指针指向指针宝贝!

答案 5 :(得分:2)

这取决于你有什么经验。几乎没有人有C#内外的所有经验。 有一点可能是内存管理。另一方面,如果您对C#不安全代码有很多经验,那么您几乎已经了解了所有内容。 其他的东西可能是平台/ com的东西。如果您已经进行了大量的互操作编程,那同样的事情。 为了有效,你可能只需要一些练习。编程风格通常也大不相同。

答案 6 :(得分:1)

如果您已经了解C#,那么您可能想要了解的最重要的事情是内存管理,指针/引用和(对于C ++)STL。

答案 7 :(得分:1)

我认为这取决于你所说的C / C ++职位。对于嵌入式工作,您最好使用指针并理解'volatile'关键字。对于更高级别的东西(特别是在C ++中),你可能想学习一些流行的库(STL,boost等)。对于大多数C编程来说,熟悉POSIX会很重要。

我认为,第一个带有子弹的内存管理。这意味着malloc / free,new / delete,所有其他奇怪的C ++东西(复制构造函数)和指针一般。

答案 8 :(得分:1)

指针受伤,小心处理!

答案 9 :(得分:1)

我能想到的最重要的建议:不要尝试在C ++中应用C#代码实践。避免使用新的,使用免费函数创建对象,忘记反射......只需将其视为一种非常不同的语言,并尝试从头开始学习。

答案 10 :(得分:0)

如果您计划在Windows平台上工作,可以选择Advanced Windows Debugging的副本,其中包含对Windows开发人员可用的各种调试工具的精彩介绍。

答案 11 :(得分:0)

在我看来,你需要学习/刷新几件事:

  1. 指针(经典指针和智能指针),新/删除所有内容
  2. STL。几年前,有很多人将C ++视为“带课程的C”。这当然不是重点。了解STL不仅可以为您节省大量时间,而且还可以让您更好地了解如何在C ++中(在您的代码中)完成某些事情,以使其易于用于其他开发人员。
  3. 模板。我知道大多数人认为模板很容易,但如果你深入挖掘一下;)
  4. 升压。就像STL一样,Boost中有很多有趣的东西可以用在你的日常工作中。
  5. 我认为那些是最重要的。

答案 12 :(得分:0)

将自己击中头部,直到你感到疼痛的能力消失为止。

答案 13 :(得分:0)

我会从不同的角度处理内存管理:阅读一本关于copmuter架构的书,以了解内存的真实含义,然后再刷新汇编器。这将让你了解引擎盖下发生的事情(在C中非常薄)。 C ++可以帮助你提升一点,但是汇编程序仍然潜伏着。

实际上,C ++是带有类和C的C语言。模板。这有点简化,在技术上是不正确的,但可以让你80%的方式。

然后...购买:

  • Kernighan和Ritchie的C编程语言。那是 C书。

  • Strousoup的C ++编程语言;这是标准的C ++参考。

根据您获得的深度和硬核程度,您可能希望获得Effective C ++书籍和Accelerated C ++。

答案 14 :(得分:0)

首先要学习:C和C ++是两种不同的语言。即使在代码在两者中都有效的情况下,两者中的代码通常都不是很好(有时两者都没有)。

选择其中一种语言并学习它。如果你愿意,那就去学习另一个。 C ++更复杂,但你已经熟悉了很多。 C不那么复杂,但与C#有所不同。使用C,您可以在较低的级别编程,更靠近机器,这可能是理想的或不合需要的。

答案 15 :(得分:0)

正如其他人所说,指针和内存管理应该是您的首要任务。你肯定需要理解指针。这是C / C ++编程中最难的概念。似乎很多人都无法理解指针,直到你做到了,你永远不会成为C或C ++程序员。

是的,有很好的库可以为你处理内存管理,但是,因为有很多代码是在没有这些库的情况下开发的,所以你可能会处理一些mallocs / frees或new / delete。当然,除非您有兴趣进入一个只编写新代码的工作,并且您可以从一开始就“正确地做事”。如果你找到那家公司,请告诉我。我也想提交简历!

答案 16 :(得分:0)

首先是内存管理,包括指针......

学会跨平台编写一些东西(这就是我喜欢的东西;))

答案 17 :(得分:0)

除了指出的指针运算之外,内存管理是一个很大的问题。

答案 18 :(得分:0)

即使在获得位置后,也可以随时拾取语法。需要考虑的重要事项是如何解决问题。什么算法可以更好地解决特定问题。你还记得多少面向对象的编程。你用指针和指针算法有多好。

我认为忘记一些语法是正确的,最重要的思考是如何解决问题。