int main()
{
switch(std::string("raj")) //Compilation error - switch expression of type illegal
{
case"sda":
}
}
发布于 2018-03-22 20:36:12
正如前面提到的,编译器喜欢构建查找表,switch
尽可能地将语句优化为接近O(1)的时间。将此与C ++语言没有字符串类型的事实相结合 - std::string
是标准库的一部分,它不属于语言本身的一部分。
我会提供一个你可能要考虑的替代方案,过去我已经使用它来取得良好效果。而不是切换字符串本身,切换使用该字符串作为输入的散列函数的结果。如果你使用预定义的字符串,你的代码几乎与切换字符串一样清晰:
enum string_code {
eFred,
eBarney,
eWilma,
eBetty,
...
};
string_code hashit (std::string const& inString) {
if (inString == "Fred") return eFred;
if (inString == "Barney") return eBarney;
...
}
void foo() {
switch (hashit(stringValue)) {
case eFred:
...
case eBarney:
...
}
}
https://stackoverflow.com/questions/-100003667
复制相似问题