Вот мой код:
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();