una significa que para los imagenes imagen como atributos atributo agregar c++ c++17 structured-bindings

c++ - significa - enlace estructurado con[



que significa alt en una imagen (1)

En la estructura de encuadernaciones de papel:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0144r2.pdf

discuten su razonamiento:

3.8 ¿Debería haber una manera de ignorar explícitamente los componentes?

La motivación sería silenciar las advertencias del compilador sobre nombres no utilizados.

Creemos que la respuesta debería ser "todavía no". Esto no está motivado por los casos de uso (silenciar las advertencias del compilador es una motivación, pero no es un caso de uso per se), y es mejor dejarlo hasta que podamos revisar esto en el contexto de una propuesta más general de coincidencia de patrones en la que esto debería caer como un caso especial.

La simetría con std :: tie sugeriría usar algo como std :: ignore:

tuple<T1,T2,T3> f(); auto [x, std::ignore, z] = f(); // NOT proposed: ignore second element

Sin embargo, esto se siente incómodo.

Anticipar la coincidencia de patrones en el idioma podría sugerir un comodín como _ o *, pero como todavía no tenemos una coincidencia de patrones, es prematuro elegir una sintaxis que sabemos que será compatible. Esta es una extensión pura que puede esperar para ser considerada con la coincidencia de patrones.

Aunque esto no aborda explícitamente [[maybe_unused]] , asumo que el razonamiento podría ser el mismo. Detener las advertencias del compilador no es un caso de uso.

Los lenguajes funcionales con coincidencia de patrones (¿a veces?) Tienen la posibilidad de ignorar algunos valores enlazados, pero con los enlaces estructurados de C ++ 17 no parece haber manera de hacerlo ( std: ¿ignorar con enlaces estructurados? ). El consejo es usar un nombre ficticio, pero luego recibiremos advertencias sobre las variables no utilizadas.

Con los últimos jefes de clang y gcc, esto hace lo esperado, lo que es bueno y útil,

[[maybe_unused]] auto x =4 ; // fine, no warning [[maybe_unused]] auto [a,dummyb,dummyc] = std::tuple<int,int,float>(1,1,1.0f);

pero también habría esperado que esto funcionaría:

auto [g,[[maybe_unused]]dummyh,[[maybe_unused]]dymmyi] = std::tuple<int,int,float>(1,1,1.0f);

¿Hay una razón específica por la cual los attributes no se pueden usar aquí? (En la norma, así como técnicamente). Ni gcc ni clang aceptan esto.

Editar, recogiendo el estado de soporte: (gracias a godbolt / compiler explorer ). Funciona como se espera en (también podría ser anterior):

  • Troncal gcc 8.0 (g ++ 8.0.0 20171015 experimental)
  • estrado 4.0.0
  • icc 18 (no probado, según specs )

MSVC 17.3.5 (y la GUI de Visual Studio), permite el atributo pero no funciona con enlaces estructurados. informe de error