He estado leyendo bastantes en Internet y parece que muchas personas mencionaron las siguientes reglas (pero no pude encontrarlo en el estándar),En cuanto a la conversión lvalue-a-rvalue, ¿cuándo se requiere?
El operador de suma + (y todos los demás operadores binarios) requiere que ambos operandos sean rvalue, y el resultado es rvalue. Y así sucesivamente ..
he comprobado el estándar de C++, y se establece claramente que (cláusula 3.10/2),
Cada vez que un glvalue aparece en un contexto donde se espera una prvalue, la glvalue se convierte en un prvalue
(cláusula 5/9),
siempre que aparezca una expresión glvalue como un operando de un operador que espera un prvalue para que operando, los-lvalue-a rvalue (4.1), -array-a puntero (4.2), o -function-a puntero (4.3) estándar conversiones se aplican para convertir la expresión en un valor pr.
Utiliza un término que el operando "espera" un prvalue. Sin embargo, cuando veo el operador adicional, el operador de multiplicación, etc., solo menciona que, el resultado es un valor pr, pero no dice nada sobre lo que se espera que sean los operandos.
Ya sea que hace el operador binario realmente espera que los operandos a prvalue hace una diferencia en el siguiente caso,
int b = 2;
int a = b + 1;
Si se espera b para ser un prvalue, habrá una conversión de valor-i-a rvalue aquí, y luego realizará prvalue + prvalue y devolverá un prvalue, y el prvalue del resultado se asignará a un lvalue a.
Sin embargo, si no se requiere que b sea un valor pr, sería lvalue + prvalue y el resultado es un valor pr.
Realmente quiero saber dónde menciona explícita o implícitamente la norma que las reglas para diferentes operadores? Verifico en toda la sección de operadores y solo en unos pocos operadores que los estándares mencionan explícitamente si los operandos y los resultados serán lvalue o rvalue. Para la mayoría de los operadores, el estándar solo menciona el resultado pero no el requisito de operando.
Gracias.
Por cierto, me encontré en la Norma 5.19 respecto expresión constante puede muy muy "implícitamente" implica que el operador binario requiere conversión-valor-i-a rvalue sobre operandos. Para más detalles, por favor refiérase a mi pregunta anterior,
mixing use of constexpr and const?
Un condicional-expresión es una constante expresión a menos que implique una de lo siguiente como una subexpresión potencialmente evaluado (3.2).
...
- una conversión-lvalue-a rvalue (4.1) a menos que se aplica a
---- un glvalue de tipo integral o enumeración que se refiere a un no objeto const medicamentos basados en con una inicialización precedente, inicializa con una expresión constante
Gracias por leer.
Gracias. Sin embargo, las afirmaciones anteriores que citó se eliminaron en el nuevo estándar N3225 ... No es de extrañar que no pudiera encontrarlo. Creo que es un problema de diferentes personas que tratan con diferentes partes y no pensaron demasiado en los problemas de consistencia. . – user534498