3
MyClass* const Func(const std::string& statename) 

для этого Coverity дает ошибкуC++ и Coverity вопросы

Синтаксическая предупреждение (PW.USELESS_TYPE_QUALIFIER_ON_RETURN_TYPE) тип спецификатор на тип возвращаемого значения не имеет смысла.

Нам действительно нужно удалить const здесь.?

ответ

3

Вам не нужно удалить const, чтобы получить рабочий код, но код будет, безусловно, будет лучше без бессмысленной const. Вот что говорит и «предупреждающее» слово перед «ошибкой».

+0

Я понимаю это. Неужели const здесь действительно не нужен? Я думаю, что он возвращает немодифицируемый указатель на класс. (i.e) мы не можем изменить указатель. но мы можем изменить содержимое – Sudhakar

+0

И что вы будете делать с возвращаемым указателем? Вы назначаете его некоторой переменной. Это тип переменной _that_. –

4

const в обратном типе (MyClass* const) действительно совершенно бессмысленно. В то же время это не вредит, кроме как сделать код более подробным. Я лично удалю его.

Чтобы понять, почему это бессмысленно, необходимо учитывать следующее:

MyClass* p = Func(statement); 

Какая разница сделал const сделать?

Иными словами, возвращение T* const концептуально ничем не отличается от возвращаемого const int.

+0

какие-либо commnets на следующем? То же самое относится и к следующему? здесь также я получаю предупреждение о покрытии. static char const * const GetInstanceName (InstanceId Id); inline const GraphicClass * const GetLogo() const; – Sudhakar

+0

@ Судхакар: Это так. В каждой из деклараций одна из «consts» бессмысленна. – NPE

+0

Спасибо. эта информация была полезна. – Sudhakar

6

Предупреждение верно. MyClass* const не требуется. Это должно быть MyClass* просто. Однако его не нужно удалять, но вы должны удалить его.

Причина заключается в том, теоретическиMyClass* const бы предотвратить возвращаемое значение Func() от редактирования. Но это так или иначе не редактируется даже без const, так как это не lvalue. Смотрите demo здесь. Таким образом, с/без const, компилятор всегда генерирует ошибку, чтобы попытаться изменить возвращаемое значение Func().

+0

Спасибо за приятное объяснение. То же самое относится и к следующему? здесь также я получаю предупреждение о покрытии. static char const * const GetInstanceName (InstanceId Id); inline const GraphicClass * const GetLogo() const; – Sudhakar

+0

static char const * const GetInstanceName (InstanceId Id); inline const GraphicClass * const GetLogo() const; – Sudhakar

+1

@ Судхакар, да. Указатель типа возвращаемого значения не является значением lvalue, поэтому компилятор позаботится о том, чтобы сделать его непримиримым. Вам не нужно делать это 'const'. – iammilind

 Смежные вопросы

  • Нет связанных вопросов^_^