Приведенный ниже код, скомпилированный с gcc 4.9 с -std = c ++ 14 -Wshadow, выдает следующее предупреждение:
main.cpp:12:24: warning: declaration of ‘id’ shadows a member of 'this' [-Wshadow]
main.cpp:
#include <string>
class Foo
{
public:
Foo(std::string id);
const std::string& id() const noexcept;
private:
const std::string m_id;
};
Foo::Foo(std::string id) : m_id(id) {}
const std::string& Foo::id() const noexcept { return m_id; }
int main(int argc, char** argv) { return 0; }
Кодовая база, которую я унаследовал, содержит много такого кода. Соглашение об именах, выбранное авторами оригинала (и я должен его придерживаться), требует, чтобы получатели не имели префикса «get». Переименование параметров, таких как id только ради того, чтобы избавиться от этого предупреждения, звучит как большая работа впустую. Сейчас я склоняюсь к добавлению завершающего подчеркивания - это нужно делать только в файлах .cpp, чтобы уродство не доходило до публичных заголовков. У кого-нибудь есть другие идеи?