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