#include <iostream>
enum IsOptionAEnum
{
IsOptionA_YES,
IsOptionA_NO
};
enum IsOptionBEnum
{
IsOptionB_YES,
IsOptionB_NO
};
void TestFunc(IsOptionAEnum optionA, IsOptionBEnum optionB)
{
if (optionA == IsOptionA_YES || optionA == IsOptionB_YES) // typo
{
// ...
}
//if (optionA == IsOptionA_YES || optionB == IsOptionB_YES) // correct one
//{
//}
}
Run Code Online (Sandbox Code Playgroud)
问题> optionA是类型IsOptionAEnum,没有值IsOptionB_YES.为什么VS2010的编译器找不到这个错误?
如果是编译器无法找到错误的情况,有没有办法可以强制执行此限制,以便编译器可以找到错误?
Pre-C++ 11,枚举类型不提供您正在寻找的类型安全性,并且本质上是非常整数.
你想要强类型的枚举类:http:
//www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html
虽然标准不会使这个错误(枚举实际上是整数的语法),但这肯定是编译器可以检测到的.Clang,编译-Wenum-compare,给出:
Bonsai:~ adamw$ clang++ test.cpp
test.cpp:15:45: warning: comparison of two values with different enumeration
types ('IsOptionAEnum' and 'IsOptionBEnum') [-Wenum-compare]
if (optionA == IsOptionA_YES || optionA == IsOptionB_YES) // typo
~~~~~~~ ^ ~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)
可能是Visual C++默认情况下不会对此发出警告.尝试/Wall在编译器上设置标志,这将启用所有警告.如果它仍未发出警告,您可以向VC编译器团队提交请求.
编辑:正如其他答案和评论所提到的,如果您有VC11,则可以使用强类型枚举.
| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |