为何这种情况下赋值构造函数没有被调用

为什么这种情况下赋值构造函数没有被调用
...
std::vector<MyString> mylist;
...
MyString first = mylist[0]; // ???


为什么???这种情况下赋值构造函数没有被调用
如果分开写:
MyString first;
first = mylist[0];就会调用赋值构造函数

是不是编译器优化?
------解决方案--------------------
一起写调用copy constructor, 是std::string::string(const std::string& s), 你说的operator=是赋值运算符。

用MyString& first=mylist[0]是引用,就像指针一样,确实几乎没有代价。如果mylist[0]不怕被修改或者想要被修改或者不会被修改,这样确实是推荐使用的方式。
------解决方案--------------------
引用:
谢谢ALNG
想不通的是为什么在这种情况下会调用copy constructor,而不是operator=
从形式上看,MyString first = mylist[0]好像更应该调用operator=吧?

这个是初始化操作,只会调用构造函数(包括copy ctor)
形式上看虽然有个等于号,但意义不下相同
C++几种初始化

MyString first("abc");//直接初始化
MyString first=mylist[0];//复制初始化,是初始化,不是赋值,所以不要operator=