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