идентификатор типа () возвращает дополнительные символы в g ++

sizeof не говорит вам длину вектора. Он сообщает вам размер (в байтах) фактического объекта.

Чтобы получить количество элементов, хранящихся в векторе, используйте unsorted.size().

Обратите внимание, что в C ++ 11 и более поздних версиях вы можете итерировать свой вектор с помощью цикла на основе диапазона:

for (const auto& str : unsorted) {
    double x = stod(str);
    if (!isnan(x)) {
        sanitised.push_back(x);
    }
}
17
задан AFoglia 15 March 2010 в 15:16
поделиться

2 ответа

Потому что это указатель на foo. И у Фу 3 символа. Так становится P3foo . Другой имеет тип foo , поэтому он становится 3foo . Обратите внимание, что текст зависит от реализации, и в этом случае GCC просто дает вам внутреннее искаженное имя.

Введите это искаженное имя в программу c ++ fil , чтобы получить незафиксированное имя:

$ c++filt -t P3foo
foo*
31
ответ дан 30 November 2019 в 10:50
поделиться

std :: type_info :: name () возвращает имя конкретной реализации. AFAIK, нет портативного способа получить "красивое" имя, хотя у GCC есть одно . Посмотрите на abi :: __ cxa_demangle () .

int status;
char *realname = abi::__cxa_demangle(typeid(obj).name(), 0, 0, &status);
std::cout << realname;
free(realname);
17
ответ дан 30 November 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: