c++17

¿Qué hizo que i = i++ + 1; legal en C++17?

Antes de empezar a gritar comportamiento indefinido, esto es explícitamente listado en N4659 (C++17) i = i++ + 1; ... quierdo i no es "otro efecto secundario" ni "usando el valor del mismo objeto escalar" ya que la expresión id es un lvalue.

enumeración a cadena en C++moderno 11 / C++14 / C++17 y futuro C++20

Contrariamente a todas las otras preguntas similares, esta pregunta es sobre el uso de las nuevas características de C++. 2 ... go C++ en tiempo de compilación usando trucos de metaprogramación basados en funciones variadic template class y constexpr...

Lambda volviendo a sí mismo: ¿es esto legal?

Considere este programa bastante inútil: #include <iostream> int main(int argc, char* argv[]) { int a = 5; auto ... eral, sino sobre la legalidad de esta forma específica de hacerlo. Pregunta relacionada: C++ lambda regresando a sí mismo.

¿Cómo es exactamente std::string view más rápido que const std:: string&?

std::string_view ha llegado a C++17 y es ampliamente recomendado usarlo en lugar de const std::string&. Una de las razon ... pido que const std::string& cuando se usa como tipo de parámetro? (supongamos que no se hacen copias en el destinatario)

¿Cómo funciona guaranteed copy elision?

En la reunión de Estándares ISO C++ de Oulu de 2016, el comité de estándares votó en C++17 una propuesta llamada Elisión de c ... s casos en los que la copia elision ya estaba permitida, o son necesarios cambios de código para garantizar la copia elision?

¿Cómo funcionan las variables en línea?

En la reunión de Estándares Oulu ISO C++ de 2016, una propuesta llamada Variables inline fue votada en C++17 por el comité de ... variables en línea, cómo funcionan y para qué son útiles? ¿Cómo se deben declarar, definir y utilizar las variables en línea?

¿Son las características experimentales de C++ moderno confiables para proyectos a largo plazo?

Tengo un proyecto que actualmente usa C++11/14, pero requiere algo como std::filesystem, que solo está disponible en C++17, y ... osas sobre las que preguntarse. ¿Por qué debería o no usarlos? Estoy desconcertado con un nuevo proyecto y no sé qué decidir.

¿Un puntero con la dirección y el tipo correctos sigue siendo siempre un puntero válido desde C++17?

(En referencia a esta pregunta y respuesta .) Antes del estándar C++17, la siguiente frase se incluyó en [basic.compuesto]/ ... a interpretación de esta modificación del derecho estándar o hay otras reglas que compensan la ¿supresión de la frase citada?

¿Se han cambiado las reglas para los constructores protegidos en C++17?

Tengo este caso de prueba: struct A{ protected: A(){} }; struct B: A{}; struct C: A{ C(){} }; struct D: A{ D() = default; }; ... or FITNESS FOR A PARTICULAR PURPOSE. ¿Es este cambio de comportamiento parte de C++17 o es un error en ambos compiladores?

¿Por qué la construcción de std::opcional es más cara que un par std::?

Considere estos dos enfoques que pueden representar una " opción int": using std_optional_int = std::optional<int>; us ... s en: main: mov DWORD PTR a[rip], 42 xor eax, eax mov DWORD PTR b[rip], 42 ret

Es std:: memcpy entre diferentes tipos trivialmente copiables comportamiento indefinido?

He estado usando std::memcpy para eludir el alias estricto durante mucho tiempo. Por ejemplo, inspeccionando un float, como ... ta pregunta. Por lo que sé, podría reemplazar std::memcpy con un simple bucle de copia de bytes, y la pregunta será la misma.

¿Cómo ayuda el nuevo bucle for basado en rangos en C++17 a los rangos TS?

El comité cambió el bucle for basado en rangos de: C++11: { auto && __range = range_expression ; for (aut ... } } Y la gente dijo que esto hará que los rangos de implementación TS sean más fáciles. ¿Puede darme algunos ejemplos?

¿Por qué los enlaces estructurados de C++17 no usan {}?

Encontré la propuesta original para los enlaces estructurados *C++ aquí. Propone una manera de enlazar fácilmente múltiples ... stas se escriben { like, this}" viene una nueva lista-sintaxis? ¿Por qué? ¿Cuál es el problema con los aparatos rizados aquí?

Cómo implementar corrutinas en C++

Dudo que pueda hacerse portablemente, pero ¿hay alguna solución por ahí? Creo que se podría hacer creando una pila alternati ... r SP + BP. Los destructores y la seguridad de excepción parecen difíciles pero solucionables. ¿Se ha hecho? Es imposible?

¿Qué son las guías de deducción de plantillas y cuándo debemos usarlas?

El estándar C++17 introduce "guías de deducción de plantillas". Deduzco que tienen algo que ver con la nueva deducción de arg ... ué sirven. ¿Qué son las guías de deducción de plantillas en C++17? ¿Por qué (y cuándo) los necesitamos? ¿Cómo los declaro?

¿Cuáles son las garantías de orden de evaluación introducidas por C++17?

¿Cuáles son las implicaciones de las garantías de la orden de evaluación votada en C++17 (P0145) en el código típico de C++ ... ¿Qué cambia de cosas como i=1; f(i++, i) Y std::cout << f() << f() << f() ; O f(g(),h(),j());

experimental:: error del enlazador del sistema de archivos

Intento usar las nuevas características de c++1z realmente en la cabeza de desarrollo dentro de gcc 6.0. Si pruebo este pequ ... versión Gcc es la instantánea linux-gnu_6-20151011 ¿Algún consejo sobre cómo vincular las nuevas características de c++1z?

Cómo obtener eficientemente una 'vista de cadena' para una subcadena de ' std:: string`

Usando http://en.cppreference.com/w/cpp/string/basic_string_view como referencia, no veo manera de hacer esto más elegantem ... ejor que se me ocurre es usar alias para hacer las cosas menos detalladas. using sv = std::string_view; sv(s).substr(6, 5);

Entendiendo std:: tamaño de interferencia destructiva de hardware y std:: tamaño de interferencia constructiva de hardware

Se ha añadido C++17std::hardware_destructive_interference_size y std::hardware_constructive_interference_size. Primero, pensé ... puede proteger ¿contra el uso compartido falso en ese escenario cuando no está seguro en qué máquina se ejecutará su código?

reinterpretar cast creando un objeto construible trivialmente por defecto

Cppreference† afirma que: Los objetos con constructores por defecto triviales se pueden crear usando reinterpret_cast en ... alloc: placement-new es necesario para introducir formalmente un nuevo objeto y evitar un posible comportamiento indefinido.