C ++ const std :: string赋值

时间:2014-10-17 02:18:44

标签: c++ stdstring

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

在这两种情况下,通常编译器都会使用"Return Value Optimisation"删除副本。在ideone here上调用此代码既不是普通构造函数也不是赋值运算符,因为它不打印它们被调用到屏幕:

那是:

#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 ++允许跳过副本并且临时构建到位。

答案 2 :(得分:0)

行:

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

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