#cpp #visual_studio
К примеру есть такой простой код class obj { int i; public: obj() : i(0) {} obj(int j) : i(j) {} obj(const obj& z) : i(z.i) {} obj operator=(const obj& z) { i = z.i; return (*this); } void print() { cout << i << endl; } ~obj(){} }; int main() { obj a(1); a = obj(2); //C26444 Avoid unnamed objects with custom construction and destruction (es.84) a.print(); return 0; } в строчке a = obj(2); visual studio 2019 кидает предупреждение Avoid unnamed objects with custom construction and destruction (es.84). Поискал в гугле, но ничего понятного не нашел, буду признателен любой помощи
Ответы
Ответ 1
В описании сообщения в документации (https://docs.microsoft.com/en-us/visualstudio/code-quality/c26444?view=vs-2019) сказано, что данное предупреждение генерируется в том числе при игнорировании нетривиальных результатов вызовов функций. Именно такое такое игнорирование происходит при вызове вашего оператора присваивания из-за того, что ваш оператор присваивания почему-то возвращает свой результат по значению.Ответ 2
Поменял обьявление obj operator=(const obj& z) на obj& operator=(const obj& z) warning пропал, почему - загадка.
Комментариев нет:
Отправить комментарий