-1

次の関数を検討してください

int f (const int& i)
{
  cout << "in const reference function";
}
int f ( int &i)
{
  cout << "in non const reference function";
}
int main()
{
    int i;
    f(3);
    f(i);
}

この場合、関数呼び出しが関数定義にバインドされている場合、1 つは左辺値iであり、もう 1 つはそうでないため、コンパイル時または実行時になりますか?

この 2 つの関数以外は、パラメーターの数と型に関しては同じです。

4

3 に答える 3

0

コンパイル時に定義されますこのコード:

void f (const int& i)
{
    return;
}
void f ( int &i)
{
    return;
}
int main()
{
    int i = 12;
    f(3);
    f(i);
}

これにgcc 5.2でコンパイルされます:

movl    $3, -4(%rbp) //Declare variable i with 3
leaq    -4(%rbp), %rax
movq    %rax, %rdi
call    f(int const&)  //And call the method with const int&
leaq    -8(%rbp), %rax 
movq    %rax, %rdi
call    f(int&) //Call the method with only the reference
于 2015-07-21T08:49:25.373 に答える
0

パラメータの型が異なるため、これはコンパイル時にのみ行われます。したがって、これらは単純なオーバーロードされた関数ではなく、その呼び出しはコンパイル時にのみ決定されます。

于 2015-07-21T08:49:47.423 に答える