首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将char[]解释为参数中的const std::string

如何将char[]解释为参数中的const std::string
EN

Stack Overflow用户
提问于 2010-12-24 10:23:11
回答 6查看 900关注 0票数 2

我最近意识到我可以这样做:

代码语言:javascript
复制
void someFunc(const std::string &str)
{
   //content
}

...
someFunc("Hello World"); //this works

我想知道它是如何工作的,为什么它会工作。

谢谢

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-24 10:25:55

它之所以有效,是因为std::string有一个来自const char *的构造函数,该构造函数没有被标记为explicit。如果需要使参数匹配,C++编译器将插入对一个这样的构造函数(每个参数)的调用。

票数 5
EN

Stack Overflow用户

发布于 2010-12-24 10:28:54

您的示例实际上演示了相反的情况: const char数组被解释为std::string。(顺便说一下,字符串文字不是字符,它是一个字符数组( const char[N] -a char array ),而不是字符指针)。

它工作的原因是字符数组可以通过std::string的转换构造函数隐式转换为std::string。编译器将按照C++语言的重载解析规则为您执行转换。

票数 4
EN

Stack Overflow用户

发布于 2010-12-24 10:26:25

这之所以有效,是因为编译器在调用someFunc()之前在调用方中创建了一个std::string类型的临时对象。

编译后的代码将大致相当于以下代码:

代码语言:javascript
复制
{
    std::string _temp1("Hello World");
    someFunc(_temp1);
}

(我将代码放在大括号中,以显示在调用someFunc()返回后将立即执行_temp1析构函数。)

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

https://stackoverflow.com/questions/4523841

复制
相关文章

相似问题

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