Заблокирован
|
|
1 | |
Поведение оператора new платфоромозависимое?19.09.2014, 11:04. Показов 2982. Ответов 59
Метки нет Все метки)
(
В случае неудачи оператора new, допустим out of memory, он может кинуть исключение или вернуть ноль:
MSDN:
0
|
19.09.2014, 11:04 | |
19.09.2014, 11:04 | |
Ответы с готовыми решениями:
59
Не понятное поведение тернарного оператора Неправильное поведение программы с использованием логического оператора или
|
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
|
||||||
19.09.2014, 11:36 | 2 | |||||
![]() Решение
По стандарту по-умолчанию обязан кидать исключение. Если нужно это поведенеи поменять, то нужно использовать nothrow версию:
3
|
Заблокирован
|
|
19.09.2014, 11:46 [ТС] | 3 |
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
19.09.2014, 11:47 | 4 |
Да, вернет. Только не ноль, а NULL.
1
|
Заблокирован
|
|
19.09.2014, 11:48 [ТС] | 5 |
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
19.09.2014, 11:56 | 6 |
Хе-хе. Мы ж находимся в контексте форума по C++, не так ли? Каким боком тут WinAPI ?
Открой для себя мир архитектур, отличных от x86, и мир операционных систем, отличных от Windows. Да, они существуют! И пишут для них - да, все на тех же самых языках C и C++.... Строго говоря, по Стандарту языка битовое представление NULL не обязано быть 0x0000... То, что в некоторой архитектуре или операционной системе это так - всего лишь деталь реализации.
3
|
Заблокирован
|
|
19.09.2014, 12:07 [ТС] | 7 |
Да я ща пишу софт на Qt на Windows под пингвинов и Mac (ну под Windows само собой), я знаю, что такое другие ОС
![]() А вот на счёт NULL, честно говоря думал что это чисто дефайн из какого - то файла WINAPI, попробовал в QtCreator -е его вбить, не ругается ))) Так что, для указателей корректно использовать nullptr, а для нулей NULL что ли ?
0
|
![]() ![]() ![]() |
|
19.09.2014, 12:12 | 8 |
И не будет. Это макрос из cstddef.
До появления стандарта С++11 NULL был указателем замаскированным целым типом. В новом стандарте для этого предусмотрен новый тип nullptr_t.
2
|
Заблокирован
|
|
19.09.2014, 12:17 [ТС] | 9 |
Что - то не очень понял, для нулевого указателя в C++11 я использую nullptr, а nullptr_t это как бы для нулевых переменных что ли или для чего, что - то по докам понять не могу...
0
|
![]() 2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
19.09.2014, 12:18 | 10 | |||||
Да, NULL - это чистый define компилятора, для x86 и сходных архитектур он часто определен как
В то же время, преобразование (void*)NULL -> (int)0 не существует. Для компиляторов, поддерживающих Стандарт C++11, более правильным решением будет использовать именно nullptr.
3
|
Заблокирован
|
|
19.09.2014, 12:28 [ТС] | 13 |
то есть возвращаясь с сабжу, при вызове new так
правильней сказать, что оператор вернёт не NULL, а nullptr_t что ли в С++ 11?
то есть грубо говоря nulltptr_r это 0, а nullptr это 0* ? ![]()
0
|
![]() 1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
19.09.2014, 12:48 | 14 |
Скорее как NULL 0, так как NULL ( void * )0 может привести к ошибкам на C++.
Добавлено через 4 минуты nullptr это непосредственно объект. nullptr_t это тип этого объекта.
1
|
Заблокирован
|
||||||
19.09.2014, 12:59 [ТС] | 15 | |||||
тогда получается nullptr_t вообще не нужен, ну зачем может понадобиться проверка типа того, что возвращает какая - то функция, если речь идёт о нуле или не нуле?
0
|
Неэпический
![]() |
||||||
19.09.2014, 12:59 | 16 | |||||
Может с цитатами понятнее будет:
1
|
Заблокирован
|
|
19.09.2014, 13:12 [ТС] | 17 |
Не по теме: почему все в тестовых целях называют функции "ФУУ", воняет что ли где то ? :rofl: Нет, что бы Function, или Func или Test ... ничего не понял Ну где NULL, вызовется foo(int), а для (nullptr) вызовется (int*), а при чём тут nullptr_t (который заремарен), не могу понять ... Объясните вы на пальцах неучу :black_eye.: ![]()
0
|
Неэпический
![]() |
|
19.09.2014, 13:16 | 18 |
2
|
Заблокирован
|
|
19.09.2014, 13:20 [ТС] | 19 |
0
|
![]() 1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
19.09.2014, 13:21 | 20 |
Неверно. Компилятор выдаст ошибку о неоднозначном разрешении перегрузки. NULL может быть как и int, так и int* в равной степени. В случае же с nullptr, вызвана будет foo( int * ). А если раскомментировать foo( nullptr ), то предпочтение будет отдано ей.
1
|
19.09.2014, 13:21 | |
19.09.2014, 13:21 | |
Помогаю со студенческими работами здесь
20
Необычное поведение оператора инкремента Странное поведение оператора сравнения Поведение оператора echo при вызове функций Непонятное поведение поведение TIM6 на STM32f4discovery Избыточное копирование объекта при реализации оператора умножения и оператора присваивания Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Отключение отслеживания файла, занесенного в .gitignore в Git
hw_wired 10.02.2025
Git помогает следить за изменениями в проекте, но иногда требуется исключить определенные файлы из системы контроля версий. Это могут быть конфигурационные файлы с локальными настройками, временные. . .
|
Что такое use strict в JavaScript
hw_wired 10.02.2025
Директива use strict - способ перевода JavaScript-кода в строгий режим работы, который делает язык более безопасным и предсказуемым. Она появилась в ECMAScript 5 как ответ на многочисленные проблемы,. . .
|
Как в jQuery проверить, что элемент скрыт
hw_wired 10.02.2025
jQuery предоставляет несколько эффективных способов определить, скрыт элемент или отображается на странице. Самый простой метод использует специальные селекторы :hidden и :visible. Селектор :hidden. . .
|
Как проверить (check out) ветку Git в удаленном репозитории
hw_wired 10.02.2025
Проверка удаленной ветки в Git требует понимания нескольких базовых концепций и точного выполнения определенной последовательности действий. Для начала необходимо получить актуальную информацию о. . .
|
chucknorris в HTML и другие обозначения цветов
hw_wired 10.02.2025
HTML, как основной язык разметки веб-страниц, прошел длинный путь развития в плане работы с цветами. На заре развития веб-технологий разработчики могли использовать только базовый набор из 16. . .
|
Стек и куча: отличия и назначение
hw_wired 10.02.2025
Управление памятью - ключевой элемент работы любой программы. В современных языках программирования память делится на две основные области: стек и кучу. Каждая из них обладает уникальными. . .
|
Комментарии в JSON
hw_wired 10.02.2025
JSON - текстовый формат обмена данными, построенный на основе синтаксиса JavaScript. Этот формат отличается простотой, читаемостью и широкой поддержкой во всех современных языках программирования. . . .
|
Перезаписываем локальные файлы с помощью git pull
hw_wired 10.02.2025
Git pull - незаменимая команда для синхронизации локального репозитория с удаленным. При работе над проектом в команде разработчиков часто возникает необходимость получить актуальные изменения,. . .
|
Оператор --> в C++
hw_wired 10.02.2025
Оператор --> (называемый "spaceship operator" или оператор космического корабля) - важное нововведение в стандарте C++20, упрощающее реализацию операций сравнения в пользовательских типах данных. . . .
|
Отмена git add до коммита
hw_wired 10.02.2025
Git предлагает несколько методов для отмены индексации файлов перед созданием коммита. Разработчики часто сталкиваются с ситуацией, когда нужно убрать файлы из индекса, не теряя внесенные изменения в. . .
|