В коде ниже я полностью понимаю, что в тесте класса есть член CONST, что означает, что этот участник не может быть назначен позже, следовательно, оператор назначения не работает, а также я думаю, что
оператор назначения тоже не работает. Сообщение? < /p>
#include
class Test {
std::vector vi;
const size_t isize;
public :
Test(std::vector i) :vi{ i }, isize{vi.size()}
{
}
Test() = delete;
~Test() = default;
Test(const Test&) = delete;
Test(Test&&) = default;
Test& operator=(const Test&) = default;
Test& operator=(Test&&) = default; };
int main() {
std::vector testvector;
std::vector k{ 1 };
testvector[0] = std::move(Test(k));
std::cout
Сообщение об ошибке от vc ++ или g ++: < /p>
1>: error C2280: 'Test &Test::operator =(const Test &)': attempting to reference a deleted function
1>: message : see declaration of 'Test::operator ='
1>: message : 'Test &Test::operator =(const Test &)': function was implicitly deleted because 'Test' has a data member 'Test::isize' of const-qualified non-class type
1>: see declaration of 'Test::isize'
< /code>
Примечание: эта ошибка уходит, удаляя const из участника isize. < /p>
Редактировать:
Спасибо @g.m за то, что сообщение об ошибке Clang более полезно здесь
rest rese roundt roundt and round на других материалах.
:12:11: warning: explicitly defaulted copy assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
12 | Test& operator=(const Test&) = default;
| ^
:4:18: note: copy assignment operator of 'Test' is implicitly deleted because field 'isize' is of const-qualified type 'const size_t' (aka 'const unsigned long')
4 | const size_t isize;
| ^
:12:36: note: replace 'default' with 'delete'
12 | Test& operator=(const Test&) = default;
| ^~~~~~~
| delete
Подробнее здесь: https://stackoverflow.com/questions/794 ... oth-gcc-vc
Компилятор дает неправильное сообщение, или я что -то здесь упускаю и GCC и VC ++ [закрыто] ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение