In che modo std :: vector di C ++ 20 assegna constexpr?
Dato che il contenuto corrente e la dimensione di un vettore possono essere determinati casualmente in fase di esecuzione, e tutti i contenuti dovranno essere distrutti quando si chiama assign, come può essere considerata la funzione membro di assign di C ++ 20 . tempo di compilazione?
Risposte
Ho trovato la mia risposta qui . Per citare,
Essere una funzione constexpr non significa che la funzione venga eseguita in fase di compilazione. Dice che la funzione ha il potenziale per essere eseguita in fase di compilazione. Una funzione constexpr può anche eseguire un runtime. È spesso una questione del compilatore e del livello di ottimizzazione se una funzione constexpr viene eseguita in fase di compilazione o runtime.
Ergo, a differenza delle variabili constexpr, che devono essere determinabili in fase di compilazione, una chiamata di una data funzione constexpr può essere eseguita in fase di compilazione, a seconda delle circostanze della chiamata (es. Un constexpr std :: vector) e un'altra in fase di runtime (es. Un non-constexpr std :: vector).