Por que o vetor :: Referência não retorna a referência a bool?
em c, o std :: vector contêiner é especializado para valores booleanos. Essa especialização introduz diferenças no comportamento em comparação com os vetores de outros tipos de dados. Ao tentar passar uma referência a um elemento de um std :: Vector para Calliftogled, ocorre um erro de compilação. Isso ocorre porque o tipo de referência retornado pelo vetor :: Referência não é o bool esperado &. Isso é feito para otimizar o desempenho usando uma representação bitwise para valores booleanos. Biblioteca:
A biblioteca de contêineres Boost fornece uma versão não especializada do vetor
que oferece uma verdadeira referência aos valores bool. Isso permite passar uma referência ao invólucro, que por sua vez fornece acesso indireto ao valor BOOL subjacente.
estrutura a
{
void foo () {}
};
Modelo
Void Calliftoggled (CHAR V1, CHAR & V2, T&T)
{
if (v1! = v2)
{
v2 = v1;
t.foo ();
}
}
int main ()
{
std :: vetor v = {false, true, false};
const char f = false;
A a;
Calliftoggled (f, v [0], a);
Calliftoggled (f, v [1], a);
Calliftoggled (f, v [2], a);
}