1

例如,我的情况:
我输入“0”、“1”、“true”或“false”。(在任何情况下)
在性能、代码阅读、任何基本最佳实践方面的首选:

bool func(string param)
{
    string lowerCase = param;
    to_lower(lowerCase);
    if (lowerCase == "0" || lowerCase == "false")
    {
        return false;
    }
    if (lowerCase == "1" || lowerCase == "true")
    {
        return true;
    }
    throw ....
}

或者:

bool func(string param)
{
    string lowerCase = param;
    to_lower(lowerCase);
    regex rxTrue  ("1|true");
    regex rxFalse ("0|false");

    if (regex_match(lowerCase, rxTrue)
    {
        return true;
    }
    if (regex_match(lowerCase, rxFalse)
    {
        return false;
    }
    throw ....
}
4

2 回答 2

3

第二个更清晰,更容易扩展(例如:接受 "yes"and "no",或前缀,和"1|t(?:rue)?)"and "0|f(?:alse)?"。关于性能,第二个可以(并且应该)通过声明regex static (and const,而你在它),例如:

static regex const rxTrue ( "1|true" , regex_constants::icase );
static regex const rxFalse( "0|false", regex_constants::icase );

还要注意,通过指定不区分大小写,您不必将输入转换为小写。

于 2012-04-16T07:53:30.510 回答
1

这只是一种预感,但可能第一个会更快(不涉及正则表达式编译)。此外,第二个版本取决于您的编译器是否支持 C++11<regex>实现,因此根据您需要支持的环境,会自动排除第二个选项。

于 2012-04-16T07:29:04.017 回答