看《Data structures and algorithms analysis in C++》(4ed.Mark Allen Weiss, Pearson)书籍,发现里面的代码为C++11格式。但是我的电脑上安装的是vs2010,从时间上面推算vs2010肯定不支持C++11,于是我就想着在我的win7电脑上安装一个轻量级的能支持C++11标准的编译器。
经过在网络上的一段探索,决定使用Cygwin下面的gcc编译器。在Cygwin安装的过程中,在选择安装包的时候一定要收到选择gcc编译器的安装,默认情况下不包含gcc包。注意在devel下面选择gcc core,gcc,gdb,make,等安装包,其他的依赖关联的安装包会自动安装成功。以下几个方面要知道:
- 安装成功Cygwin后要设置环境变量,将path下添加C:\cygwin\bin。这样你就能在window cmd下也可以编译c++程序。
- 你在Cygwin terminal 下可以编译C++程序;在设置好环境变量后也可直接在window cmd下面编译和运行C++程序。
- 编译和运行C++程序要将源程序放置在文件夹C:\cygwin\home\Administrator下面,同时在windows cmd下面将当前文件夹转到该文件夹下。
- gcc用于编译C语言程序,而g++则用于编译C++程序,也就是编译以cpp为后缀名的程序,这一点要清楚,不要出现用gcc编译c程序的错误。
- g++编译cpp程序时,默认情况下不支持C++11,你需要使用如下命令才能支持C++11标准的程序:
g++ -std=c++11 ex2.cpp -o ex2
- gcc会在当前文件夹下,编译成功后产生ex2.exe可执行程序。在windows cmd下面,在当前文件夹下直接输入ex2即可执行该程序;而在Cygwin下,则需要安装linux风格的执行方式,即./ex2.exe。
我利用editplus编写了类模板的程序,使用C++11风格的代码,如下:
#include <iostream>
#include <string>
using namespace std;
/**
* A class for simulating a memory cell.
*/
template <typename Object>
class MemoryCell
{
public:
explicit MemoryCell(const Object & initialValue = Object{})
: storedValue{initialValue} {}
const Object & read() const {return storedValue;}
void write(const Object & x) {storedValue = x;}
private:
Object storedValue;
};
int main()
{
MemoryCell<int> m1;
MemoryCell<string> m2{"hello"};
m1.write(37);
m2.write(m2.read() + "world");
cout << m1.read() << endl << m2.read() << endl;
}
上述文件名为ex2.cpp,经编译成功后顺序产生ex2.exe,执行该程序,产生了正确的结果: