Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
48 / 37 / 14
Регистрация: 23.12.2015
Сообщений: 199

Смысл std::size_t а не size_t

31.01.2022, 19:41. Показов 3311. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здесь
Что наиболее быстро для попиксельного перекодирования? Есть ли стандартные функции?
обсуждали пример профессионального кода (исходники библиотеки SFML)
https://github.com/SFML/SFML/b... e.cpp#L303
В нем есть например строка
for (std::size_t y = 0; y < m_size.y; ++y)
В ней все очевидно, кроме выделенного.
В чем смысл так писать? Если скажем std::string компилится когда подключен "его" инклуд, а вот string только если ранее подключено пространство имен std, и есть неочевидные вопросы - что лучше, но это хоть относительно понятно, "что и о чем думать".
А почему вообще в языке существует std::size_t если size_t это внебиблиотечный целочисленный тип, и можно же писать просто size_t, это годится и без подключения std?

https://www.sfml-dev.org/docum... eoMode.php
Ранее в документации SFML той же видел такой код

C++
1
2
3
4
5
6
7
8
9
// Display the list of all the video modes available for fullscreen
std::vector<sf::VideoMode> modes = sf::VideoMode::getFullscreenModes();
for (std::size_t i = 0; i < modes.size(); ++i)
{
    sf::VideoMode mode = modes[i];
    std::cout << "Mode #" << i << ": "
              << mode.width << "x" << mode.height << " - "
              << mode.bitsPerPixel << " bpp" << std::endl;
}
Тот же вопрос.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2022, 19:41
Ответы с готовыми решениями:

Беззнаковый тип size_t: чем различие между size_t, uintptr_t, ptrdiff_t и intptr_t?
В чем вообще его смысл? Разве запись double a = {1,2,3}; int i = 1; *(a+i)+=1; значит, что мы перепрыгивам вперед по...

Std::size_t и std::ptrdiff_t
При вычитании одного указателя из другого, должен выходить корректный результат типа std::ptrdiff_t. Из чего следует что массивов с...

size_t и npos
Здраствуйте! Тут в одной теме нашёл код #include&lt;string&gt; #include&lt;iostream&gt; int main(){ std::string...

22
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
31.01.2022, 20:08
Цитата Сообщение от Ajir Посмотреть сообщение
это внебиблиотечный целочисленный тип
во-первых:
C++
1
2
3
4
5
int main()
{
    size_t v = 42;
    (void)v;
}
Code
1
2
3
4
5
6
7
8
Error(s):
490796605/source.cpp: In function ‘int main()’:
490796605/source.cpp:3:5: error: ‘size_t’ was not declared in this scope
     size_t v = 42;
     ^~~~~~
490796605/source.cpp:4:11: error: ‘v’ was not declared in this scope
     (void)v;
           ^
во-вторых, std::size_t - это плюсовый тип, а size_t - сишный.
и это скорее size_t добавлен в библиотеку с++, а не наоборот.
std::size_t само собой разумеющийся в с++.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,176
31.01.2022, 20:13
Цитата Сообщение от Ajir Посмотреть сообщение
Если скажем std::string компилится когда подключен "его" инклуд, а вот string только если ранее подключено пространство имен std
Не понял этой фразы. Что такое "подключено пространство имен"?

И <string> нужно подключать в любом случае.

Цитата Сообщение от Ajir Посмотреть сообщение
А почему вообще в языке существует std::size_t если size_t это внебиблиотечный целочисленный тип, и можно же писать просто size_t, это годится и без подключения std?
Какой еще "внебиблиотечный тип"? std::size_t - это именно библиотечный тип, объявленный именно в стандартных заголовках. Ничего "внебиблиотечного" в нем нет.

Все имена, объявленные в "сишных" загловках, вроде <cstdlib>, находятся в пространстве имен std. То есть объявляется там именно std::size_t. Но по ряду причин "сишным" загловкам разрешается опционально дополнительно объявлять эти же имена в глобальном пространстве имен.

То есть std::size_t гарантированно есть всегда (посде подключения одного из требуемых заголовков). А вот наличия ::size_t совсем не гарантируется. Потому и принято писать именно std::size_t.

P.S. Со "старинными" заголовками, вроде <stdlib.h> ситуация обратная: гарантируется ::size_t, опционально может быть std::size_t. Но включение "старинных" заголовков в С++ является deprecated.

Ваш код по ссылке включает <cstring>. Значит он должен работаь именно с std::size_t.
1
48 / 37 / 14
Регистрация: 23.12.2015
Сообщений: 199
31.01.2022, 20:17  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не понял этой фразы. Что такое "подключено пространство имен"?
Ну в смысле
using namespace std;
или аналогичное написано, это назвал "подключено пространство имен"?

Добавлено через 1 минуту
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
То есть std::size_t гарантированно есть всегда (посде подключения одного из требуемых заголовков). А вот наличия ::size_t совсем не гарантируется. Потому и принято писать именно std::size_t.
Ну и что же, если я наивный программист, то могу в счетчике цикла писать просто int - три буквы, но если хочу быть хорошим, то и size_t мало?!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,176
31.01.2022, 20:19
Цитата Сообщение от Ajir Посмотреть сообщение
Ну и что же, если я наивный программист, то могу в счетчике цикла писать просто int - три буквы, но если хочу быть хорошим, то и size_t мало?!
Можно еще сделать #define Z int. Тогда везде можно будет писать всего одну букву.
1
48 / 37 / 14
Регистрация: 23.12.2015
Сообщений: 199
31.01.2022, 20:22  [ТС]
Ну да, в принципе конечно можно для std::size_t ввести через define или typedef псевдоним какой по эн причин выберу, но гм - идеал плюсов что, чтобы и std::int и std::char надо было писать?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
31.01.2022, 20:23
Цитата Сообщение от Ajir Посмотреть сообщение
но гм - идеал плюсов что, чтобы и std::int и std::char надо было писать?
нет. потому что int, char и т.п. - не библиотечные типы, а встроенные.
1
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
31.01.2022, 20:25
Цитата Сообщение от Ajir Посмотреть сообщение
чтобы и std::int и std::char надо было писать?
size_t, в отличии от указанный типов - всего лишь псевдоним.
1
48 / 37 / 14
Регистрация: 23.12.2015
Сообщений: 199
31.01.2022, 20:28  [ТС]
GbaLog-, TheCalligrapher, Ну и да, мне в голову не приходило, что size_t может быть объявлен где-то в инклудах, думал, что раз целочисленный - то по определению на уровне самого языка(((
Буду знать, но это грустно(((
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
31.01.2022, 20:31
Цитата Сообщение от Ajir Посмотреть сообщение
и можно же писать просто size_t
Для читающего есть определённая разница: std::size_t чётко определённый задокументировнный тип, тогда же как size_t в каждом конкретном случае может оказаться чем угодно.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
31.01.2022, 20:38
Цитата Сообщение от John Prick Посмотреть сообщение
тогда же как size_t в каждом конкретном случае может оказаться чем угодно.
эээ, нет.
http://eel.is/c++draft/cstddef.syn#1
то бишь std::size_t - это тот же size_t, только в пространстве имён std.
0
2393 / 1913 / 763
Регистрация: 27.07.2012
Сообщений: 5,557
31.01.2022, 20:45
Цитата Сообщение от GbaLog- Посмотреть сообщение
то бишь std::size_t - это тот же size_t, только в пространстве имён std.
Я не от том. Когда читаешь код и видишь std::, то за пояснениями идёшь в документацию. А когда видишь вроде бы то же, но без std::, существует ненулевая вероятность, что это просто такое же имя для чего-то другого. Ведь никто не вынуждает включать стандартные заголовки и никто не мешает определить под известным именем какой-то свой тип.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12919 / 6787 / 1817
Регистрация: 18.10.2014
Сообщений: 17,176
31.01.2022, 20:53
Цитата Сообщение от John Prick Посмотреть сообщение
Ведь никто не вынуждает включать стандартные заголовки и никто не мешает определить под известным именем какой-то свой тип.
Если в каком-то другом пространстве имен - то да.

В С++ имена типов из стандартной библиотеки являются зарезервированными независимо от того, включены ли соответствующие стандартные заголовки. Этим С++ отличается от С.

Также http://eel.is/c++draft/extern.types: "For each type T from the C standard library, the types​ ::​T and std​::​T are reserved to the implementation and, when defined,​::​T shall be identical to std​::​T."
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
01.02.2022, 00:46
Ajir, Люди хотят управлять. Вот и плодят сущности без счета...
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,265
01.02.2022, 09:24
Есть две концепции:
1. Сделать программирование как можно проще, что-бы любой новичок пришёл и разобрался.
2. Максимально всё запутать, что-бы не совались со "свиным рылом в калашный ряд".
0
фрилансер
 Аватар для Алексей1153
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,982
01.02.2022, 09:45
Цитата Сообщение от alexu_007 Посмотреть сообщение
Максимально всё запутать
такого нет нигде, кроме налоговой
1
 Аватар для zorggish
94 / 92 / 18
Регистрация: 10.03.2017
Сообщений: 306
01.02.2022, 15:15
Цитата Сообщение от alexu_007 Посмотреть сообщение
Максимально всё запутать
Это где например такое?
0
736 / 700 / 110
Регистрация: 29.05.2015
Сообщений: 4,265
01.02.2022, 21:39
Да тот же size_t - смысл один (целое число), а названий много для обозначения одного и того же.
Template мне встречалось - вызывается функция, а какая, из кода непонятно. Нужно трассировать программу, что-бы понять как и что работает. Ну и всё такое. Сделать сложно там, где можно сделать просто.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
01.02.2022, 21:59
Цитата Сообщение от alexu_007 Посмотреть сообщение
а названий много для обозначения одного и того же.
это, например, что?
Цитата Сообщение от alexu_007 Посмотреть сообщение
Сделать сложно там, где можно сделать просто.
а что вы предлагаете?
0
Заблокирован
02.02.2022, 02:58
Цитата Сообщение от GbaLog- Посмотреть сообщение
а что вы предлагаете?
считать на счетах

Добавлено через 3 минуты
Цитата Сообщение от alexu_007 Посмотреть сообщение
1. Сделать программирование как можно проще, что-бы любой новичок пришёл и разобрался.
2. Максимально всё запутать, что-бы не совались со "свиным рылом в калашный ряд".
Вот С#, говорят попроще ?
Недавно писал простенькую программу на С++\CLI, правила там те же что и в С#.
Так там банально нельзя сделать копию объекта.
Нужен целый вагон приблуд писать.

Если не знать возможностей и свободы С++, то может оно и ничего, хотя я сильно сомневаюсь.

Добавлено через 15 секунд
Цитата Сообщение от alexu_007 Посмотреть сообщение
1. Сделать программирование как можно проще, что-бы любой новичок пришёл и разобрался.
2. Максимально всё запутать, что-бы не совались со "свиным рылом в калашный ряд".
Вот С#, говорят попроще ?
Недавно писал простенькую программу на С++\CLI, правила там те же что и в С#.
Так там банально нельзя сделать копию объекта.
Нужен целый вагон приблуд писать.

Если не знать возможностей и свободы С++, то может оно и ничего, хотя я сильно сомневаюсь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2022, 02:58
Помогаю со студенческими работами здесь

size_t и int
Господа программисты, подскажите пожалуйста, в чем различие этих двух типов. Когда нужно использовать один и не использовать другой? Почему...

size_t в операторе for
Здравствуйте. Возникла проблема с типом size_t. Данный цикл почему то бесконечен for ( size_t j = 10; j &gt;= 0; j-- ) { ; } ...

uint32, size_t и подобные им
Собственно, в чем смысл данных типов, в отличие от обычных unsigned int, int и подобных им?

А где size_t декларирован?
А где size_t декларирован?

Что такое Size_t
size_t чет про него так мало инфы и так мутно написанно в инете я так попробывал даже создать переменную но не получилось... И еше мини...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru