| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Объясните про volatile |
| Автор: borisbn 9.10.2011, 15:03 | ||||
| Всем привет! На ИРКе задали такой вопрос: как заставить работать шаблонную версию
http://liveworkspace.org/code/c604f09278a1ec1c504bacd89ad94f5c Ответ меня несколько обескуражил:
http://liveworkspace.org/code/44b1abd0c7249218ec498ad7c8681910 Можете объяснить, каким образом volatile не даёт работать второй ф-ции, когда вызывается size("foo"); ? Спасибо. P.S. ИРКа англоязычная, и выяснять там сложнее, чем на великом и могучем P.P.S. Интересно услышать мнение тёзки сабжа |
| Автор: borisbn 9.10.2011, 15:54 | ||
то, что рейтинг функции с const char * стал меньше для выбора - я понял. Не понял как на это повлиял volatile
однозначно, решение какое-то ...мммм... странное. Я бы его не использовал. Просто стало интересно и захотелось разобраться почему так происходит |
| Автор: volatile 9.10.2011, 19:34 |
Все-же, формально, это не совсем массив символов. Потому-что если явно задать массив, то волатайл не нужен. http://liveworkspace.org/code/9ad72a5df592e48ade639ea8a02245ad Все эти приоритеты при неявном приведении, тёмная сторона С++. имхо, и еще раз имхо... |
| Автор: mes 9.10.2011, 22:32 |
формально говоря, это совсем не массив символов |
| Автор: borisbn 9.10.2011, 22:36 |
| и всё же... каким образом этот попадает в ф-цию, ожидающую массив символов, если к указателю добавить volatile? не понимаю |
| Автор: volatile 9.10.2011, 23:34 |
mes, а что это? borisbn, мой пример не совсем корректный. я там забыл const поставить. А если его поставить, то все меняется... http://liveworkspace.org/code/abfc4931bd805633c7ed845d79a235e1 |
| Автор: volatile 9.10.2011, 23:52 | ||||||
| Короче, открыл щаз студию. Код:
MS VC2008 выход:
gcc (liveworkspace.org) выход:
На лицо явно баг! Но чей?, кто из них врёт? Здесь явно не может быть "имплементейшн дефайнед" |
| Автор: volatile 10.10.2011, 00:17 | ||
| borisbn, Ваш код из первого поста http://liveworkspace.org/code/44b1abd0c7249218ec498ad7c8681910 На студии также ведет себя не так как gcc студия выход:
Добавлено через 4 минуты и 11 секунд Вообще, мое мнение такое (и пусть меня закидают помидорами). Шаблонная функция всегда, по правилам С++, имеет меньший приоритет перед явной. Посему - это всего лишь баг gcc, и волотайл, здесь не спасет... (могу ошибаться) |
| Автор: math64 10.10.2011, 08:20 | ||
Кроме того,
gcc: cpointer pointer cpointer Закомментарить void size(char* arr) cpointer rarray 4 cpointer В size(const char arr[N]) - никогда не попадаем |
| Автор: azesmcar 10.10.2011, 08:54 | ||||
квалификатор volatile как и const является частью сигнатуры функции и участвует в выборе перегрузки (или как там переводиться overload resolution?).
Добавлено через 1 минуту и 30 секунд cv- qualifiers - это const volatile квалификаторы (если что |