¿Cuál es el significado exacto de la frase "como si" en el estándar y cómo funciona cuando un usuario puede modificar partes individuales del comportamiento."como si" en los estándares de lenguaje
La pregunta está relacionada con el estándar C++ cuando se habla de la versión nothrow de operator new
. 18.4.1.1/7 lee (el subrayado es mío):
Esta versión nothrow de nuevos equipos de servicio devuelve un puntero obtuvo como si adquirido de la versión normal.
Mi comprensión es que "como si" no requiere una implementación específica, siempre que el comportamiento sea apropiado. Así que si operator new
fue implementado como esto (sé que esto no es una aplicación compatible ya que no hay lazo o el uso de la new_handler, pero estoy acortando que centrarse en mi edición):
// 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;
}
entonces sería ser legal para escribir la versión nothrow así:
// NOTE - not fully compliant - for illustration purposes only.
void *operator new(std::size_t s, const std::nothrow_t &nt)
{
return malloc(s);
}
Pero digamos que un programa reemplaza operator new
utilizar algún otro asignador. ¿Significa "como si" que el compilador tiene que cambiar automáticamente el comportamiento de la versión de nothrow para usar este otro asignador? ¿Se requiere que el desarrollador reemplace las versiones simple y nothrow?
http://www.gotw.ca/publications/mill15.htm http://www.gotw.ca/publications/mill16.htm –
El último borrador de C++ 0x ha cambiado la redacción: "This nothrow La versión del operador new devuelve un puntero obtenido como si se hubiera adquirido de la versión ordinaria (posiblemente reemplazada) ". Y el comportamiento predeterminado cambió a "Operador de llamadas nuevo (tamaño). Si la llamada retorna normalmente, devuelve el resultado de esa llamada. De lo contrario, devuelve un puntero nulo". –