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

Mik*_*ery 4 c++

这个演员让我困惑:

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

using namespace std;

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

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

string str1 =  string("I construct this thing") +  " -- then add this";
Run Code Online (Sandbox Code Playgroud)

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

 std::string str2 =  std::string("I construct this thing") +  " -- then add this";
Run Code Online (Sandbox Code Playgroud)

小智 6

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

转换构造函数


Jan*_*dec 6

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

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

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

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