C++ C++  ·  20 вопросов  ·  ~55 мин  ·  ⏱ Таймер 55:00  ·  Лёгкий  · 

Функции и перегрузка

Здесь мало узнать знакомую сигнатуру: нужно понять, какие объявления обозначают одну функцию, как формируется множество кандидатов и почему близкая на вид перегрузка иногда делает вызов неоднозначным.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. В тесте 20 вопросов, время — 55 минут. Во многих заданиях недостаточно узнать конструкцию: проследите порядок вычислений, время жизни объектов, владение ресурсами и условия, при которых решение остаётся корректным. После завершения откроются правильные ответы, объяснения, общий результат и тематические шкалы.
Вопрос 1 из 20
Можно ли перегрузить две свободные функции, отличающиеся только типом возвращаемого значения?
Вопрос 2 из 20
Какие два объявления обозначают одну и ту же функцию, а не две перегрузки?
C++C++20
void f(int value);
void f(const int value); // повторное объявление той же функции

void g(int& value);
void g(const int& value); // другая перегрузка
Вопрос 3 из 20
Что нужно добавить, чтобы метод можно было вызвать через const-объект?
C++C++20
struct Report {
    int pages() /* что добавить? */ { return 12; }
};
Вопрос 4 из 20
Какой тип имеет переменная `pf`?
C++C++20
using Handler = int (*)(double);
Handler pf = nullptr;
Вопрос 5 из 20
Какое объявление корректно описывает функцию, которая принимает массив как параметр?
C++C++20
void inspect(int* data);
void inspect_with_size(int data[10]);

template<std::size_t N>
void inspect_exact(int (&data)[N]);

int values[10]{};
Вопрос 6 из 20
Какой кандидат выигрывает при вызове f(10)?
C++C++20
#include <iostream>
void f(int) { std::cout << "int"; }
void f(double) { std::cout << "double"; }
int main() { f(10); }
Вопрос 7 из 20
Каков результат вызова f(1u)?
C++C++20
void f(int);
void f(unsigned);
void f(long);
f(1u);
Вопрос 8 из 20
Почему вызов g(0) неоднозначен?
C++C++20
void g(long);
void g(double);
g(0);
Вопрос 9 из 20
Какая перегрузка выберется для строкового литерала?
C++C++20
#include <string>
void f(const char*);
void f(std::string);
f("abc");
Вопрос 10 из 20
Какой кандидат выберет разрешение перегрузки для вызова f(1)?
C++C++20
#include <iostream>
template<class T> void f(T) { std::cout << "template"; }
void f(double) { std::cout << "double"; }
int main() { f(1); }
Вопрос 11 из 20
Какое объявление допустимо?
C++C++20
void write(std::string_view text, int retries = 3);
// void write(std::string_view text = "", int retries); // ошибка

write("hello");
Вопрос 12 из 20
Какое число напечатает виртуальный вызов p->show() без явного аргумента?
C++C++20
#include <iostream>
struct Base { virtual void show(int x = 1) { std::cout << x; } };
struct Derived : Base { void show(int x = 2) override { std::cout << x; } };
int main() { Derived d; Base* p = &d; p->show(); }
Вопрос 13 из 20
Где обычно следует указывать аргумент по умолчанию для публичной функции?
Вопрос 14 из 20
Что произойдёт с вызовом `log()` после двух объявлений ниже в одной области видимости?
C++C++20
void log(int level);
void log(int level = 1);
log();
Вопрос 15 из 20
Почему значения по умолчанию не стоит использовать как скрытый механизм изменения поведения библиотеки?
Вопрос 16 из 20
Какая версия process будет вызвана для временного объекта?
C++C++20
struct Item {};
void process(Item&);
void process(const Item&);
void process(Item&&);
process(Item{});
Вопрос 17 из 20
Почему `swap(a, b)` внутри шаблона часто пишут после `using std::swap;` без квалификатора?
C++C++20
template<class T>
void exchange_values(T& a, T& b) {
    using std::swap;
    swap(a, b); // учитывает перегрузку в пространстве имён T
}
Вопрос 18 из 20
Что произойдёт в Derived::test()?
C++C++20
struct Base { void f(int); };
struct Derived : Base {
    void f(double);
    void test() { f(1); }
};
Вопрос 19 из 20
Какая перегрузка метода value() будет вызвана для `std::move(x)`?
C++C++20
#include <utility>
struct X {
    int value() & { return 1; }
    int value() && { return 2; }
};
X x;
int n = std::move(x).value();
Вопрос 20 из 20
Какое исправление наиболее точно устраняет неоднозначность вызова `f(nullptr)`?
C++C++20
void f(int*);
void f(double*);
f(nullptr);

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу