繁体   English   中英

C++ const std::string 赋值

[英]C++ const std::string assignment

const std::string 赋值/声明中什么最合适? 使用构造函数(例如const std::string WORD("hello"); )还是使用相等运算符(例如const std::string WORD= "hello"; )? 这些东西在内存使用或时间过程上有区别吗?

对于任何合理的编译器,生成的代码在两种情况下都是相同的。 在这种情况下,您应该使用直接初始化还是复制初始化本质上是基于意见的。

在这两种情况下,通常编译器都会使用“返回值优化”删除副本。 在 ideone 上看到这段代码,这里既不调用普通构造函数也不调用赋值运算符,因为它没有打印它们被调用到屏幕:

那是:

#include <iostream>

class C
{
    public:
    C() {}
    C(const char[]) { std::cout << "Ordinary Constructor" << std::endl; }
    C& operator=(const char[]) { std::cout << "Assignment Operator" << std::endl; return *this; }
};

int main() {
    std::cout << "Start" << std::endl;
    C x1 = "Hello";
    C x2("Hello");
    std::cout << "End" << std::endl;
}

简单地输出:

Start
End

它不输出:

Start
Assignment Operator
Ordinary Constructor
End

由于 C++ 允许跳过副本并在适当的位置构造临时文件。

线路:

std::string x = "hello";
std::string x("hello");

两者都只会调用std::string的构造函数。 也就是说,它们是相同的,并且都不会使用operator=重载。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM