首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >string,string val和string val =“

string,string val和string val =“
EN

Stack Overflow用户
提问于 2014-04-30 17:53:12
回答 1查看 441关注 0票数 1

我试图将std::string作为默认参数传递给函数。

我试着像下面这样

代码语言:javascript
复制
void string_fun(int i, string val = "", int j = 10)
// void string_fun(int i, string val, int j = 10) // <-- error since no default value
{
    cout << "values " << endl;
    cout << "i: " << i << endl;
    cout << "val: " << val << endl;
    cout << "j: " << j << endl;
}

void ret_fun()
{
    string fun;
    cout << "values " << endl;
    cout << "fun: " << fun << endl;
}

int main()
{
    string_fun(3);
    ret_fun();
    return 0;
}

我听说一个字符串的默认构造函数将初始化这个字符串,如果正确的话,它的值是什么?看看这里,如果我只使用string val作为函数的参数,我将得到编译错误。但是,当我同时打印字符串valfun时,我得到的输出是相同的。我的问题是,是什么使这两个字符串在值不同的情况下不同,因为string val = ""还创建了一个空字符串。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-30 17:58:33

您正在查看函数的参数列表,因此规则是不同的。std::string是否有默认构造函数并不重要。

关键是语言的参数列表规则确保允许或不允许调用方从调用中省略参数。当给定默认值时,调用方可以省略该参数,并使用默认值。如果没有默认值,调用方必须提供适当的参数。

如果省略第二个参数的默认值,则调用

代码语言:javascript
复制
string_fun(3);

不编译,因为它至少需要两个参数。您甚至可以在调用中使用默认构造函数:

代码语言:javascript
复制
string_fun(3, string());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23394872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档