Вот мой код:
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;
}
Я заметил, что он работал, хотя я не указывал test constexpr. Я попытался реплицировать результат, выполнив то же самое с int, но я получаю ошибки. В частности, он хочет, чтобы мой int w внутри constexpr int c = w + 2; был constexpr. С моей первой попытки, которая использует test, она работала из-за причины, по которой я уже использовал constexpr в конструкторе? Если это так, то было бы неплохо предположить, что все классы, имеющие constexpr в своих конструкторах, приведут к тому, что все объекты будут созданы или созданы с ним как constexpr?
Бонусный вопрос:
Если у меня есть конструктор constexpr, плохо ли что-то делать? test * t = new test();?