Choose the correct statements for the following code
struct A {
    virtual void Foo() = 0;
};

struct B : A {
    void Foo() {
        /*code*/
    }
};
Explanation
The code of the function B::Foo() can be inlined at the place where this function is called if the compiler can unambiguously determine that this function will be called at this place, regardless of context. For example:

void test(B *b) {
  // this call can be inlined, because it's obvious that B::Foo()
  // will be called in any case, regardless of context.
b->Foo();
}
The code of the function B::Foo() cannot be inlined in cases where the compiler cannot unambiguously determine that the function B::Foo() will be called in this place. For example:

void test(A *a) {
  // this call cannot be inlined, because virtual method pointer A::Foo()
  // can point to any of the methods X::Foo(), where X is a descendant of class A,
  // i.e. the call to a particular method depends on the context (pointer to a virtual function A::Foo()).
  a->Foo();
}

Слідкуй за CodeGalaxy

Мобільний додаток Beta

Get it on Google Play
Зворотній Зв’язок
Cosmo
Зареєструйся Зараз
або Підпишись на майбутні тести