GCC没有';我不喜欢C++;使用空格进行样式转换 我将一些C++代码移植到GCC,并且在Saves参与时,它不满意C++风格的转换,如未签名int(-1)< />代码>代码>长长(Stimar)…它给出了一个错误:在“long”之前应该有一个主表达式

GCC没有';我不喜欢C++;使用空格进行样式转换 我将一些C++代码移植到GCC,并且在Saves参与时,它不满意C++风格的转换,如未签名int(-1)< />代码>代码>长长(Stimar)…它给出了一个错误:在“long”之前应该有一个主表达式,c++,gcc,casting,g++,compiler-errors,C++,Gcc,Casting,G++,Compiler Errors,有没有什么方法可以与GCC达成和解,而不必逐一检查并用c风格重写?您需要静态演员(-1)和kin。这些往往被视为更具C++风格的强制转换,并且没有相同的问题 无论如何,你必须: template <typename T> struct identity { typedef T type; }; 模板 结构标识 { T型; }; 然后: identity<unsigned int>::type(-1); identity::type(-1); 或者在C++

有没有什么方法可以与GCC达成和解,而不必逐一检查并用c风格重写?

您需要
静态演员(-1)
和kin。这些往往被视为更具C++风格的强制转换,并且没有相同的问题

无论如何,你必须:

template <typename T>
struct identity
{
    typedef T type;
};
模板
结构标识
{
T型;
};
然后:

identity<unsigned int>::type(-1);
identity::type(-1);
或者在C++0x中:

template <typename T>
using id = T;

id<unsigned int>(-1);
模板
使用id=T;
id(-1);

GCC正确地指出--unsigned int(-1)是一种不符合C++03标准(5.4.2)的符号:

显式类型转换可以使用函数表示法(5.2.3)、类型转换运算符(动态转换、静态转换、重新解释转换、常量转换)或转换表示法表示:

因此,你可以用括号纠正演员阵容,遵循GMan提出的优秀建议:)——我真的推荐后者

编辑:函数表示法需要一个简单的类型说明符:

5.2.3-一个简单的类型说明符(7.1.5),后跟一个括号内的表达式列表,构成给定表达式列表的指定类型的值


简单类型说明符不包括复合类型说明符(带空格的类型)。

键入
静态类型(-1)
,但确实需要
std::numeric\u limits::max()
或者如果不适用,
UINT\u max

区别主要在于后两者表达了你想要的东西。将-1强制转换为无符号int的表达能力较差,因此不是首选的解决方案


一般来说,我更喜欢编写表达性代码。稍后你会感谢你自己,你的程序员同事和人力资源部也不会对你不屑一顾。

我相信他们是功能型演员。它们在C中无效。@rlbond:我想你是对的,我以为它们说的是(unsigned int)-1,这也不应该起作用。@GMan:谢谢。重点是类型名称周围没有括号,与C相反。我试图省去检查所有类型名称的麻烦,而不是特别避免/支持任何类型的强制转换。我想可能有一些转换/破解。@GMan,我找到了GCC没有解析它们的原因:)@GMan,我很高兴你也是一个身份活动家,现在是xDRelated:采取不同寻常的投票步骤来结束这个问题,因为在我看来,新问题更好。7.1.5.2/1描述了嵌套名称说明符(opt)类型名作为简单类型说明符的有效构造,稍后将
无符号字符
明确标识为有效的类型名。
cast-expression:
   unary-expression
   ( type-id ) cast-expression