O que há com static_cast com vários argumentos?
-
09-09-2019 - |
Pergunta
Alguém pode me dizer o que este elenco tem para o efeito (além de definir happyNumber de 1337), se algum, e se ele não tem outro efeito, como é que eu posso escrever código como este ??? Isso é um erro do compilador, ou algum "escondido recurso" do C ++?
int happyNumber = static_cast<int>(123.456, TRUE, "WTF" , false , "IS" , NULL , "GOING" , 0xff , "ON???" , 1337);
Fiquei surpreso este seria compilar em tudo. Eu encontrei-o através de um bug onde eu acidentalmente definir o segundo parâmetro para algo que era para ir em uma chamada de função da expressão ser fundido. Isto resultou em um erro desagradável onde o objeto foi lançado a partir do segundo parâmetro, chamando a função com apenas um argumento. É compilado ... E inicialmente não crescer ...
Estou usando o Microsoft Visual C ++ 2008.
Solução
estática elenco tem um argumento, mas seu argumento é uma expressão, e expressões podem incluir o href="http://en.wikipedia.org/wiki/Comma_operator" rel="noreferrer"> operador . Vírgula é usada em situações onde você deseja avaliar dois ou mais expressões de uma só vez para os seus efeitos colaterais, p.ex.:.
int i, j;
for (i=0, j=0; i < 10; i++,j++) {
// do stuff
}
É um pouco útil porque sem ele você só poderia avaliar uma expressão cada um para o inicializador, condição e continuar partes do para loop (ou qualquer outro lugar uma expressão é esperado). Ele não costuma fazer para o código mais claro, porém, e a semântica é estranho. Como você observou, uma separados por vírgula avalia seqüência para o valor de sua última expressão.