es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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,std::allocator >::operator= (07FF68B0D1037h)
00007FF68B0D6F4F nop
00007FF68B0D6F50 lea rcx,[rbp+0E8h]
00007FF68B0D6F57 call std::basicstring<>traits,std::allocator >::~basicstring<>traits,std::allocator > (07FF68B0D1140h)
cout << str << endl;
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La línea foo() = "test"; parece asignar el valor “test” al valor de retorno de la función foo(). 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.

Comments are closed.