“min”成员的类的C ++初始化列表

我见过一个名为成员variablesminmax

 class A { public: A(); ~A(); bool min; bool max; ... }; 

与一个构造函数

 A::A() { min=false; max=true; ... } 

我试图用一个初始化列表来重写它:

 A::A():min(false), max(true){} 

但我收到警告+错误

 warning C4003: not enough actual parameters for macro 'min' error C2059: syntax error : ')' 

因为minmacros是在WinDef.h定义的

在这种情况下是否可以使用初始化列表而不重命名成员variables?

如果你有VS2013或其他现代编译器:

 A():min {false}, max {true} { } 

避免了这个问题,因为min(a,b)是一个函数式的宏,并且{无法启动它的参数列表。

这是特定于初始化列表,所以我已经重新打开这个问题。 表达式上下文中的“重复”建议地址宏使用,这是根本不同的 – 你可以在那里使用(min)

根据你的情况,你有几个选择。

  1. 使用@MSalters建议的大括号初始化

  2. 在包含Windows头文件之前定义NOMINMAX以避免定义minmax宏。 这取决于你的代码有多大以及你有多少控制权。

  3. 只要#undef宏。 只在源文件中推荐。

  4. 使用MSVC预处理器指令来保存,undef然后恢复宏。 像这样…

     #pragma push_macro("min") #undef min /* use min here */ #pragma pop_macro("min")