Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

Функция empty() !? - C++

03.02.2013, 03:27. Просмотров 2627. Ответов 4
Метки нет (Все метки)

Когда может применяться такая функция, в книге майерса по STL прочел заменяйте
C++
1
if (sizeof(Object) == 0)  // на if (empty(Object))
Но я никогда не видел объекта занимавшего 0.
C++
1
2
3
4
5
6
7
8
9
10
class Empty { };
void f()
    {
        Empty a, b;
        if (&a == &b) std::cout << "если данная строка выведена на экран, то есть ошибка в работе компилятора";
 
        Empty* p1 = new Empty;
        Empty* p2 = new Empty;
        if (p1 == p2) std::cout << "если данная строка выведена на экран, то есть ошибка в работе компилятора";
    }
Ошибок в работе компилятора не обнаружено.
Через гугл смог узнать что размер базового класса если его взвесить через производный класс будет равен нулю.
Есть ли этому какое-то более широкое применение?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 03:27     Функция empty() !?
Посмотрите здесь:

Deleted и empty в закрытом хэшировании - C++
Уважаемые участники форума, хотелось бы получить ответ на следующий вопрос. Реализую закрытое хэширование, завожу массив указателей на...

Добавить операцию empty() в стек - C++
Добавьте в программы реализацию операции empty(), а также реакцию на ситуации “overflow” и “underflow”. Учу С++,но до ООП еще не...

Error LNK2019 при компиляции empty project - C++
День добрый! Создаю новый пустой проект в VS 2010 со следующей структурой: Header Files: header.h #include &lt;windows.h&gt; #include...

Проверить _bstr_t строку на пустое значение или empty - C++
Здравствуйте уважаемые ГУРУ! Подскажите пожалуйста как можно проверить _bstr_t строку на пустое значение или empty Там есть какие-то...

[C++ Error] Unit1.cpp(9): E2129 Character constant too long (or empty) - C++
Ошибка : Unit1.cpp(9): E2129 Character constant too long (or empty) Указывает на cout&lt;&lt;x&lt;&lt;' '; Исходник : ...

Не могу исправить ошибку(error C2137: empty character constant) - C++
задание найти с помощью функции максимальный и минимальный элемент массива размерностью m*n и вывести на экран ошибка одна: error...

функция empty() - jQuery
Недавно появилась потребность в работе с функциями. Появился вопрос: можно ли, используя функцию empty(), сделать что-то вроде фильтра...

функция empty. не пойму где ошибка - PHP
$test = mysql_query(&quot;select id, name_s, address from `$category` where address='$d_site'&quot;,$db); if (empty($test)) { echo(&quot;2...

Как определить Empty или не Empty массив? - PHP
Добрый вечер! Встрял в ситуацию... Заполняю массив в цикле значениями из базы данных вот так while ($row =...

В чем разница между !empty и empty? - PHP
И парочку примеров для лучшего понимания, если не сложно

Empty и переменная - PHP
странное поведение заметил empty - определяет, установлена ли переменная. последнее время когда использую проверку есть ли...

empty() Неувязка - PHP
&lt;?php $array = file('C:\txt.txt'); // Если $array пустая, то выводим &quot;ОК&quot; if (empty($array)) { echo &quot;Ok!&quot;; } // Если...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
6971 / 4142 / 590
Регистрация: 29.11.2010
Сообщений: 10,993
03.02.2013, 03:46     Функция empty() !? #2
Цитата Сообщение от vbloodv Посмотреть сообщение
Но я никогда не видел объекта занимавшего 0.
По стандарту размер объекта класса имеет ненулевое значение.

Добавлено через 1 минуту
Если не верите наслово, могу ссыль дать
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
03.02.2013, 03:56  [ТС]     Функция empty() !? #3
Цитата Сообщение от MrGluck Посмотреть сообщение
По стандарту размер объекта класса имеет ненулевое значение.
Верю, вот и я сомневался в что у Маерса с головой порядок. Тоже самое нашел за это время...
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
03.02.2013, 04:27     Функция empty() !? #4
Цитата Сообщение от vbloodv Посмотреть сообщение
if (sizeof(Object) == 0) *// на if (empty(Object))
насколько я помню, там речь шла о
C++
1
(container.size() == 0)
vs
C++
1
container.empty()
Добавлено через 26 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
По стандарту размер объекта класса имеет ненулевое значение.
Добавлено через 1 минуту
Если не верите наслово, могу ссыль дать
почти

3 Complete objects and member subobjects of class type shall have nonzero size.
94)
[Note:class objects can
be assigned, passed as arguments to functions, and returned by functions (except objects of classes for
which copying has been restricted; see 12.8). Other plausible operators, such as equality comparison, can
be defined by the user; see 13.5. ]
94) Base class subobjects are not so constrained.ed.
то есть для базовых таки допускается
http://www.cantrip.org/emptyopt.html
How can you avoid this overhead? The Draft hints, in a footnote:

A base class subobject of an empty class type may have zero size.
In other words, if you declared Baz2 this way,


struct Baz2 : Bar {
int* p;
};

then a compiler is allowed to reserve zero bytes for the empty base class Bar; hence, sizeof(Baz2) can be just 4 on most architectures. (See Figure 1b.)
Compiler implementers are not _required_ to do this optimization, and many don't, yet. However, y
MrGluck
Модератор
Эксперт CЭксперт С++
6971 / 4142 / 590
Регистрация: 29.11.2010
Сообщений: 10,993
03.02.2013, 05:10     Функция empty() !? #5
Действительно
1.8 The C++ object model
5 Unless it is a bit-field (9.6), a most derived object shall have a non-zero size and shall occupy one or more
bytes of storage. Base class subobjects may have zero size. An object of trivially copyable or standard-layout
type (3.9) shall occupy contiguous bytes of storage.
6 Unless an object is a bit-field or a base class subobject of zero size, the address of that object is the address
of the first byte it occupies. Two distinct objects that are neither bit-fields nor base class subobjects of zero
size shall have distinct addresses.4
Добавлено через 2 минуты
я могу ошибаться, но у Мейерса в "Эффективное использование С++. 50 рекомендаций по улучшению..." не было об этом ни слова, говорилось всегда не равно 0.

Добавлено через 16 минут
Нашел цитату из книги (стр. 45, правило 8)
"все самостоятельные классыhttp://www.cyberforum.ru/cgi-bin/latex.cgi?{}^{1} имеют ненулевой размер"
и сноска мелким шрифтом внизу
"Имеются ввиду невложенные классы. - Прим. научного редактора."
Yandex
Объявления
03.02.2013, 05:10     Функция empty() !?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru