Typeid(x).name() дает 'y', что это значит?

В коде ниже мы получаем:
12 4
у
typeid().name должен возвращать тип данных,
но я не могу найти, какой тип данных 'y' означает 🤔

void alignment()
{
    struct Foo
    {
        int   i;
        float f;
        char  c;
    };

    std::cout << sizeof(Foo) << '\t' << alignof(Foo) << '\n';
    auto x = alignof(Foo);
    std::cout << typeid(x).name() << '\n';
}

Я пытался найти связь с именами типов данных, но ничего не подходит

typeid().name должен возвращать тип данных. Нет, не должно, это зависит от компилятора, его версии, полуденной фазы и так далее.

273K 05.08.2023 06:50

Результат typeid().name() определяется реализацией. Который, по сути, имеет некоторые ограничения, налагаемые стандартом, но в рамках этих ограничений реализация может создать любую строку, которая ей нравится. Практически ограничений не так много — нет гарантии, что два разных типа будут иметь разные имена, нет гарантии, что результатом будет понятная человеку строка.

Peter 05.08.2023 11:35

@ 273K фаза полудня... так что это зависит от того, происходит ли это до обеда или после обеда.

Swift - Friday Pie 05.08.2023 12:56

Если вам нужна определенная ассоциация имени, вы можете создать собственное сопоставление std::unordered_map<std::type_info const*, std::string>. Boost сделал это с помощью #include <boost/type_index.hpp>, чтобы получить их pretty_name(), или #include <boost/core/demangle.hpp>, чтобы получить их запутанное имя typeid(T).name().

Eljay 05.08.2023 13:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я пытался найти связь с именами типов данных, но ничего не подходит

Ваш компилятор дал std::size_t имя y, мой назвал его m, оба правы и полностью разрешены. В соответствии с: https://en.cppreference.com/w/cpp/types/type_info/имя

Некоторые реализации (например, MSVC, IBM, Oracle) создают удобочитаемое имя типа. Другие, особенно gcc и clang, возвращают искаженное имя, указанное в Itanium C++ ABI. Искаженное имя можно преобразовать в удобочитаемую форму с помощью API-интерфейса, специфичного для реализации, такого как abi::__cxa_demangle, напрямую или через boost::core::demangle. Его также можно передать через утилиту командной строки c++filt -t.

И alignof возвращает size_t, смотрите здесь.

Пример с разборкой этого с помощью Boost: https://godbolt.org/z/8959KdMhv

На самом деле вы оба используете совместимые компиляторы, но size_t — это псевдоним unsigned long long (он же y) в Windows и unsinged long в Linux (он же m по той же спецификации). typeid возвращает имя типа с псевдонимом.

Swift - Friday Pie 05.08.2023 13:04

Другие вопросы по теме