Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以将非枚举值作为枚举函数参数传递?_C++_Unit Testing_Enums_Reinterpret Cast - Fatal编程技术网

C++ 是否可以将非枚举值作为枚举函数参数传递?

C++ 是否可以将非枚举值作为枚举函数参数传递?,c++,unit-testing,enums,reinterpret-cast,C++,Unit Testing,Enums,Reinterpret Cast,我有一个函数如下所示: std::string SomeClass::convertStateToString(StateE state) const { std::string stateAsString; switch (state) { case UNKNOWN: stateAsString = "UNKNOWN"; break; case OFFLINE: stateAsString = "OFFLINE"; b

我有一个函数如下所示:

std::string SomeClass::convertStateToString(StateE state) const
{
  std::string stateAsString;
  switch (state)
  {
    case UNKNOWN:
      stateAsString = "UNKNOWN";
      break;
    case OFFLINE:
      stateAsString = "OFFLINE";
      break;
    case ENABLED:
      stateAsString = "ENABLED";
      break;
    case DISABLED:
      stateAsString = "DISABLED";
      break;
    default:
      stateAsString = "ABNORMAL";
      break;
  }
  return stateAsString;
}
其中,状态定义为:

typedef enum
{
  UNKNOWN      = 0,
  OFFLINE      = 1,
  ENABLED      = 2,
  DISABLED     = 3
} StateE;
出于单元测试的目的,我想向
convertStateToString
提供一些坏数据,并验证是否返回了
“异常”
。这可能吗

换句话说,是否可以将枚举范围之外的值作为In参数传递给函数,其中函数的签名表示该参数为枚举类型

在尝试了指针和重新解释转换之后,我几乎准备好声明函数
convertStateToString
在任何情况下都不能返回
“异常”


任何方法都不太老练

>无论C++试图执行适当的类型检查有多少种方式, 仍然可以只获取内存位置的地址并更改其内容。 例如:声明StateE类型的变量,获取其地址,在其中写入超出范围的值,然后将其传递给函数。
不管变量在C++中如何执行适当的类型检查,变量可能是不稳定的。 仍然可以只获取内存位置的地址并更改其内容。 例如:声明StateE类型的变量,获取其地址,在其中写入超出范围的值,然后将其传递给函数。
变量可能应该是易变的。

您可以在单元测试中写入以下内容:

convertStateToString(static_cast<StateE>(10));
convertStateToString(静态_cast(10));

这将强制您的代码通过交换机/机箱的“默认值”。

您可以在单元测试中编写:

convertStateToString(static_cast<StateE>(10));
convertStateToString(静态_cast(10));

这将强制您的代码以开关/机箱的“默认值”传递。

我看不出问题:

std::string convertStateToString(StateE state);

int main() {
    std::cout << convertStateToString(StateE(30)) << "\n";
}

我看不出有什么问题:

std::string convertStateToString(StateE state);

int main() {
    std::cout << convertStateToString(StateE(30)) << "\n";
}

像您想要强类型枚举的接缝:像您想要强类型枚举的接缝:是的,结果是reinterpret_cast是问题是的,结果是reinterpret_cast是问题是的,静态_cast起作用,reinterpret_cast不起作用。我现在觉得有点傻:)是的,静态的演员可以工作,重新解释的演员不能。我现在觉得有点傻:)