Substituiria ' :: ' por ' . ' criar ambiguidades em C++?
Em C++, o operador ::
é utilizado para aceder a classes, funções e variáveis num namespace ou numa classe.
Se a especificação da linguagem utilizada .
em vez de ::
nos casos em que também se acede a variáveis/métodos de instância de um objecto, isso causaria possíveis ambiguidades que estão't presentes com ::
?
Dado que C++ não't permite nomes de variáveis que são também um nome de tipo, posso't pensar num caso em que isso poderia acontecer.
Esclarecimento: I'não estou a perguntar porquê ::
foi escolhido em vez de .
, só se também podia ter funcionado?
75
4
Devido a tentativas de tornar C++ na sua maioria compatível com o código C existente (que permite colisões de nomes entre nomes de objectos e etiquetas estruturais), C++ permite colisões de nomes entre nomes de classes e nomes de objectos.
O que significa que:
é um código legítimo.
Um exemplo em que ambos são válidos, mas referem-se a objectos diferentes:
Há diferença entre
a::b' e
a.b' onde::
implica que `a' seja utilizado como espaço de nomes, o que significa que é espaço de nomes ou nome tipográfico. Desde que C++ suporte herança plural não-virtual e que uma variável possa ter o mesmo que o tipo, esta tiras as hipóteses de referenciar objectos errados. It's necessário para metaprogramação de modelos.Outro exemplo seria
&B::foo
vs&B.foo
no contexto da classe B.Vamos alargar @Deduplicator exemplo: