Неиспользованный друг класс в C++

Есть ли способ обнаружить (например, с предупреждением компилятора), если классы объявляются friend но не получайте доступ к членам парламента, не занимающим официального поста, т.е. когда дружба будет бесполезна?

5
задан Giovanni Funchal 13 July 2010 в 13:26
поделиться

4 ответа

Предупреждения компилятора не стандартизированы, поэтому это зависит от вашего конкретного компилятора (компиляторов). Я был бы очень удивлен, если бы хоть один из них поддерживал это, однако. Аналогичная ситуация может возникнуть, если у вас есть публичная функция-член, которая вызывается только другими публичными членами (то есть она не обязательно должна быть публичной), и опять же, я не думаю, что компиляторы это определяют.

Выполнение любого из этих тестов будет означать дополнительную работу для авторов компиляторов, и я сомневаюсь, что они сочтут их достаточно полезными для реализации.

3
ответ дан 13 December 2019 в 19:20
поделиться

Насколько я знаю, нет. Возможно, существует инструмент рефакторинга, который может это сделать. Вы всегда можете попробовать удалить дружбу и посмотреть, будет ли она по-прежнему компилироваться, но это может занять много времени для большого проекта.

2
ответ дан 13 December 2019 в 19:20
поделиться

Вы можете скомпилировать код, чтобы увидеть, что он компилируется, затем удалить все объявления «друга» (возможно, программно с помощью sed) и посмотреть, компилируется ли он по-прежнему.

0
ответ дан 13 December 2019 в 19:20
поделиться

Я не знаю, как обнаружить это с помощью предупреждений компилятора, но другой способ сделать это - зайти в файл определения класса и выполнить поиск и замену для friend class на /*friend*/ class и посмотреть, скомпилируется ли он. Конечно, это может оказаться довольно утомительным для большого проекта.

6
ответ дан 13 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: