g++ 和 gcc 分别是 gnu C++ 和 C 编译器。不过,它们实际上是具有不同标志的相同编译器。
MinGW 是“Windows 的极简主义 Gnu”。它是在 Windows 上运行的 gnu 编译器的一个端口。
Cygwin 是 gnu 编译器(和各种其他实用程序)到 Windows 的另一个端口。更准确地说(无论如何,IMO),它让编译器/程序在 POSIX 上运行,并移植 POSIX 层以在 Windows 上运行。
至于在它们之间进行选择:如果您正在运行 Linux,您可能只想为您正在使用的发行版获取一个 gcc/g++ 包。
如果您运行的是 Windows,则取决于您的意图。Cygwin 非常适合将现有的 Linux/POSIX 代码移植到 Windows。但是,如果您打算编写代码,并且只想要一个编译器,我会选择 MinGW。
另一个注意事项:MinGW.org 上的 MinGW 多年未更新。如果你决定去与MinGW的,我建议得到它从nuwen.net代替(它的更新非常规律)。