前兩天在用CLion寫一段C++代碼時(shí)編譯報(bào)錯(cuò),報(bào)錯(cuò)的位置很奇怪,是在STL list中的一個(gè)賦值語(yǔ)句處報(bào)錯(cuò):

報(bào)錯(cuò)
查看報(bào)錯(cuò)信息,發(fā)現(xiàn)原因不在于STL list,而在于一個(gè)自定義的類PointPos:
object of type 'PointPos' cannot be assigned because its copy operator is implicitly deleted
PointPos類的對(duì)象不能被賦值,因?yàn)?strong>拷貝操作符被隱式地刪除了
因?yàn)槲业拇a里面使用了列表容器來(lái)放這個(gè)類的對(duì)象,類似list<PointPos>的用法,因此在列表的底層操作中可能會(huì)對(duì)該類的對(duì)象拷貝賦值,又不知道為什么操作符被刪除了,所以賦值失敗報(bào)錯(cuò)。
那么為什么賦值操作符(就是“=”)被隱式刪除了呢?再仔細(xì)看下面的注釋,發(fā)現(xiàn)了原因:

原因
原來(lái)是PointPos類的一個(gè)成員變量被定義成了const常量:
const int lineIndex;
因此編譯器認(rèn)為需要禁止使用拷貝賦值操作符,自動(dòng)把它給刪除了。
簡(jiǎn)單地把成員變量前的const關(guān)鍵字去掉,則編譯不會(huì)再報(bào)錯(cuò)了,問(wèn)題順利解決。