gpt4 book ai didi

C++ 字符串初始化

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:55 28 4
gpt4 key购买 nike

我看过一个声明

string noun("ants");
string noun = "ants";

完全等价。

这与我的直觉相反:我认为在第二种情况下会发生转换(通过 string 类的构造函数),然后使用 类的参数调用赋值运算符字符串。实际发生了什么?

最佳答案

使用赋值初始化变量定义,比如

std::string a = "foo";

此处创建了两个对象:您定义的变量(在我的示例中为 a)和一个临时对象(用于字符串 "foo")。然后使用临时对象调用变量 (a) 的复制构造函数,然后销毁临时对象。不调用复制赋值运算符。

但是,如果编译器使用copy elision,则可以避免复制。 ,这是一种避免不必要的复制和复制的优化技术。复制构造函数无论如何都需要存在,即使它没有被调用。


对于定义

std::string a("foo");

有更好的constructor它接受一个指向常量字符串的指针,字面量 "foo" 可以看作(字符串字面量实际上是 char 的常量数组,但像所有数组一样,它们会衰减到指针)。

关于C++ 字符串初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23492983/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com