Вот пример кода из викторины С++:
#include <iostream>
struct X {
X(const char *) { std::cout << 1; }
X(const X &) { std::cout << 2; }
X(X &&) { std::cout << 3; }
};
X f(X a) {
return a;
}
X g(const char * b) {
X c(b);
return c;
}
int main() {
f("hello");
g("hello");
}
Каким будет выход программы?
Я так думаю:
-
f(X a)
вызывается, и конструктор неявно преобразуетconst char*
в X, поэтому вывод 1 - Поскольку у нас нет объекта для хранения возвращаемого значения, возвращаемое значение отбрасывается, нет вывода
-
g(const char*)
вызывается, аX c(b)
X(const char*)
Выход 1 - Возвращаемое значение еще раз отбрасывается - без вывода
Итак, ответ 11. Ответ, который дается викторине, равен 131. Ответ, который я получаю с g++ 4.4.4-13, - 121.
Говорят, что этот код был скомпилирован с помощью этой команды:
g++ -std=c++11 -Wall -Wextra -O -pthread
Откуда взялось среднее число? И почему это может быть 3 или 2?