Errores, fallos, preguntas - página 1691

 
error de generación de código
void OnStart()
{
  int a = {0}; // code generation error
}
 
Andrey Dik:

¿Qué valores de dispersión produce la funciónCopySpread() para el período del gráfico correspondiente?

No está claro si es la media, el mínimo o el máximo, y la ayuda de la función no dice nada al respecto.

 
Andrey Dik:

¿Qué valores de dispersión produce la funciónCopySpread() para el período del gráfico correspondiente?

No está claro si es la media, el mínimo o el máximo, y la ayuda de la función no dice nada al respecto.

Dónde, en la cuenta o en el probador
 
Alexander Bereznyak:
donde, en la cuenta o en el probador
ninguno de los cuales está en la referencia.
 

llamada ambigua a una función sobrecargada con los mismos parámetros

class A
{
public:  
//  void func( const int ) const {} // если заменить на это - будет компилироваться
  void func( const int ) {}

//  void func( const int& ) const {} // если заменить на это - будет компилироваться
  void func( const int& ) {}
};

void OnStart()
{
  A a;

  a.func(0);  

  int i1 = 0;
  a.func(i1);  

  const int i2 = 0;
  a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters  
}

¿Es un malentendido o un error?

 
fxsaber:

¿Es un malentendido mío o un error?

Entiendo que este código debería comportarse igual en ambos casos.
 
fxsaber:

llamada ambigua a una función sobrecargada con los mismos parámetros

¿Es un malentendido o un error?

Un malentendido.

Bueno, ya está, he contestado. ))))

 
Комбинатор:
A mi entender este código debe comportarse igual en ambos casos.

Eso es lo que yo también pienso.

Sergei Vladimirov:

Un malentendido.

Bueno, ya está, he contestado. ))))

Ese estúpido ejemplo de código fuente tardó mucho tiempo en crearse. Mi sentido del humor casi desapareció mientras lo creaba.

 
fxsaber:

Este ejemplo de fuente tonta ha tardado mucho en crearse. Mi sentido del humor casi desapareció mientras lo creaba.

(De acuerdo. )

En las tres versiones de la llamada es imposible entender si el argumento se pasa por valor o por referencia, por lo que el compilador no puede elegir a qué función llamar. Y el modificador const las sobrecarga: void f(){} y void f() const {} son funciones diferentes. Si en tu ejemplo declaras uno de los métodos como const, entonces la incertidumbre desaparecerá: el compilador seleccionará el método deseado dependiendo de si la llamada se hace desde un objeto constante o no (el tipo de argumento en tu ejemplo no importa).

Su objeto a no es una constante, por lo que el método sin const será llamado las tres veces. Si declaras un objeto como constante (A const a;), entonces se llamará a un método constante.

Vea cuál será el resultado:

class A
{
public:  
  void func() {Print("Non const");}
  void func() const {Print("Const");}
};

void OnStart()
{
        A a;
        A const b;
        
        a.func();
        b.func();
}
 
Sergei Vladimirov:

Bien. )

En las tres variantes de la llamada es imposible entender si un argumento se pasa por valor o por referencia, por eso el compilador no puede elegir a qué función llamar. Y el modificador const las sobrecarga: void f(){} y void f() const {} son funciones diferentes. Si en tu ejemplo declaras uno de los métodos como const, entonces la incertidumbre desaparecerá: el compilador seleccionará el método deseado dependiendo de si la llamada se hace desde un objeto constante o no (el tipo de argumento en tu ejemplo no importa).

Su objeto a no es una constante, por lo que el método sin const será llamado las tres veces. Si se declara el objeto como constante (A const a;), entonces se llamará al método constante.

Lo habrías ejecutado primero. El error está SOLO aquí
const int i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters

Todas las llamadas anteriores pasan sin problemas.

Mira lo que imprime:

Esto es de otro hilo.