Espacios de nombres
Variantes
Acciones

Requisitos denominados de C++: TipoDeDiseñoEstándar

De cppreference.com
< cpp‎ | named req
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

Especifica que un tipo es un tipo de diseño estándar. Los tipos de diseño estándar son útiles para comunicarse con código escrito en otros lenguajes de programación.

Nota: el estándar no define un requisito denominado con este nombre. Esta es una categoría de tipo definida por el lenguaje central. Se incluye aquí como un requisito con nombre solamente por consistencia.

Contenido

[editar] Requisitos

  • Todos los datos miembro no estáticos tienen el mismo control de acceso.
  • No tiene funciones virtuales o clases base virtuales.
  • No tiene datos miembro no estáticos de tipo referencia.
  • Todos los datos miembro no estáticos y las clases base son tipos de diseño estándar.
  • Ya sea que:
* no tiene clases base con datos miembro no estáticos, o
* no tiene datos miembro no estáticos en la clase más derivada y, como máximo, una clase base con datos miembro no estáticos.
(hasta C++14)
  • No tiene dos subobjetos de clase base (posiblemente indirectos) del mismo tipo.
struct Q {};
struct S : Q { };
struct T : Q { };
struct U : S, T { };  // no es una clase de diseño estándar:
                      // dos subobjetos de clase base de tipo Q
  • Tiene todos los datos miembro no estáticos y campos de bits declarados en la misma clase (ya sea todos en la derivada o todos en alguna base).
struct B { int i; };         // clase de diseño estándar
struct C : B { };            // clase de diseño estándar
struct D : C { };            // clase de diseño estándar
struct E : D { char : 4; };  // no es una clase de diseño estándar
  • Ninguno de los subobjetos de la clase base tiene el mismo tipo que:
  • para tipos que no son uniones, como el primer dato miembro no estático (véase optimización de base vacía) y, recursivamente, el primer dato miembro no estático de ese dato miembro si tiene un tipo clase que no es unión, o todos los datos miembro no estáticos de ese dato miembro si tiene un tipo unión, o un elemento de ese dato miembro si tiene un tipo array, etc.
  • para los tipos array, como el tipo del elemento del array y, recursivamente, el primer dato miembro no estático del elemento del array si tiene un tipo clase que no es unión, o como cualquier dato miembro no estático del elemento del array si tiene tipo unión, o como el tipo del elemento del elemento del array si tiene tipo array, etc.
(desde C++14)

[editar] Propiedades

Véase Diseño estándar.

[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
CWG 1672 C++14 La regla del primer dato miembro no estático ignoraba

la existencia de clases base vacías.

La regla del primer dato miembro no estático se hizo

recursiva.

CWG 1813 C++14 Una clase con un miembro definido en una base indirecta

técnicamente no era de diseño estándar.

Todas las declaraciones de miembros tienen que estar en

la misma clase.

CWG 2120 C++14 No se consideró un array como el primer miembro al

comparar el tipo del primer elemento con el tipo de una base.

Los arrays miembro se consideran.

[editar] Véase también

Comprueba si un tipo es un tipo de diseño estándar.
(plantilla de clase) [editar]