首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >可以将默认值传递给std::string的引用吗?

可以将默认值传递给std::string的引用吗?
EN

Stack Overflow用户
提问于 2013-11-06 09:50:39
回答 3查看 7.1K关注 0票数 8
代码语言:javascript
运行
复制
void doStuff( std::string const & s1, std::string const & s2="");

我想知道这段代码在C++中对于s2字符串是否合法。我希望有一个默认参数,但传递一个引用,并将一个空字符串作为缺省值。是创建一个临时的,引用将指向该临时的,还是非法的C++?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-06 09:53:20

是的这是合法的。const将确保临时持续到功能doStuff完成。

§12.2.5

函数调用(5.2.2)中的引用参数的临时绑定一直保持到包含调用的完整表达式的完成为止。

票数 15
EN

Stack Overflow用户

发布于 2015-09-29 18:43:22

会更好

代码语言:javascript
运行
复制
void doStuff( std::string const & s1, std::string const & s2 = std::string());

以避免额外的临时const char *。(您的变体有两个临时变量:const char *和空std::string)。

或者,使用用户定义的文字(C++14):

代码语言:javascript
运行
复制
void doStuff( std::string const & s1, std::string const & s2 = ""s);
票数 4
EN

Stack Overflow用户

发布于 2013-11-06 10:00:40

要理解语义,最好是拆分原有的状态集。

代码语言:javascript
运行
复制
void doStuff( std::string const & s1, std::string const & s2="");

成两种说法

代码语言:javascript
运行
复制
void doStuff( std::string const & s1, std::string const & s2);
doStuff( SomeString, "" );

在函数的调用中,第二个参数被隐式转换为std::string类型的对象:

代码语言:javascript
运行
复制
s2 = std::string( "" );

实际上,在函数的主体中,您将拥有

std::string const &s2 = std::string( "“);

这是常量引用,s2将引用临时对象std::string( "“)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19808749

复制
相关文章

相似问题

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