C++具有"min"成员的类的初始化列表
C++ initialization list for class with "min" member
我见过一个类,其中有人将成员变量min
和max
命名为
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 : ')'
因为min
宏是在WinDef.h
中定义的
在这种情况下,是否可以在不重命名成员变量的情况下使用初始化列表?
如果您有VS2013或其他现代编译器:
A():min {false}, max {true} { }
避免了这个问题,因为min(a,b)
是一个函数式宏,而{
不能启动它的参数列表。
这是特定于初始值设定项列表的,所以我重新讨论了这个问题。建议的"重复"解决了表达式上下文中使用宏的问题,这从根本上不同——您可以在那里使用(min)
。
根据您的情况,您有几个选项。
-
按照@MSchanges 的建议使用大括号初始化
-
在包含windows头文件之前先定义
NOMINMAX
,以避免定义min
和max
宏。这将取决于你的代码有多大,以及你对它的控制程度 -
仅
#undef
宏。仅在源文件中推荐。 -
使用MSVC预处理器指令保存、取消定义然后恢复宏。就像这样…
#pragma push_macro("min") #undef min /* use min here */ #pragma pop_macro("min")
相关文章:
- C++类 - 初始化列表 - 递归 - 按值传递
- 在初始化列表之外手动调用基类的构造函数
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- std::map与谓词与初始化列表
- 类内初始化与构造函数初始化列表的顺序
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何在初始化列表中的构造函数之后初始化变量/对象?
- C++初始化列表与分配值
- C++初始化列表中的向量集大小或调整大小
- 在构造函数初始化列表中使用 std::variant
- emplace_back初始化列表错误,当初始化列表在独立变量上工作时
- 解释了构造函数成员初始化列表
- 使用初始化列表时如何获取私有数据?
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 如何在成员初始化列表中声明共享指针
- 庞大的初始化列表,如何修复"fatal error C1060: compiler is out of heap space"
- 我可以检查初始化列表中设置的构造函数主体中的变量吗
- 使用整数初始化列表初始化长双精度的向量
- 是否可以在C++中使用初始化列表设置数组的特定成员?