使用'&燃气轮机&燃气轮机';跨gcc和visual c++; 我们正在编写一个应用程序,它同时使用GCC和VisualC++。一些团队成员仅使用Visual C++/Windows,而其他团队成员仅使用gcc/linux。由于编译器之间的差异,构建有时会中断。我已经修复了一些使用编译器选项来启用/禁用警告的构建中断的场景,但是目前我仍被C++模板中使用的“>”所困扰。p>

使用'&燃气轮机&燃气轮机';跨gcc和visual c++; 我们正在编写一个应用程序,它同时使用GCC和VisualC++。一些团队成员仅使用Visual C++/Windows,而其他团队成员仅使用gcc/linux。由于编译器之间的差异,构建有时会中断。我已经修复了一些使用编译器选项来启用/禁用警告的构建中断的场景,但是目前我仍被C++模板中使用的“>”所困扰。p>,c++,visual-c++,gcc,C++,Visual C++,Gcc,Visual Studio似乎单方面扩展了该标准,将“>>”作为有效表达式包含在模板中(这仅在建议的C++0x中有效)。但gcc不接受该模板作为有效模板。现在,我在Visual Studio中找不到禁止“>>”的选项,或者在gcc中找不到允许“>>”的选项。我应该如何进行 注意:这个问题是关于双角度支架的,而不是右移运算符。我会将它们分离到>>。这就是现行标准的要求;这是最正确和可移植的代码。据我所知,如果尖括号相邻,gcc甚至不会编译。我会将它们分隔为>>。这就是现行标准的要求;这是最正确和可

Visual Studio似乎单方面扩展了该标准,将“>>”作为有效表达式包含在模板中(这仅在建议的C++0x中有效)。但gcc不接受该模板作为有效模板。现在,我在Visual Studio中找不到禁止“>>”的选项,或者在gcc中找不到允许“>>”的选项。我应该如何进行


注意:这个问题是关于双角度支架的,而不是右移运算符。

我会将它们分离到>>。这就是现行标准的要求;这是最正确和可移植的代码。据我所知,如果尖括号相邻,gcc甚至不会编译。

我会将它们分隔为>>。这就是现行标准的要求;这是最正确和可移植的代码。据我所知,如果尖括号相邻,gcc甚至不会编译。

gcc当前()通过以下方式支持此功能:

g++ --std=c++0x -o output file1.cpp file2.cpp ...
您必须明确指定源代码是用C++0x标准编写的。

GCC当前()通过以下方式支持此功能:

g++ --std=c++0x -o output file1.cpp file2.cpp ...

您必须明确指定源代码是用C++0x标准编写的。

处理此类问题的方法是让自动构建和测试24小时运行,由签入触发。这也称为持续集成。当构建中断或测试失败时,您需要能够查找导致此问题的签入,并将矛头指向负责的开发人员


例如,有关跨平台执行此操作的工具,请参阅。

处理此类问题的方法是让自动构建和测试24小时运行,由签入触发。这也称为持续集成。当构建中断或测试失败时,您需要能够查找导致此问题的签入,并将矛头指向负责的开发人员



例如,有关跨平台执行此操作的工具,请参见。

是的,我的问题是使用Visual Studio的团队成员不介意使用“>>”。这会导致构建中断。然后需要强制执行编码标准。sbi的建议听起来不错。所有的程序员都需要编写适合每个人的代码。如果他们破坏了建筑,他们就做错了!Visual Studio还允许不写入
typename
来引用依赖于另一个模板的类型。你打算在那里做什么?问题很简单,解决办法也很简单。如果你想移植,使用标准的C++而不是编译器扩展。您可以建议VS开发人员也使用MinGW定期编译他们的代码,并修复出现的错误。@David,@Matteo您所说的有道理。然而,我们工作在一个研究环境中,不幸的是,与软件开发相反的研究占据了大部分时间。我们时间紧迫。有些程序员是新手,理想的情况是在他们使其他人变得复杂之前简化他们的生活。是的,我的问题是使用Visual Studio的团队成员不介意使用“>>”。这会导致构建中断。然后需要强制执行编码标准。sbi的建议听起来不错。所有的程序员都需要编写适合每个人的代码。如果他们破坏了建筑,他们就做错了!Visual Studio还允许不写入
typename
来引用依赖于另一个模板的类型。你打算在那里做什么?问题很简单,解决办法也很简单。如果你想移植,使用标准的C++而不是编译器扩展。您可以建议VS开发人员也使用MinGW定期编译他们的代码,并修复出现的错误。@David,@Matteo您所说的有道理。然而,我们工作在一个研究环境中,不幸的是,与软件开发相反的研究占据了大部分时间。我们时间紧迫。有些程序员是新手,理想的情况是在使其他人复杂化之前简化他们的生活”。问题是C++0x是实验性的,即随着标准的发展,一些特性可能会被删除。但这可能是我必须采取的方法。@Amit Kumar:是的,这是实验性的,但是
直角括号
功能将永远存在。但是
>
也将永远有效,并且还有一个额外的优点,那就是它现在也可以工作。为GCC启用C++0x扩展的问题可能是,这将使GCC用户引入VC无法处理的代码。对不起,我不喜欢这个建议。当你在做跨平台的事情时,你需要满足于所有平台上的可用性和稳定性。C++1x不是。@Amit:不会从中删除功能。这是一个完整的特性,从现在开始他们所做的唯一更改就是一些小的错误修复和措辞上的更改。问题是C++0x是实验性的,也就是说,随着标准的发展,一些特性可能会被删除。但这可能是我必须采取的方法。@Amit Kumar:是的,这是实验性的,但是
直角括号
功能将永远存在。但是
>
也将永远有效,并且还有一个额外的优点,那就是它现在也可以工作。为GCC启用C++0x扩展的问题可能是,这将使GCC用户引入VC无法处理的代码。很抱歉