我可以使用哪个编译器?

时间:2012-01-04 09:19:27

标签: c++ compiler-construction

我必须导入并使用C ++项目。但是,如果没有Microsoft Visual Studio,我无法运行它。该项目的作者告诉我,我必须使用Microsoft编译器,因为只有这个可以处理他使用的特定符号(例如,在将其传递给方法时动态创建对象)。见例。

lights.push_back(Light(Vector(dirx,diry,dirz).normalize(), Color(colr, colg, colb)));

我之前必须创建一个矢量对象并将其传递给方法。

谁能告诉我可以使用哪种编译器? 我没有足够的位流来下载3 GB的Visual Studio。 伟大但不必要的是我可以在Mac OS上使用的编译器。

欢呼声。

2 个答案:

答案 0 :(得分:9)

任何C ++编译器都可以“在将对象传递给函数时动态创建对象”(这些通常称为临时对象或右值)。​​

Visual C ++可以做的事情是其他C ++编译器通常不能通过非const引用的参数将这些临时对象传递给函数。 C ++标准专门禁止这种行为,但MSVC允许它(微软称之为扩展名)。

我猜这是项目作者依赖的行为。

答案 1 :(得分:2)

如果您正在使用Mac OS,那么默认编译器是(对于最新版本)Clang(基于LLVM)。

你很幸运,因为Clang有一个兼容模式来解析通常非常先进的MSVC代码。例如,树版本的当前顶部能够在每个MFC生成的头附近进行解析。

您可以使用-fms-extensions激活此模式。