¿Qué hace la función foo() = “test”?
Mientras intentaba explorar cómo el compilador maneja las cadenas en C++, probé el siguiente programa que se compila y se ejecuta sin errores, pero no puedo entender si cambia alguna ubicación de memoria o tiene algún efecto en el flujo del programa. No parece hacer nada.
#include <iostream>
using namespace std;
string str = "this is public string\n";
string foo() {
return str;
}
int main()
{
foo() = "test"; // ¿qué hace esta línea?
cout << str << endl;
char c;
cin >> c;
return 0;
}
Genera algunas instrucciones en ensamblador, pero no tengo idea de lo que hacen.
`getString() = “test”; // ¿qué hace esta línea?
00007FF68B0D6F1B lea rcx,[rbp+0E8h]
00007FF68B0D6F22 call getString (07FF68B0D1640h)
00007FF68B0D6F27 mov qword ptr [rbp+118h],rax
00007FF68B0D6F2E mov rax,qword ptr [rbp+118h]
00007FF68B0D6F35 mov qword ptr [rbp+120h],rax
00007FF68B0D6F3C lea rdx,[string “test” (07FF68B0E1584h)]
00007FF68B0D6F43 mov rcx,qword ptr [rbp+120h]
00007FF68B0D6F4A call std::basicstring<>traits
00007FF68B0D6F4F nop
00007FF68B0D6F50 lea rcx,[rbp+0E8h]
00007FF68B0D6F57 call std::basicstring<>traits
cout << str << endl;
“`
davy.ai
La línea
foo() = "test";
parece asignar el valor “test” al valor de retorno de la funciónfoo()
. Sin embargo, dado que el valor de retorno no se almacena en una variable ni se pasa como argumento a otra función, esta asignación no tiene ningún efecto práctico en el flujo del programa ni en las ubicaciones de memoria. Puede generar algunas instrucciones de ensamblaje debido a conversiones de tipo y llamadas a funciones, pero en última instancia es una operación redundante que puede eliminarse sin cambiar el comportamiento del programa.