В Visual Studio есть много полезных предложений по линтеру (я использую VS2022). Но иногда мне не следует следовать внушению и хотелось бы подавить его в определенных местах. В качестве надуманного примера:
class FooContainer
{
Foo* foo;
public:
const Foo* GetFoo() const { return foo; } //OK
Foo* GetFoo() { return foo; } //Suggestion: The member function can be made const
}
Здесь я не хочу нарушать корректность const, разрешая неконстантный доступ к Foo через const FooContainer. Кажется, это предложение здесь, потому что функция не изменяет FooContainer, поэтому с точки зрения компилятора это может быть const. Но по логике этой функции быть не должно const.
Я не хочу отключать это везде, но для этой конкретной функции я бы хотел это отключить. Я ничего не смог найти в Google. Есть ли способ?
Прежде чем спрашивать, я поискал, извините, что не разъяснил это. Однако я не смог найти соответствующих ответов. И приведенные Вами ссылки не дают решения этой проблемы.





Это обеспечивается опцией линтера C++: функцию-член можно сделать константной.
https://learn.microsoft.com/en-us/cpp/ide/cpp-linter-overview?view=msvc-170#configure-the-linter
для этой конкретной функции отключите ее
Однако на данный момент такой возможности нет:
Хорошо, значит, это не «анализ кода», а «линтер C++». Благодарю за разъяснение. Однако я не хочу исключать весь файл, а только эту конкретную функцию. Но теперь, когда я лучше знаю, что искать, кажется, сделать это просто невозможно: Developercommunity.visualstudio.com/t/…
У меня та же проблема. Особенно с методами OnUpdateUI. Их нельзя сделать постоянными, поскольку в противном случае интеграция в карту сообщений будет невозможна. Мой обходной путь заключается в следующем:
ifdef _DEBUG
# define Declare_TheMemberFunctionCanBeMadeConst INT_PTR m_countLinter {}
# define Linter_TheMemberFunctionCanBeMadeConst ++m_countLinter
#else
# define Declare_TheMemberFunctionCanBeMadeConst
# define Linter_TheMemberFunctionCanBeMadeConst
#endif
MyDialog.h
class MyDialog : public CDialog
{
...
Declare_TheMemberFunctionCanBeMadeConst;
afx_msg void OnUpdateFunction(CCmdUI* pCmdUI);
...
}
MyDialog.cpp
void MyDialog::OnUpdateFunction(CCmdUI* pCmdUI)
{
Linter_TheMemberFunctionCanBeMadeConst;
pCmdUI->Enable(MyConstFunction());
}
Если в будущем появится возможность давать подсказки линтеру, то код можно будет быстро адаптировать.
Я набрал в поисковой системе «отключение предупреждения об анализе кода MSDN Visual Studio C++» и получил Подавлять нарушения анализа кода и Нет возможности подавлять предупреждение анализа кода C++, что показалось интересным. Всегда выполняйте поиск в Интернете, прежде чем публиковать сообщения в StackOverflow; если да, укажите свои результаты.