myPreciousFunction(std::string s1 = "", std::string s2 = "")
{
}
int main()
{
myPreciousFunction();
}
我可以让参数看起来更漂亮吗? 如果没有提供参数,我希望有空字符串。
答案 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 = "")
{
}