Bedeutet die Angabe constexpr Konstruktor auf automatisch alle Objekte daraus erstellt werden constexpr?

Hier ist mein code:

class test{
    public:
    constexpr test(){

    }

    constexpr int operator+(const test& rhs){
        return 1;
    }
};



int main(){

    test t;                         //constexpr word isn't necessary
    constexpr int b = t+test();     //works at compile time!


    int w = 10;                     //ERROR constexpr required
    constexpr int c = w + 2;        //Requires w to be constexpr
    return 0;
}

Merke ich, dass es geklappt hat, obwohl ich mich gar nicht festlegen, test constexpr. Ich habe versucht, replizieren Sie das Ergebnis, indem Sie das gleiche machen int aber ich bekomme Fehler. Konkret will mein int w innerhalb der constexpr int c = w + 2; zu constexpr. Von meinem ersten Versuch, das mit test, Hat es funktioniert, weil der Grund, dass ich constexpr auf der Konstruktor bereits? Wenn das der Fall ist, dann wäre es gut davon ausgehen, dass alle Klassen, die constexpr auf Ihre Konstruktoren werden alle instanziierten Objekte erstellt oder mit ihm zu constexpr?

Bonus-Frage:

Wenn ich eine constexpr Konstruktor, ist es schlecht etwas zu machen ? test * t = new test(); ?

  • Wenn Sie schreiben, ein Kontext, in dem die Instanz nicht constexpr, Ihre Klasse einfach nicht verwendet werden, die als literal-Klasse. Siehe meine Antwort unten für details
  • Ihre operator+ nicht auf den Wert seiner Operanden (oder, in einer Sprache, die Anwalt ist der Ansicht, dass Sie nicht durchführen "lvalue-zu-rvalue-Konvertierung" auf seiner Parameter), aber int's Additions-operator tut.
Schreibe einen Kommentar