这个演员让我困惑:
#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)
C风格的演员阵容将进行常规演员和静态演员或重新演绎演员.
如果已定义,静态强制转换将使用用户定义的转换.
std::string有一个构造函数string(const char *).
这些语法std::string("something"),static_cast<std::string>("something")和(std::string)"something"是等价的.他们都将std::string使用std::string::string(const char *)构造函数构造一个临时的.语法之间的唯一区别是在转换指针时.