这让我感到困惑:
#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/