这让我感到困惑:

#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";

最佳答案

C样式强制转换将执行const强制转换和静态强制转换或重新解释强制转换。

静态转换将使用用户定义的转换(如果已定义)。
std::string具有构造函数string(const char *)

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

关于c++ - 为什么将const char *强制转换为std::string起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34750535/

10-09 06:42
查看更多