由于我们无法直接在switch-case语句中使用字符串,因为它们无法计算为常量,所以我将其映射到map<string,int>
中。使用映射<string,int>在switch-case语句中使用字符串
map<string,int> hash;
hash["+x"] = 0;
hash["-x"] = 1;
hash["+y"] = 2;
hash["-y"] = 3;
hash["+z"] = 4;
hash["-z"] = 5;
现在,我使用他们在的switch-case表达式:
cin >> bend //assume user entered +x
switch(hash[bend])
{
case hash["+y"] :
switch(pointedto)
{
case hash["+x"]: pointedto = hash["+y"];
break;
case hash["-x"]: pointedto = hash["-y"];
break;
case hash["+y"]: pointedto = hash["-x"];
break;
case hash["-y"]: pointedto = hash["+x"];
break;
case hash["+z"]: pointedto = hash["+z"];
break;
case hash["-z"]: pointedto = hash["-z"];
break;
}
}
我得到错误: an array reference cannot appear in a constant-expression
所有case
秒。我期待hash["+x"]
和其他人,返回int
这将导致一个常数。
PS:另一种方法是从C++11
constexpr
,但我很好奇,想用这个。
常量表达式可以在编译时进行评估。 'std :: map :: operator []'不是这些东西之一。 – DeiDei
_I期待hash [“+ x”]等,返回int *,这将导致一个常量。* _什么让你期望有[“something”]将导致常数= –
它*是*可能创建一个可以通过产生常量表达式的字符串进行索引的映射。创建它需要一点努力。我的[CppCon 2016](https://cppcon.org/2016program/)展示了如何创建基本版本。 [视频](https://channel9.msdn.com/Events/CPP/CppCon-2016/CppCon-2016-Dietmar-Khl-Constant-Fun)与我的开发者故事链接。 –