Erros, bugs, perguntas - página 1691

 
erro de geração de código
void OnStart()
{
  int a = {0}; // code generation error
}
 
Andrey Dik:

Que valores de spread produz a funçãoCopySpread() para o período gráfico correspondente?

Não é claro se é a média, mínima ou máxima, e a ajuda da função não diz nada sobre isso.

 
Andrey Dik:

Que valores de spread produz a funçãoCopySpread() para o período gráfico correspondente?

Não é claro se é a média, mínima ou máxima, e a ajuda da função não diz nada sobre isso.

Onde, na conta ou no testador
 
Alexander Bereznyak:
onde, na conta ou no testador
nenhuma das quais se encontra na referência.
 

chamada ambígua para função sobrecarregada com os mesmos 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  
}

Será isto um mal-entendido ou um insecto?

 
fxsaber:

É o meu mal-entendido ou um insecto?

O meu entendimento é que este código deve ter o mesmo comportamento em ambos os casos.
 
fxsaber:

chamada ambígua para função sobrecarregada com os mesmos parâmetros

Será isto um mal-entendido ou um insecto?

Mal-entendido.

Bem, é isso, já lhe respondi. ))))

 
Комбинатор:
Na minha opinião, este código deve comportar-se da mesma forma em ambos os casos.

É o que eu também penso.

Sergei Vladimirov:

Mal-entendido.

Bem, é isso, já respondi. ))))

Esse estúpido exemplo de código fonte levou muito tempo a ser criado. O meu sentido de humor quase desapareceu enquanto eu o criava.

 
fxsaber:

Este exemplo de fonte idiota levou muito tempo a ser criado. O meu sentido de humor quase desapareceu enquanto eu o criava.

(risos) Está bem. )

Em todas as três versões da chamada é impossível compreender se o argumento é passado por valor ou por referência, pelo que o compilador não pode escolher qual a função a chamar. E o modificador const {} sobrecarrega-as: f(){} e f() const {} vazias são funções diferentes. Se no seu exemplo declarar um dos métodos como constante, então a incerteza desaparecerá: o compilador seleccionará o método desejado dependendo se a chamada é feita a partir de um objecto constante ou não (o tipo de argumento no seu exemplo não importa).

O seu objecto a não é uma constante, por isso o método sem const const será chamado as três vezes. Se declarar um objecto como constante (A const a;), então será chamado um método constante.

Veja qual será a produção:

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:

Bom. )

Nas três variantes da chamada é impossível compreender se um argumento é passado por valor ou por referência, por isso é que o compilador não pode escolher que função chamar. E o modificador const {} sobrecarrega-as: f(){} e f() const {} vazias são funções diferentes. Se no seu exemplo declarar um dos métodos como constante, então a incerteza desaparecerá: o compilador seleccionará o método desejado dependendo se a chamada é feita a partir de um objecto constante ou não (o tipo de argumento no seu exemplo não importa).

O seu objecto a não é uma constante, por isso o método sem const const será chamado as três vezes. Se declarar o objecto como constante (A const a;), então o método constante será chamado.

Tê-lo-ia executado primeiro. O erro é SOMENTE aqui
const int i2 = 0;
a.func(i2); // 'func' - ambiguous call to overloaded function with the same parameters

Todas as chamadas antes disso são efectuadas sem qualquer problema.

Veja o que se imprime:

Isto é de outro fio.

Razão: