默认字符串参数

时间:2010-05-01 09:45:20

标签: c++

myPreciousFunction(std::string s1 = "", std::string s2 = "")
{
}

int main()
{
    myPreciousFunction();
}

我可以让参数看起来更漂亮吗? 如果没有提供参数,我希望有空字符串。

6 个答案:

答案 0 :(得分:17)

你可以考虑这个:

myPreciousFunction(std::string s1 = std::string(), std::string s2 = std::string())
{
}

但它看起来并不漂亮。

此外,如果您传递字符串,则可能希望将其作为const&传递:

myPreciousFunction(const std::string& s1, const std::string& s2)
{
}

这是避免处理数据的标准方法。

答案 1 :(得分:11)

实际上还有另一种解决方案。

const std::string empty = std::string();

myPreciousFunction( const std::string &s1 = empty, const std::string &s2 = empty)

这样做的好处是可以避免构造临时物体。

答案 2 :(得分:2)

另一种方法是使用重载函数,例如

myPreciousFunction(std::string s1, std::string s2)
{
   // primary implementation
}

myPreciousFunction(std:string s1)
{
    myPreciousFunction(s1, "");
}
myPreciousFunction()
{
    myPreciousFunction("", "");
}

虽然我不确定这是否更漂亮,但在代码方面肯定不那么有吸引力。 (默认参数是为了避免这种情况。)

答案 3 :(得分:0)

您可以使用支撑初始化:

myPreciousFunction(const std::string& s1 = {}, const std::string& s2 = {})
{
}

答案 4 :(得分:0)

您可以使用boost optional或std optional(C ++ 17),这样您就不必调用字符串的构造函数。这将为您提供真正的可选参数。这些解决方案是字符串""

的默认参数

答案 5 :(得分:-4)

您可以省略命名空间限定符以使其看起来更清晰。

using namespace std;

void myPreciousFunction(string s1 = "", string s2 = "")
{
}