| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > warning: conversion from 'size_t' to 'int' |
| Автор: Rutti 10.4.2007, 01:24 |
| Как избавится от подобных предупреждений: warning C4267: ...: conversion from 'size_t' to 'int', possible loss of data? Имеется ввиду conversion from 'size_t' to 'int'. |
| Автор: archimed7592 10.4.2007, 01:26 | ||||
использовать соответствующие типы для соответствующих ситуаций... по всей видимости тебе достаточно заменить
|
| Автор: Xenon 10.4.2007, 01:39 | ||
Радикально
|
| Автор: Rutti 10.4.2007, 01:48 | ||
| Xenon, ну да. Это по MSDN. Но берут сомнения в необходимости disable. archimed7592, у меня на этот коод ругается:
|
| Автор: Void 10.4.2007, 01:57 |
| В данном случае: забить. |
| Автор: Greeen 10.4.2007, 07:22 | ||
|
| Автор: Earnest 10.4.2007, 08:18 |
Нет, так можно не обратить внимание на что-то существенное. Варианта 2: как посоветовал archimed7592, по возможности использовать size_t для индексов, когда размер size_t и т.д. Если нельзя, ставить явное преобразование (ну не обязательно reinterpret_cast, a просто в стиле С). Отключать предупреждение нежелательно - иногда действительно возможна потеря данных. Лучше каждый раз подумать, и явно выразить свои намерения в коде. |
| Автор: _int64 10.4.2007, 11:16 |
| size_t - unsigned integer макс. значение size_t в 2 раза больше чем int |
| Автор: JAnty 10.4.2007, 11:45 |
| (int) i; |
| Автор: Void 10.4.2007, 16:20 | ||
Earnest, я же сказал: в данном случае. Что означало конкретную строчку кода:
и ничего больше. Не вижу смысла здесь городить приведения типов, чтобы избежать предупреждения — это только замаскирует потенциальную ошибку. |
| Автор: JackYF 10.4.2007, 17:49 |
| Void, в данном случае я соглашусь с Earnest, варнинги желательно убирать. Здесь (int) поставить не грех, имхо. |
| Автор: Void 10.4.2007, 18:12 |
| Как прикажете. Срез при unsigned -> signed или, того хуже, 64 -> 32 (сколько я помню, на x64 у VS sizeof(size_t) == 8) от этого никуда не денется. |
| Автор: Mayk 10.4.2007, 18:27 |
| В c99 можно сделать snprintf(buf,10,"%zu", expression_with_type_size_t ); и не будет никакой срезки. |
| Автор: JackYF 10.4.2007, 18:28 |
| Гм... ну эти срезы здесь маловероятны... вероятность того, что количество элементов в контейнере > 2 млрд? Весьма призрачная, как мне кажется. |