Есть ли веская причина, по которой этот оператор не существует?
Если вы имеете в виду, почему нет operator T*()
для автоматического предоставления приведения, одна (из нескольких) потенциальных причин именно это - идея автоматического приведения.
Может быть, было бы удобно иметь код, использующий std::array
, чтобы просто правильно скомпилировать, используя operator T*()
, и вы получите программу, которая была построена без ошибок. Однако есть некоторые последствия для этого:
1) Вызов operator T*()
- это потенциальные затраты времени выполнения, которые программист может и не пожелать, а просто отправляется в путь. В C ++ цель состоит в том, чтобы платить только за то, что нужно, и операторы приведения просто навязывают себя, что противоречит этой идее.
2) operator T*()
и операторы приведения в целом могут скрывать ошибки или
узкие места в исполняемом коде из-за использования, о котором не знает программист.
По моему опыту, спросите программиста, у которого кодовая база завалена операторами приведения типов, какие функции фактически вызываются, и чаще всего они не уверены, по какому пути идет их код, или они просто неверны ( и не осознайте этого до тех пор, пока они не примут участие в сеансе отладки и не увидят, что все повороты и повороты выполняются вызываемыми, казалось бы, невинными операторами приведения).
Таким образом, гораздо безопаснее для программиста явно «преобразовывать» данные, вызывая такую функцию, как data()
, а не используя operator T*()
, о котором они, возможно, не знали.