"Como se" nos padrões de linguagem
Qual é o significado exato da frase "como se" no padrão e como funciona quando um usuário pode modificar partes individuais do comportamento.
A questão é em relação ao padrão C ++ ao falar sobre a versão nothrow dooperator new
. 18.4.1.1/7 lê (minha ênfase):
Esta versão nothrow do operador new retorna um ponteiro obtidoAté parece adquirido da versão comum.
Meu entendimento é que "como se" não requer uma implementação específica, desde que o comportamento seja apropriado. Então seoperator new
foi implementado assim (sei que essa não é uma implementação compatível, pois não há loop ou uso do new_handler; mas estou diminuindo isso para focar no meu problema):
// NOTE - not fully compliant - for illustration purposes only.
void *operator new(std::size_t s)
{
void *p = malloc(s);
if (p == 0)
throw std::bad_alloc();
return p;
}
Seria legal escrever a versão do nothrow assim:
// NOTE - not fully compliant - for illustration purposes only.
void *operator new(std::size_t s, const std::nothrow_t &nt)
{
return malloc(s);
}
Mas digamos que um programa substituaoperator new
para usar outro alocador. "Como se" significa que o compilador precisa alterar automaticamente o comportamento da versão do nothrow para usar esse outro alocador? É necessário que o desenvolvedor substitua as versões simples e de nothrow?