adressen på denne

Jeg forsøger at finde adressen på this pointer, men denne kode viser en mærkelig
fejl:

#include <iostream>
using namespace std;
class Base
{
    public:
        void test()
        {
            void *address_of_this =&this;
            cout<<address_of_this<<endl;
        }
};

int main()
{   Base k;
    k.test();

    return 0;
}   //error non-lvalue in unary'&'   

Kan du forklare denne fejl ?

Også pege på, at hvad der er ulovligt i at tage adressen på this?

Prøv at tilføje et mellemrum, når tegnet =

OriginalForfatteren T.J. | 2012-02-02

3 svar

  1. 31

    this er en pointer, der indeholder adressen til den “nuværende objekt”. Det er ikke en variabel, der er gemt et eller andet sted (eller endda kunne være blevet ændret), er det en særlig søgeord med disse egenskaber.

    Som sådan, idet dens adresse ikke giver nogen mening. Hvis du ønsker at kende adressen på den “aktuelle objekt”, kan du blot output:

    std::cout << this;

    eller butik som

    void* a = this;
    Endelig.. fornuftens stemme.
    I standardese: this er en rvalue (og ikke af klasse type), så det ikke har en adresse.
    I Standardese igen, this er prvalue ren-rvalue.

    OriginalForfatteren PlasmaHH

  2. 8

    Citere 2003 C++ standard:

    5.1 [expr.prim] nøgleordet this navne en pointer til det objekt, som en nonstatic pågældende funktion (9.3.2) er gældende. … Den type af udtryk er en pointer til funktion klasse (9.3.2), … udtrykket er en rvalue.

    5.3.1 [expr.monadiske.publikationskontoret] resultatet af den monadiske & operatør er en pointer til dens oprindelse. Operand skal være en lvalue eller en qualified_id.

    For at sige det enkelt, & kræver en lvalue. this er en rvalue, ikke en lvalue, ligesom fejlmeddelelse angiver.

    OriginalForfatteren Robᵩ

  3. 0

    this refererer til nuværende objekt ved hjælp af it-adresse.

    I dit problem, der er to fejl:

    • this er ikke en lvalue.

      Den & kræver en lvalue. lvalues er dem, der kan vises på den venstre side af en opgave (variabler, arrays, etc.).

      Der henviser til, at this er en rvalue. rvalues kan ikke vises på venstre side (addition, subtraktion osv.).

      Reference: C++ Rvalue Referencer Forklaret.

    • En skjulte fejl, som jeg gerne vil nævne, er således:

      address_of_this er faktisk modtager en adresse til en adresse.

      Dybest set, &this er oversat til noget i retning af &&object eller &(&object).

    Dybest set, tror this som &object (men kun for at huske, fordi det er ikke sandt).

    OriginalForfatteren Edwin Pratt

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *