Preguntas etiquetadas con c++

C ++ es un lenguaje de programación de propósito general. Originalmente fue diseñado como una extensión de C y tiene una sintaxis similar, pero ahora es un lenguaje completamente diferente. Use esta etiqueta para preguntas sobre el código (que se compilará) con un compilador de C ++. Utilice una etiqueta específica de la versión para preguntas relacionadas con una revisión estándar específica [C ++ 11], [C ++ 14], [C ++ 17] o [C ++ 20], etc.

3
¿Por qué la dimensión de una matriz es parte de su tipo?
Mientras leía el libro de C ++ Primer, me encontré con esta declaración: "El número de elementos en una matriz es parte del tipo de matriz". Así que quería averiguarlo usando el siguiente código: #include<iostream> int main() { char Array1[]{'H', 'e', 'l', 'p'}; char Array2[]{'P', 'l', 'e', 'a', 's', 'e'}; …
14 c++  arrays  c++11 


3
¿Se requiere un nombre de clase completo hasta el alcance global para las definiciones de funciones de miembros fuera de línea?
Esta pregunta me hizo preguntarme si alguna vez es útil / necesario calificar completamente los nombres de clase (incluido el operador de alcance global) en una definición de función de miembro fuera de clase. Por un lado, nunca había visto esto antes (y la sintaxis para hacerlo correctamente parece oscura). …

2
¿GCC9 evita el estado sin valor de std :: variant permitido?
Recientemente seguí una discusión de Reddit que condujo a una buena comparación de la std::visitoptimización entre los compiladores. Noté lo siguiente: https://godbolt.org/z/D2Q5ED Tanto GCC9 como Clang9 (supongo que comparten el mismo stdlib) no generan código para verificar y lanzar una excepción sin valor cuando todos los tipos cumplen algunas condiciones. …


1
¿Por qué std :: swap no funciona en elementos vectoriales <bool> en Clang / Win?
Tengo un código como este: #include &lt;vector&gt; #include &lt;utility&gt; int main() { std::vector&lt;bool&gt; vb{true, false}; std::swap(vb[0], vb[1]); } Argumentos sobre la cordura de vector&lt;bool&gt;un lado, esto estaba funcionando bien en: Clang para Mac Visual Studio para Windows GCC para Linux Luego intenté compilarlo con Clang en Windows y recibí el …

1
¿Puede el constructor de rango std :: vector invocar conversiones explícitas?
¿El siguiente programa está bien formado? #include &lt;vector&gt; struct A { explicit A(int) {} }; int main() { std::vector&lt;int&gt; vi = {1, 2, 3, 4, 5}; std::vector&lt;A&gt; va(vi.begin(), vi.end()); } Según C ++ 17 [secuencia.reqmts], el requisito para X u(i, j); donde Xes un contenedor de secuencia, es: Tserá EmplaceConstructibleen …
14 c++  c++17 

3
Sobrecargar una función lambda
¿Cómo sobrecargar una función lambda local simple? SSE del problema original: #include &lt;iostream&gt; #include &lt;map&gt; void read() { static std::string line; std::getline(std::cin, line); auto translate = [](int idx) { constexpr static int table[8]{ 7,6,5,4,3,2,1,0 }; return table[idx]; }; auto translate = [](char c) { std::map&lt;char, int&gt; table{ {'a', 0}, {'b', …

3
La función de plantilla no funciona para la función de puntero a miembro tomando const ref
Últimamente escribí una función de plantilla para resolver algunas repeticiones de código. Se parece a esto: template&lt;class T, class R, class... Args&gt; R call_or_throw(const std::weak_ptr&lt;T&gt;&amp; ptr, const std::string&amp; error, R (T::*fun)(Args...), Args... args) { if (auto sp = ptr.lock()) { return std::invoke(fun, *sp, args...); } else { throw std::runtime_error(error.c_str()); } …
14 c++  templates 

3
std :: bit_cast con std :: array
En su reciente charla "Punking de tipo en C ++ moderno", Timur Doumler dijo que std::bit_castno se puede usar para convertir un bit floaten un unsigned char[4]porque las matrices de estilo C no se pueden devolver de una función. Deberíamos usar std::memcpyo esperar hasta C ++ 23 (o posterior) cuando …

1
¿Cómo funciona la implementación de c ++ nullptr?
Tengo curiosidad por saber cómo nullptrfunciona. Las normas N4659 y N4849 dicen: tiene que tener tipo std::nullptr_t; no puedes tomar su dirección; se puede convertir directamente a un puntero y puntero a miembro; sizeof(std::nullptr_t) == sizeof(void*); su conversión a booles false; su valor se puede convertir a tipo integral de …

3
Copia de lista de inicialización? ¿Por qué esto compila?
Estoy usando Microsoft Visual Studio Community 2019, V16.5.2. Quiero probar la inicialización de la lista Consulte el siguiente programa de prueba: #include &lt;string&gt; void foo(std::string str) {} int main() { foo( {"str1", "str2"} ); return 0; } Esto compila sin error y advertencia. ¿Por qué? Da un error de tiempo …
13 c++ 

1
std :: is_constructible devuelve un valor inconsistente para el constructor privado
¿Cuáles son las reglas por las cuales se std::is_constructiblemanejan los constructores privados? Dado el siguiente código: #include &lt;iostream&gt; class Class { private: Class() { } }; template &lt;typename T&gt; class Test { public: static void test() { std::cout //&lt;&lt; std::is_constructible&lt;Class&gt;::value &lt;&lt; std::is_constructible&lt;T&gt;::value &lt;&lt; std::endl; } }; int main() { Test&lt;Class&gt;::test(); …
13 c++  typetraits 


3
Ejecutar la función dentro de la plantilla de función solo para aquellos tipos que tienen la función definida
Tengo una plantilla de función que toma muchos tipos diferentes como entrada. De esos tipos, solo uno de ellos tiene una getInt()función. Por lo tanto, quiero que el código ejecute la función solo para ese tipo. Por favor sugiera una solución. Gracias #include &lt;type_traits&gt; #include &lt;typeinfo&gt; class X { public: …

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.