La notación abreviada del operador postfijo++ no compila cuando se realiza una conversión explícita de un puntero de la clase base a una derivada
class A {
};
class B : public A {
public:
voidoperator++( int ) {}
voidoperator++() {}
};
void f( A* a )
{
((B *)a).operator++( 0 ); //нормально
((B *)a).operator++(); //нормально
++((B *)a); //нормально
((B *)a)++; //ошибка
}
class A {
public:
int f() { return ( 1 ); }
};
class B {
public:
B( const A *aa ) : a( aa ) {}
int g() { return ( a.f() ); } //должно быть предупреждение, поскольку a.f() не constconst A *a;
};
No es la primera vez, pero es la única vez que se obtienen esas fotos al subirlas, lo que significa que hay que establecer algunos criterios (probablemente tenga un tamaño determinado). ). En todos los demás lugares se muestran con normalidad. Por favor, dime qué pasa.
Se produce un error de compilación innecesario si la macro utiliza una conversión de tipo de resultado y luego no se utiliza el valor de retorno (a veces es necesario, a veces no)
int g( int x ) { return ( x ); }
#define F( X ) (long)g( X )
voidOnStart()
{
int f = F( 0 ); //нормально
F( 0 ); //ошибка компиляции
}
A100: Se produce un error de compilación innecesario si una macro utiliza una conversión de tipo de resultado, y el valor de retorno no se utiliza posteriormente (a veces es necesario, a veces no)
Esto no tiene nada que ver con el uso de definiciones.
Una simple definición equivalente también dará el mismo error
La notación abreviada del operador postfijo++ no compila cuando se realiza una conversión explícita de un puntero de la clase base a una derivada
Al menos el compilador debería advertir que a.f() no es const
Gracias por el aviso, ambos errores han sido corregidos.
Pero en las plantillas. Te daré ejemplos más adelante.
Aquí tampoco está claro.
todo funciona correctamente, pero si se añade la función intermedia ex2(...)
El resultado es diferente. ¿Qué ha hecho ex2(...)? - acaba de pasar los punteros por referencia en
Por favor, eche un vistazo a
Aquí tampoco está claro.
todo funciona correctamente, pero si se añade la función intermedia ex2(...)
El resultado es diferente. ¿Qué ha hecho ex2(...)? - acaba de pasar los punteros por referencia en
Por favor, eche un vistazo a
No es la primera vez, pero es la única vez que se obtienen esas fotos al subirlas, lo que significa que hay que establecer algunos criterios (probablemente tenga un tamaño determinado).
). En todos los demás lugares se muestran con normalidad. Por favor, dime qué pasa.
Se produce un error de compilación innecesario si una macro utiliza una conversión de tipo de resultado, y el valor de retorno no se utiliza posteriormente (a veces es necesario, a veces no)
Esto no tiene nada que ver con el uso de definiciones.
Una simple definición equivalente también dará el mismo error
P.D. Ahora habrá un vorning aquí.
Después de recompilar el indicador, el error "array out of range" comenzó a ocurrir cuando se trabaja con arrays dinámicos.
Antes no ocurría. ¿Qué hacer?