int main() {
int y;
int x{ y = 5 };
//x is 5
}
Como isso é possível, pois y = 5 não é uma expressão calculável?
Além disso, por que o compilador ou o IDE não reclama que main () não retorna um int?
c++
initialization
declaration
assignment-operator
counterstriker0
fonte
fonte
y = 5
é uma expressão e tem valor5
. Por que você acha que não é?return
demain
, veja esta pergunta .y = 5
produz 5 aqui. A possibilidade de os operadores de atribuição retornarem algo é realmente um recurso bizarro do C / C ++.Respostas:
Vou começar com a sua última pergunta
De acordo com o padrão C ++ (função principal 6.6.1)
E em relação a esta pergunta
No padrão C ++ (operadores de atribuição 8.18 e atribuição composta)
Sp esta declaração
pode ser dividido em duas instruções
Além disso, em C ++, você pode até fazer uma referência à variável y da seguinte maneira
Aqui está um programa demonstrativo
Sua saída é
Você pode esta declaração
reescrever também como
No entanto, leve em consideração que há uma diferença entre essas duas declarações (semelhante à das declarações acima).
e
Na primeira declaração a variável
x
tem o tipoint
. Na segunda declaração a variávelx
tem o tipostd::initializer_list<int>
.Para tornar a diferença mais visível, veja como os valores dos objetos são gerados.
A saída do programa é
fonte
É uma atribuição, e as atribuições geram valores, ou seja, o "tipo não qualificado de cv do operando esquerdo", consulte [expr.ass / 3] . Daí
y = 5
resulta emy
, que é5
, que é usado para inicializarx
.Com relação à sua segunda pergunta, consulte cppreference em main (ou [basic.start.main / 5] ):
Portanto, o compilador ou o IDE avisando sobre uma
return
declaração ausente no final demain
seria totalmente errado. É certo que o fato de que você sempre devereturn
objetos devoid
funções não executadasmain
é meio que ... bem, por razões históricas, eu acho.fonte
return
. -pedanticOs
operator=()
resultados em um valor, que é o valor atribuído à variável. Por esse motivo, é possível encadear atribuições como esta:fonte
Se você der uma olhada na documentação sobre cppreference , verá que
operator=()
retornará uma referência ao objeto que foi atribuído. Portanto, uma atribuição pode ser usada como uma expressão que retorna o objeto que foi atribuído.Então, é apenas uma tarefa normal com aparelho.
fonte