学习C++时会遇到什么,如果我来自PHP/Java?

ari*_*ayu 4 php c++ java qt-maemo

我需要学习C++才能学习构建Nokia WRT和/或maemo应用程序.我需要知道我需要/必须学习或关注更多的问题和C++的哪些方面.我想到的一件事是C++没有垃圾收集器.因此,我需要关注变量类型.但是,有没有其他非常重要的我不能忽视它?

Ste*_*sop 13

主要的问题是尝试根据它与PHP或Java的不同来设想C++.

对不起,它只是不起作用.除了算术语法之外,C++在几乎所有重要方面都与这些语言不同.有时差异很微妙.你需要学习新的东西,而不要认为在PHP或Java中适合做的事情在C++中适合你.

也就是说,常见的困难包括:

  • 资源管理:RAII; 实现复制构造函数,析构函数和operator=; 避免必须实施复制ctors,dtors,operator =.
  • 了解什么是引用,指针,值和自动变量.
  • 避免未定义的行为(myarray[i] = i++;是最喜欢的).PHP和Java都是比C++更"严格"定义的语言:首先,程序的行为更可能被定义,因此更可靠.因此,单独的实现比C++实现更相似.用C++编写程序非常容易,它不仅仅是做错事,它在不同的运行中做了截然不同的事情,包括崩溃,破坏数据等.
  • 学习安全有效地使用模板,多重继承,操作员重载以及其他您不熟悉的功能.
  • 用于抛出和捕获异常的正确习惯用法(按值抛出,通过引用捕获,不要抛出析构函数).
  • 编写可移植代码(理解标准保证之间的区别,以及不保证但实际执行的内容之间的差异.实现定义的行为,例如基本类型的大小).
  • 与Java或PHP相比,C++的标准库是有限的.您也将使用非标准库.例如,Maemo使用GTK +和/或Qt.通常,"如何在C++中执行X"的答案是,"您不能仅使用标准C++,需要特定于平台的API或为您的系统编译的可移植库".X可以是图形,套接字,正则表达式,多线程,XML处理,加密.特别是对于移动平台,您需要密切关注操作系统版本,事情可能并且将会不时发生变化.