![](/img/trans.png)
[英]Why std::string does not have (explicit) const char* cast
[英]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.