Errores, fallos, preguntas - página 2417

 
Alexey Navoykov:

Soy consciente de que no compila. Me refiero a la comprobación de sintaxis (que en ME también se llama "Compilar"), porque incluso lo especifiqué entre paréntesis en un post anterior. Si ejecutas la comprobación de sintaxis también en el compilador de C++ (a través de la línea de comandos normalmente), jurará como un encanto.

Mira, si no especificas:

B b;

C++ compila este código perfectamente. Así que la sintaxis es correcta. El problema comienza en el nivel de creación de objetos, porque es ahí donde se asignarán los objetos de clase.

Imagínese una plantilla que nunca se comprueba si se puede utilizar en una cabecera. ¿Qué debe hacer el compilador en este caso? Supongamos que necesitas implementar std:lower para una estructura y no hay implementación en *.h.. El compilador tampoco puede jurar en la fase de comprobación.

¿Podría especificar cómo comprueba la sintaxis de *.h desde la línea de comandos para comprobar este código? Se volvió interesante)

 
Andrey Pogoreltsev:

Mira, si no especificas:

C++ compila este código perfectamente. Entonces la sintaxis es correcta.

Lógica interesante ) ¿Y si se elimina todo el código en absoluto, entonces la sintaxis es aún más correcta? ) He citado un código concreto. No he dicho que la clase B en concreto sea incorrecta. Es posible que se utilice para llamar a métodos estáticos, etc.

Imagínese una plantilla que no compruebe su uso en la cabecera. ¿Qué debe hacer el compilador en este caso?

No es necesario sustituir las nociones. Una plantilla se comprueba sólo cuando se expande con tipos concretos, es comprensible.

¿Podría especificar cómo comprueba la sintaxis de *.h desde la línea de comandos para comprobar este código? Se puso interesante)

Aquí no lo puedo contar, porque no me molesté con tales panderetas, y escribí una macro para VS, que compila el encabezado. Para ello cambia sobre la marcha el modo de documento actual a cpp, compila, y luego vuelve. Simple y de buen gusto.

No entiendo por qué no hay una opción normal para comprobar la sintaxis de la cabecera en el estudio en absoluto. Estoy utilizando una versión bastante antigua, tal vez ya esté disponible.

 
Alexey Navoykov:

No entiendo por qué no hay una opción normal para comprobar la sintaxis de la cabecera en el estudio en absoluto.

Ctrl+F7 , esta combinación probablemente ha estado disponible desde al menos 2008 - compilar un archivo separado
 
TheXpert:
Ctrl+F7 , esta combinación ha existido probablemente desde al menos Studio 2008 - compilar un archivo separado
Yo hablo de las cabeceras, mientras que esta combinación se refiere al cpp. Al menos, así es en mi estudio de 2010.
 

He dudado durante mucho tiempo antes de publicar, comprobando dos veces mi propia construcción, pero todavía hay algo que no funciona en el probador...

La prueba se detuvo literalmente al principio:

Sin cambiar nada, pulso "start" una segunda vez, va hasta el final (con una pequeña pausa en el lugar donde se interrumpió) :

Hice algunas aproximaciones más - los resultados son estrictamente alternativos (uno tras otro, par/impar). Hasta el punto del "precipicio" los gráficos de balance son similares. Nuevamente, no cambio nada, sólo hago clic en "iniciar"

Lo más probable es que en este punto se añada un personaje más (¿por qué no los 5 desde el inicio de la prueba?):


Dejando a un lado la cuestión de la disponibilidad real de memoria (según el administrador de tareas, 1,2-1,4 GB libres, es decir, coincide con el informe), ¿no puede ser que la misma prueba necesite diferentes cantidades de memoria para ejecutarse? Y si el informe dice que 400Mb son suficientes, puedes hacer tres pruebas de este tipo con 1,2Gb...

Datos adicionales: prueba en 5 símbolos, por apertura de barra, H1, 2004...hoy. El cuerpo tiene 7 arrays dobles con 500 elementos y un pequeño array-estructura (almacena datos para cada símbolo, es decir, en este caso 5 x 13), el tamaño se establece durante la inicialización y no cambia más, es decir, no hay nada que consuma memoria. El código es procedimental, simple, pequeño, sin recursividad y sin incluir bibliotecas.

Funciona con cuatro símbolos, pero con 6-7-8 tiene el mismo efecto que con 5 símbolos: sólo una vez. Al mismo tiempo la primera vez después de añadir un nuevo personaje - siempre funciona, el siguiente - no, entonces funciona de nuevo, etc.

Existe la sospecha de que la memoria no se libera de manera oportuna, sólo la presencia de un error relacionado con su escasez.

Total de 3 problemas:

  • la prueba se ejecuta sólo una vez (estrictamente) si no hay cambios en la configuración o el código
  • hay suficiente memoria libre para varias pruebas (si se puede confiar en el mensaje después de pasar la prueba con éxito), pero aparece un error de memoria insuficiente (en los intentos pares). (400 se utilizaron durante el "éxito", 1200 estaban libres cuando se produjo el error)
  • algunos personajes se conectan en medio de la prueba, si hay un historial (puedes verlo en el registro de sincronización). Señal de sondeo en cada nueva barra de todos los símbolos (en bucle)

 
Alexey Navoykov:
Se trataba de las cabeceras, y esta combinación se refiere a cpp. Al menos en mi estudio de 2010 lo hace.
sí ( y tu manera parece ser más conveniente que hacer un cpp vacío para la cabecera
 

¿Por qué está prohibido?

void fn(const int&) {}

void start() {
   fn(5);  // parameter passed as reference, variable expected

}
 
Vict:

¿Por qué está prohibido?

literal sólo por el valor. por qué - no lo sé, tienes que preguntar al equipo de desarrollo
 
TheXpert:
Esta ha sido la tradición desde tiempos inmemoriales. literales por valor solamente. por qué - no lo sé, tienes que preguntar a los desarrolladores

Pasar un parámetro por referencia implica que hay una variable distribuida en memoria.

Las constantes no se almacenan en ningún sitio y se utilizan directamente.

 
TheXpert:
No sé por qué, tendré que preguntar al equipo de desarrollo.

Para complacer a los masoquistas. No me impresionó el bilio estándar, así que decidí escribir un vector similar, pero debido a la abundancia de "trucos", resulta ser otro subdesarrollo.

void push_back(const T &value);