Делает ли указание constexpr на конструктор автоматически превращает все созданные из него объекты в constexpr?

Вот мой код:

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;
}

Я заметил, что это сработало, хотя я не указал тест для constexpr. Я попытался воспроизвести результат, выполнив то же самое с int, но получаю ошибки. В частности, он хочет, чтобы моя int w внутри constexpr int c = w + 2; была constexpr. С моей первой попытки, которая использует test, это сработало из-за причины, по которой я уже использовал constexpr в конструкторе? Если это так, то было бы хорошо предположить, что все классы, которые имеют constexpr в своих конструкторах, приведут к тому, что все объекты, созданные или созданные с его помощью, будут иметь constexpr?

Дополнительный вопрос:

Если у меня есть конструктор constexpr, это плохо делать что-то подобное? test * t = new test();

35
задан andreee 28 August 2019 в 07:35
поделиться