ошибка: ожидаемое первичное выражение до 'decltype' - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь найти тип переменной.В stackoverflow упоминается, что decltype() используется для этой цели.Но когда я пытался использовать его, я получаю сообщение об ошибке, как я упоминал в заголовке.

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int x = 4;
    cout << decltype(x);
    return 0;
}

Я ожидал int, но он показывается как ошибка.error: expected primary-expression before 'decltype'

1 Ответ

1 голос
/ 06 мая 2019

Типы не являются объектами первого класса.Вы не можете передать тип функции, и cout << decltype(x) именно так, передавая тип функции (хотя и украшенный оператором).

Чтобы получить информацию о типе переменной,Вы можете

  1. Читать код.Если тип объекта int, не печатайте его.
  2. Пройдите по вашей программе с помощью отладчика.Показывает тип переменных.
  3. Использовать этот (нестандартный) шаблон функции

    template <class T> void printType(const T&)
    {
        std::cout << __PRETTY_FUNCTION__ << "\n";
    }
    
    printType(x);
    
  4. Использовать Boost.

    #include <boost/type_index.hpp>
    
    std::cout << boost::typeindex::type_id_with_cvr<decltype(x)>().pretty_name() << "\n";
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...