繁体   English   中英

为什么const char *强制转换为std :: string有效?

[英]Why does a const char* cast to std::string work?

这个演员让我困惑:

#include <string>
#include <iostream>
#include <memory>

using namespace std;

int main() {
    string str1 =  (string)"I cast this thing" +  " -- then add this";
    cout << str1 << endl;
}

有人可以解释为什么这个c样式转换为字符串工作(或被允许)? 我将生成的优化程序集与以下内容进行了比较

string str1 =  string("I construct this thing") +  " -- then add this";

它们似乎是相同的,所以我觉得我忘记了一些c ++语义,它实际上允许这种类型的转换/构造互换。

 std::string str2 =  std::string("I construct this thing") +  " -- then add this";

是的,如果你有一个构造函数接受一个像这样的参数,它将用于将参数类型转换为对象类型。 这就是为什么我们可以将const char*传递给带字符串的函数。

转换构造函数

C风格的演员阵容将进行常规演员和静态演员或重新演绎演员。

如果已定义,静态强制转换将使用用户定义的转换。

std::string有一个构造函数string(const char *)

语法std::string("something")static_cast<std::string>("something")(std::string)"something"是等价的。 它们都将使用std::string::string(const char *)构造std::string::string(const char *)构造一个临时的std::string 语法之间的唯一区别是在转换指针时。

std::string有一个构造函数的形式

basic_string( const CharT* s,
              const Allocator& alloc = Allocator() );

这充当转换运算符。 如果将字符串文字强制转换为std::string ,它将调用此构造函数并创建临时的std::string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM