Существует ли надежная проверка возврата неконстантной ссылки из константного метода получения? ⇐ C++
Существует ли надежная проверка возврата неконстантной ссылки из константного метода получения?
Я хотел бы проверить наш код на наличие разработчиков, возвращающих неконстантную ссылку в константных методах. В обычных обстоятельствах компилятор поймает это, но при использовании PIMPL или указателей ситуация становится немного странной.
Пример того, как это возможно:
#include #include #include #include структура PIMPL { интервал х = 0; }; структура данных { std::unique_ptr m_pimpl = std::make_unique(); // Подпись физически константна корректна, но логически константна нарушена int& func() константа { вернуть m_pimpl->x; } int& функция() { вернуть m_pimpl->x; } }; int main(int argc, char* argv[]) { Данные дата1; константные данные dat2; // ХОРОШО dat1.func() = 2; // это не должно быть возможно в API dat2.func() = 44; std::cout
Я хотел бы проверить наш код на наличие разработчиков, возвращающих неконстантную ссылку в константных методах. В обычных обстоятельствах компилятор поймает это, но при использовании PIMPL или указателей ситуация становится немного странной.
Пример того, как это возможно:
#include #include #include #include структура PIMPL { интервал х = 0; }; структура данных { std::unique_ptr m_pimpl = std::make_unique(); // Подпись физически константна корректна, но логически константна нарушена int& func() константа { вернуть m_pimpl->x; } int& функция() { вернуть m_pimpl->x; } }; int main(int argc, char* argv[]) { Данные дата1; константные данные dat2; // ХОРОШО dat1.func() = 2; // это не должно быть возможно в API dat2.func() = 44; std::cout
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение