Странный auto

void say() { cout << "Hello\n"; }

int main()
{
    auto ptr = say;
    ptr();
}

Может кто-нибудь объяснить
что здесь происходит.

T.R.O.N.N.O.R, спецификатор типа auto указывает компилятору, что тип переменной необходимо определить из контекста программы. В данном случае это будет эквивалентно

void say() { cout << "Hello\n"; }

int main()
{
    void (*ptr)() = say;
    ptr();
}

Т.е. тип ptr — это указатель на функцию без аргументов, возвращающую void.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.