调用哪个字符串构造函数
Which string constructor is invoked?
我知道这是初始化,但我对在每种情况下使用字符串文字时调用 2 个构造函数中的哪一个感到困惑。它们都是复制构造函数吗?
string::string(const string& strString)
string::string(const char *szCString)
案例1:
string sSource("my string");
案例2:
const char *szSource("my string");
你可以检查编译器做了什么(GodBolt.org(:
对于第一种情况,调用的构造函数是:
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<std::allocator<char> >(char const*, std::allocator<char> const&)
或者,换句话说,如果我们忽略分配器引用参数的默认值,它是:
std::string::string(char const*)
至于第二种情况,没有调用字符串构造函数。您只能获得:
mov QWORD PTR [rbp-8], OFFSET FLAT:.LC0
它放置一个指向原始字符位置的指针。
现在,我认为您感到困惑的是字符串文字的语义。字符串文字不是std::string
!请记住,C++作为一种语言没有固有的字符串类型; std::string
来自标准库。
那么字符串文字的类型是什么?这是一个字符数组。亲自查看(Coliru.com;该示例包含用于以字符串形式获取类型名称的代码(
相关文章:
- 在c++构造函数中使用随机字符串生成器
- c++ 构造函数 将 1 个字符串参数转换为 3 个属性
- C 字符串在显式构造函数中分配值C++?
- 我用字符串做了一个C++构造函数,但它不会打印出字符串
- C++继承:构造函数中的字符串构造
- 在派生自线程类的构造函数中传递字符串
- 在构造函数中浅拷贝字符串数组
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 字符串是否在其构造函数中复制数据
- 在C++中,从构造函数中将字符串文本分配给成员const char*变量时会发生什么
- 带有字符串和bad_alloc检查的构造函数
- 具有字符串文本构造函数的类不适用于 const 引用初始化
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- Pybind11:将字符串*参数传递给构造函数
- C++ 构造函数参数:字符串、整数、整数、整数
- 性能 - 使用字符串构造函数与使用串联
- 为什么在构造函数中将字符串分配给指针是安全的?
- 构造函数字符串参数未设置窗口标题
- C++默认构造函数:字符串参数与字符串参数()