Что относится к агрегатам
Типы и классификация насосных агрегатов
Насосный агрегат – это устройство состоящее из насоса и двигателя объединённых вместе. Существует два типа таких установок: передвижная (оборудованная специальной тележкой для перемещения) и стационарная (устанавливается на фундаменте или скважине).
На базе насосных агрегатов, создаются насосные установки и станции. Определение этих терминов:
Насосная установка – это несколько устройств связанных между собой. К ним относятся насосный агрегат, трубопроводы (всасывающие и нагнетательные), измерительная аппаратура, большие емкости для жидкости.
Насосная станция – одно или несколько сооружений, в котором располагается различное оборудование. Здесь будут установлены насосные агрегаты (работающие и запасные), трубопроводы, дополнительные установки. Такие станции используются для обеспечения производственных зданий чистой водой (заводы и предприятия), откачки лишней воды с низменных участков. Более компактные модели, получили своё распространение в обеспечении жидкостью коттеджей и дачных участков.
Классификация насосных агрегатов
Насосы различаются между собой конструкцией, типом исполняемых работ, рабочим действием.
Центробежные насосы
Самые популярные. Это не герметичная конструкция. Чтобы добиться герметичности, необходимо поместить устройство в воду. Выделяются горизонтальные и вертикальные типы конструкции. Принцип действия:
Поршневые насосы
Их главное отличие от центробежных, это герметичность конструкции. Эта машина может работать как с жидкостями, так и с газами. Жидкость внутри этого насоса, перемещается за счёт процесса вытеснения. Рабочий процесс:
Вихревой насос
Он представляет собой двигатель и подключённое к нему центробежное колесо, в котором располагаются радиальные лопасти. В таких насосах, энергия передаётся от рабочих лопастей к потоку жидкости. Более подробный рабочий процесс:
В итоге образуется вихревой поток. Благодаря ему, напор становится гораздо мощнее, чем в центробежном насосе.
Винтовой насос
Конструкция этого аппарата внутренне напоминает строение мясорубки. Принцип работы основывается на поднятие воды с помощью вращающегося вала на заданную высоту. Он предназначен для поднимания воды с глубокозалегающих источников.
Виды агрегатов
Насосные агрегаты можно разделить на несколько основных видов, по внутреннему строению:
По принципу действия:
Эксплуатация
В инструкции по обслуживанию и правилам эксплуатации, должен быть расписан весь процесс запуска и остановки агрегата, способы настройки параметров, допустимые температуры и уровень масла в подшипниковой зоне.
Пуск и остановка
Перед запуском насоса, необходимо проверить:
Важно! Задвижка на всасывающей трубе, перед пуском должна быть закрыта.
Перед остановкой, необходимо предварительно перекрыть все задвижки.
Запрещается оставлять насос в работе, с закрытой напорной задвижкой. Это может нарушить целостность всей конструкции.
Область применения
Область применения насоса, будет зависеть от его конструкции.
Центробежный насос
Представители этой конструкции, выделяются небольшим размером, производительностью, равномерной подачей жидкости. Фундамент под такой насосный агрегат может быть лёгким и небольшим.
Их применяют в пожаротушение, отопление, нефтяной промышленности, строительных предприятиях, горнодобывающих и сельскохозяйственных отраслях.
Поршневой насос
Эти агрегаты могут выдерживать огромное давление при низкой скорости перемещения жидкости.
Их применяют в нефтегазовой и химической промышленности, перемещение взрывоопасных жидкостей.
Вихревой насос
Преимуществами таких агрегатов, являются простота конструкции, низкая стоимость, компактный размер с высокой производительностью (эти два параметра гораздо лучше, чем у центробежных).
Области применения: химическая промышленность (перемещение кислот и щелочей), сельское хозяйство (небольшие насосные станции, создание силового потока с большим давлением), как дополнительное оборудование в коммунальной сфере (водоснабжение), на кораблях (подача питьевой воды).
Винтовой насос
Эти агрегаты небольшого размера, очень производительные и бесшумные.
Области применения: строительство (доставка растворов на верхние этажи), пищевая, металлообрабатывающая и химическая промышленности.
Коэффициент полезного действия
Чтобы выбрать хороший и мощный насос, нужно знать, что называется коэффициентом полезного действия насосного агрегата каждого вида. Коэффициент полезного действия насосного агрегата, включает в себя учёт механических, гидравлических и объёмных потерь, которые возникают при наделении энергией используемой жидкости.
Примерные показатели КПД:
Это максимальные показатели КПД двигателя и насоса.
Паспорт насосного агрегата
В нем должны содержаться такие данные:
Устройство автомобиля
Основные узлы устройства автомобиля
Несмотря на огромное число моделей и брендов, при детальном рассмотрении оказывается, все легковые транспортные средства устроены одинаково.
Основные части любого автомобиля:
Все перечисленные элементы крепятся к несущей конструкции – кузову автомобиля. Последний состоит из днища, передних и задних лонжеронов (силовые детали каркаса, делающие его прочным и устойчивым), моторного отсека, крыши и навесных элементов (двери, капот, крышка багажника, бампер, крылья).
Данный перечень — лишь «верхушка айсберга», но ее вполне достаточно, чтобы начать понимать базовый принцип устройства автомобиля.
Если вы ищете учебник или пособие, в котором легко и доступно, «для чайников», расписано устройство автомобиля, рекомендуем обратить внимание на книгу Бескаравайного М.И. «Устройство автомобиля просто и понятно для всех». Пособие легко скачать в Интернете из любой онлайн-библиотеки.
Краткий обзор важных систем и агрегатов устройства авто
Итак, согласно схеме общего устройства машины, она работает следующим образом.
Благодаря кузову все узлы устройства собраны вместе. Системы работают синхронно и слаженно. За запуск двигателя отвечает аккумулятор. Последний выдает искру, из-за которой воспламеняется бензин в камере сгорания. Детонация запускает движение поршней в моторе. Двигатель, с помощью трансмиссии (если максимально просто, это сила, которая крутит колеса) передает энергию на колеса. За плавность и исправность хода отвечает ходовка. Машина едет или останавливается. Эти процессы контролируются педалями «газ» и «тормоз». В автомобилях с механической коробкой передач есть еще педаль «сцепление» (об этом чуть ниже). Чтобы работали все лампочки и датчики, а также исправно функционировал бортовой компьютер, генератор вырабатывает ток.
Водитель, сидя за рулем в комфортабельном салоне, не видит и не ощущает всю сложность технического устройства автомобиля. Он лишь поворачивает ключ в замке, переключает рычаг коробки, давит педали, крутит руль, да жмет кнопочки на панели. Ну, и контролирует уровень топлива в баке. Сказка, да и только!
Однако, все же, если он хочет понимать устройство автомобиля, хотя бы на уровне «для начинающих», должен разбираться еще в некоторых механизмах.
Что такое сцепление? Как работает данный элемент устройства? Вы когда-нибудь задумывались, почему, когда мы заводим тачку, она сразу не едет. Почему при заведенном двигателе она стоит на месте, пока мы не переключим скорость и не нажмем на педаль газа (тормоза и сцепления, потом газа при МКПП)? Сейчас попробуем объяснить:
Ну что же, мы разобрали базовые элементы конструкции и устройства современного автомобиля, постарались объяснить все максимально доступно и просто. Теперь вы понимаете, каким образом тачка едет, почему работает двигатель, за что отвечает тот или иной агрегат.
Мало кто поспорит, управлять современной машиной, да еще с АКПП – одно удовольствие. Но это – только если соблюдать рекомендации по уходу, относиться к авто бережно, вовремя проходить ТО и реагировать на малейшие неисправности.
Электрооборудование и системы помощи водителю
Многое в машине контролируется электрикой. Она довольно сложная, но значительно облегчает процесс вождения и делает пребывание в салоне максимально комфортным. Именно она запускает двигатель, поддерживая его в рабочем состоянии. Блок управления, аккумулятор, генератор, распределитель, искрообразующие свечи, — всё это отдельные части автомобиля, без которых невозможно представить его нормальное функционирование.
Второстепенными элементами автоэлектрики являются источники освещения: фонари, габаритные огни, поворотники, подсветка салона и т. д. Сюда же относится звуковой сигнал, всевозможные датчики и регуляторы.
К электрооборудованию можно причислять и системы, призванные улучшать курсовую устойчивость и управляемость автомобиля.
Тормозная система
Позволяет замедлять движение машины, вплоть до её полной остановки. Незаменима система во время экстренных ситуаций, а также когда автомобиль надо удерживать от самопроизвольного движения вниз. Автомобильные тормоза включают несколько подсистем: ручную, запасную, вспомогательную, антиблокировочную. Их совокупность называется тормозным управлением.
Задача основной тормозной системы — регулировать скорость движения машины, останавливать транспортное средство в случае необходимости. Состоит она из привода и исполнительных механизмов (барабан, диск). На современных легковых авто чаще используется гидропривод, реже — электрический, пневмо или комбинированный варианты. В некоторых случаях для повышения давления жидкости и эффективности торможения применяются вакуумный усилитель и регулятор.
При отказе или неисправности главного тормоза (разгерметизация одного из контуров и понижение уровня жидкости до критического) задействуется резервная тормозная система. Работает она как самостоятельный узел или вкупе с ручником.
Ручной или стояночный тормоз, оснащённый механическим приводом, предназначен для:
Коэффициенты эффективности замедления автомобиля, движущегося со скоростью 80 км/ч при усилии на педаль до 50 кг основной системы и подсистем:
Принцип функционирования тормозов прост. После нажатия на педаль тормозное усилие передаётся на колёсные механизмы. Последние прижимают к дискам колодки, тем самым останавливая вращение.
Устройство шасси автомобиля
Шасси автомобиля состоит из множества механизмов, передающих крутящийся момент от двигателя к колесам, передвигающих автомобиль и управляющих им: трансмиссии, механизма управления автомобилем и ходовой части.
Сцепление автомобиля
Сцепление служит для того, чтобы передавать крутящий момент двигателя к коробке передач и плавно соединять или разъединять двигатель с механизмами трансмиссии. От педали сцепления идет трос, приводящий в действие механизм сцепления. Сцепление служит для предохранения деталей двигателя и трансмиссии от перегрузки и повреждения при резком включении передачи или торможении.
Денежные агрегаты
Денежные агрегаты — это понятие, используемое в общей экономической науке. Означает различные разновидности денежной массы, которые находятся в обращении в виде банкнот (монет) и в электронной форме (безнал). Сумма всех категорий денежных агрегатов позволяют получить общую сумму денег, которая была эмитирована центральными финансовыми учреждениями страны. В это понятие не входит размер обязательств Центробанков перед своими кредиторами.
Денежные агрегаты, масса и база
Анализ этого показателя дает возможность определить общее состояние экономики в конкретной стране. Денежные агрегаты, масса и база участвуют в различных аспектах экономики государства, потому подлежат регулированию во избежание негативных экономических и политических последствий.
Общепринятая классификация денежных агрегатов
В мире существует общепринятая классификация. К денежным агрегатам относятся:
Денежный агрегат — это условная величина
Денежный агрегат следует расценивать как условную величину. Его рассчитывают для того, чтобы определить и проанализировать экономические тенденции и спрогнозировать тенденции экономики на ближайшее и длительное время.
Размер денежного агрегата позволяет определить, обеспечена ли национальная экономика достаточным количеством денежных средств. Высокие показатели говорят о возможном быстром росте экономики. Однако слишком большое количество денежной массы приводит к инфляции, что негативно отражается на экономике.
Необходимость дополнительной эмиссии
Нехватка денег влечет за собой необходимость дополнительной эмиссии. Причем в этом случае можно не бояться увеличения темпов инфляции, так как дополнительные средства обеспечиваются пропорциональным ростом экономики.
Распределение средств между М0, М1 и М2 показывает, насколько население использует для своих нужд банковскую систему. Большой показатель М0 по сравнению с М2 говорит о том, что население хранит деньги у себя дома, они не приносят доход.
Устройство, конструкция автомобиля
В фокусе внимания – конструкция автомобиля – системы и механизмы для работы транспорта, компоненты для размещения людей и грузов и устройство автомобиля (детали автомобиля). Остановимся на базовых терминах, основах автомобильных технологий.
Из наших статей вы получите информацию по следующим темам:
Материалы будут регулярно добавляться. Внимательно следите за нашим разделом «Статьи». Автомобильные технологии развиваются очень динамично. Если бы гению (первопроходцу серийных авто) в сфере автомобилестроения Генри Форду продемонстрировали современный транспорт, механизмы бы точно удивили его. Впрочем, не нужно даже быть Генри Фордом. Можно просто было родиться во второй половине прошлого века или в начале нынешнего, а теперь удивляться настоящим чудесам, которые –повсюду. Среди этих чудес:
Автомобильным инженерам, мехатроникам, механикам есть куда стремится при совершенствовании устройства автомобиля. Хорошо заработать в сфере транспортных технологий реально можно, но важно непрерывное желание для того, чтобы совершенствоваться (обучаться) и толковая начальная база. Да, любого мехатроника, электрика, механика оттачивает всегда практика, но формируют специалиста, прежде всего, именно уверенные знания автомобильных основ, конструкции, устройства автомобиля, его узлов и агрегатов.
Чтобы получить такие знания, главное иметь под рукой качественный источник для обучения. Представьте себе помещение в котором есть 4000 книг именно по транспортной тематике, при этом они обновляются почти каждый день и не надо рыскать в поисках нужного контента по просторам сети Интернет. И на практике такое «помещение» у вас легко может появится.
Это онлайн-платформа ELECTUDE. Причём это даже не просто комплексная база знаний по автомеханике, автоэлектрике, диагностике, но и площадка, с которой вы совершенно по-новому посмотрите на дистанционное обучение. Это не просто модный (а в этом году и вынужденный для многих) формат обучения. Это реальная возможность пошагово ликвидировать свои пробелы и отточить навыки посредством встроенного в систему виртуального тренажёра.
Конструкция автомобиля: от терминологии к отлаженной работе
Понятие «автомобиль» сочетает в себе два слова:
Сочетание, которое лучше всего отражает суть понятия. При этом «самостоятельность» и способность к «движению» требуют особенного контроля за безопасностью и надёжностью.
Для этого важно глубокое понимание всех взаимосвязей в работе автомобильных механизмов и систем. Задача производителей и специалистов в сфере ремонта – обеспечить узлам исправность, отлаженную работу. Это огромная ответственность, для которой нужны не только готовность к принятию решений, но и быстрое ориентирование в физических законах, особенностях техники.
Полезный совет
Нельзя выучиться автомобильной механике, электрике, мехатронике раз и навсегда. Учиться нужно каждый день. Единственное: у вас есть выбор – можно хаотично смотреть отдельные телевизионные программы, ролики в Интернете, читать новые учебники и публикации, а можно учиться пошагово (модульно), например, задействуя LMS ELECTUDE. Сначала вы, например, получаете максимальную «прокачку» по основам ДВС, затем «штудируете» бензиновые двигатели, потом проходите отдельные тренинги по оттачиванию конкретных навыков на встроенном тренажёре (он является важной составной частью платформы ELECTUDE).
Устройство автомобиля: агрегаты, узлы и детали
Любой автомеханик, электрик, мехатроник сталкивается с тремя понятиями «деталь», «узел» и «агрегат».
Системы автомобиля
Взаимодействие узлов, механизмов создают систему. Какие системы бывают и для чего они служат?
Специалистам СТО, напротив, часто приходится решать противоположную задачу: разбирать агрегат на узлы, узел на детали. Впрочем, обратная сборка деталей, узлов – это также типичная процедура технического обслуживания транспортного средства.
На рисунке ниже представлено устройство автомобиля:
Каждый будущий диагност должен уверенно знать названия и расположение узлов автомобиля. Более того, он должен соотносить их с основными «автономинаций»:
Что такое Агрегаты и POD и как/почему они являются особенными?
Этот FAQ относится к агрегатам и POD и охватывает следующий материал:
ОТВЕТЫ
Ответ 1
Как читать:
Эта статья довольно длинная. Если вы хотите узнать об агрегатах и POD (простые старые данные), найдите время и прочитайте его. Если вас интересуют только агрегаты, прочитайте только первую часть. Если вас интересуют только POD, вы должны сначала прочитать определения, последствия и примеры агрегатов, а затем перейти к POD, но я все равно рекомендую прочитать первую часть целиком. Понятие агрегатов необходимо для определения POD. Если вы обнаружите какие-либо ошибки (даже незначительные, включая грамматику, стилистику, форматирование, синтаксис и т.д.), Пожалуйста, оставьте комментарий, я буду редактировать.
Этот ответ относится к C++ 03. Для других стандартов C++ см.:
Что такое агрегаты и почему они особенные
Формальное определение из стандарта C++ (C++ 03 8.5.1 §1):
Итак, хорошо, давайте разберем это определение. Прежде всего, любой массив является агрегатом. Класс также может быть совокупным, если. подождите! ничего не сказано о структурах или союзах, разве они не могут быть совокупностями? Да, они могут. В C++ термин class относится ко всем классам, структурам и объединениям. Таким образом, класс (или структура, или объединение) является совокупностью тогда и только тогда, когда он удовлетворяет критериям из приведенных выше определений. Что подразумевают эти критерии?
Это не означает, что агрегатный класс не может иметь конструкторов, фактически он может иметь конструктор по умолчанию и/или конструктор копирования, если они неявно объявлены компилятором, а не явно пользователем.
Нет частных или защищенных нестатических членов данных. Вы можете иметь столько приватных и защищенных функций-членов (но не конструкторов), сколько столько приватных или защищенных статических членов-данных и функций-членов, сколько вам нравится, и не нарушать правила для агрегатных классов.
Агрегатный класс может иметь объявленный пользователем/определенный пользователем оператор копирования и/или деструктор
Массив является агрегатом, даже если это массив неагрегированного типа класса.
Теперь давайте посмотрим на некоторые примеры:
Примеры инициализации массива:
Теперь давайте посмотрим, как агрегатные классы могут быть инициализированы с помощью фигурных скобок. Примерно так же. Вместо элементов массива мы будем инициализировать нестатические элементы данных в порядке их появления в определении класса (все они по определению общедоступны). Если инициализаторов меньше, чем членов, остальные инициализируются значением. Если невозможно инициализировать значение одним из членов, которые не были явно инициализированы, мы получаем ошибку времени компиляции. Если инициализаторов больше, чем необходимо, мы также получаем ошибку во время компиляции.
Совокупные союзы отличаются тем, что вы можете инициализировать только их первого члена скобками. Я думаю, что если вы достаточно продвинуты в C++, чтобы даже рассмотреть возможность использования союзов (их использование может быть очень опасным и должно быть тщательно продумано), вы можете сами найти правила для союзов в стандарте :).
Теперь, когда мы знаем, что особенного в агрегатах, давайте попробуем понять ограничения на классы; вот почему они там. Мы должны понимать, что инициализация для членов с фигурными скобками подразумевает, что класс является не чем иным, как суммой его членов. Если присутствует определяемый пользователем конструктор, это означает, что пользователю необходимо проделать дополнительную работу для инициализации членов, поэтому инициализация фигурной скобки будет неправильной. Если виртуальные функции присутствуют, это означает, что объекты этого класса имеют (в большинстве реализаций) указатель на так называемую vtable класса, который устанавливается в конструкторе, поэтому инициализация скобок будет недостаточной. Вы можете выяснить остальные ограничения аналогично упражнению :).
Так что хватит о агрегатах. Теперь мы можем определить более строгий набор типов, то есть POD
Что такое POD и почему они особенные
Формальное определение из стандарта C++ (C++ 03 9 §4):
Вау, это сложнее разобрать, не так ли? 🙂 Давайте оставим союзы (на тех же основаниях, что и выше) и перефразируем немного яснее:
Агрегатный класс называется POD, если у него нет определяемого пользователем оператора и деструктора копирования, и ни один из его нестатических членов не является классом без POD, массивом без POD или ссылкой.
Что означает это определение? (Я упоминал, что POD обозначает Обычные Старые Данные?)
POD-классы, POD-объединения, скалярные типы и массивы таких типов вместе называются POD-типами.
POD являются особенными во многих отношениях. Я приведу только несколько примеров.
Время жизни объектов класса не POD начинается, когда конструктор завершается, и заканчивается, когда деструктор завершает работу. Для классов POD время жизни начинается, когда хранилище для объекта занято, и заканчивается, когда это хранилище освобождается или используется повторно.
Гарантируется, что в начале объекта POD не будет заполнения. Другими словами, если первый член POD-класса A имеет тип T, вы можете безопасно reinterpret_cast от A* до T* и получить указатель на первый член и наоборот.
У этого списка нет конца…
Заключение
Важно понимать, что такое POD, потому что многие языковые функции, как вы видите, ведут себя по-разному для них.
Ответ 2
Какие изменения для С++ 11?
Заполнители
Стандартное определение агрегата немного изменилось, но оно все же почти одинаково:
Хорошо, что изменилось?
Ранее агрегат не мог иметь никаких объявленных пользователем конструкторов, но теперь он не может иметь созданных пользователем конструкторов. Есть ли разница? Да, есть, потому что теперь вы можете объявить конструкторы и по умолчанию:
Это все еще агрегат, потому что конструктор (или любая специальная функция-член), который по умолчанию используется в первом объявлении, не предоставляется пользователям.
Теперь у агрегата не может быть каких-либо выравнивающих или равных инициализаторов для нестатических членов данных. Что это значит? Ну, это только потому, что с помощью этого нового стандарта мы можем инициализировать членов непосредственно в классе следующим образом:
Использование этой функции делает класс более не агрегированным, потому что он в основном эквивалентен предоставлению собственного конструктора по умолчанию.
Итак, что такое совокупность, совсем не изменилось. Это по-прежнему та же основная идея, адаптированная к новым функциям.
Как насчет POD?
POD прошли множество изменений. Многие новые правила о POD были ослаблены в этом новом стандарте, и способ определения в стандарте был радикально изменен.
Идея POD состоит в том, чтобы зафиксировать в основном два разных свойства:
Из-за этого определение было разделено на два разных понятия: тривиальные классы и классы стандартного макета, потому что они более полезны, чем POD. Стандарт теперь редко использует термин POD, предпочитая более конкретные тривиальные и стандартные макеты.
Перейдем к каждому из этих двух свойств отдельно.
Тривиальные классы
Стандарт определяет тривиальный класс следующим образом:
— нет нетривиальных конструкторов копирования (12.8),
— нет нетривиальных конструкторов перемещения (12.8),
— нет нетривиальных операторов присваивания копий (13.5.3, 12.8),
— нет нетривиальных операторов присваивания перемещения (13.5.3, 12.8) и
— имеет тривиальный деструктор (12.4).
[Примечание. В частности, тривиально-копируемый или тривиальный класс не имеет виртуальных функций или виртуальных базовых классов.-end note]
Итак, каковы все эти тривиальные и нетривиальные вещи?
Конструктор копирования/перемещения для класса X тривиален, если он не предоставляется пользователем и если
— класс X не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.1) и
— конструктор, выбранный для копирования/перемещения каждого подобъекта прямого базового класса, тривиален и
— для каждого нестатического элемента данных X, относящегося к типу класса (или его массиву), конструктор выбранный для копирования/перемещения этого элемента тривиально,
в противном случае конструктор copy/move не является тривиальным.
В основном это означает, что конструктор копирования или перемещения тривиален, если он не предоставляется пользователям, класс не имеет ничего виртуального в нем, и это свойство выполняется рекурсивно для всех членов класса и базового класса.
Определение тривиального оператора присваивания копирования/перемещения очень похоже, просто заменив слово «конструктор» на «оператор присваивания».
Тривиальный деструктор также имеет аналогичное определение с добавленным ограничением, что он не может быть виртуальным.
И еще одно подобное правило существует для тривиальных конструкторов по умолчанию, с добавлением, что конструктор по умолчанию не является тривиальным, если класс имеет нестатические элементы данных с элементами скрепления или равенства, которые мы видели выше.
Вот несколько примеров, чтобы очистить все:
Стандарт-макет
Это другое свойство, которое должно содержать рекурсивно для членов и всех базовых классов. И, как обычно, виртуальные функции или виртуальные базовые классы не допускаются. Это сделало бы макет несовместимым с C.
В этом случае расслабленное правило состоит в том, что классы стандартного макета должны иметь все нестатические элементы данных с одним и тем же контролем доступа. Раньше они должны были быть общедоступными, но теперь вы можете сделать их частными или защищенными, если они все закрыты или защищены.
При использовании наследования только один класс во всем дереве наследования может иметь нестатические элементы данных, а первый нестатический член данных не может быть типа базового класса (это может нарушить правила псевдонимов), в противном случае оно не будет класс стандартного макета.
Это определение содержится в стандартном тексте:
— не содержит нестатических элементов данных класса нестандартного макета (или массива таких типов) или ссылку,
— не имеет виртуальных функций (10.3) и виртуальных базовых классов (10.1),
— имеет тот же контроль доступа (раздел 11) для всех нестатических членов данных,
— не имеет базовых классов нестандартной компоновки,
— либо не имеет нестатических элементов данных в самом производном классе и не более одного базового класса с нестатические члены данных или не имеет базовых классов с нестатическими элементами данных и
— не имеет базовых классов того же типа, что и первый нестатический элемент данных.
[Примечание. Стандартные классы макета полезны для общения с кодом, написанным на других языках программирования. Их макет указан в примечании 9.2.-end]
И рассмотрим несколько примеров.
Заключение
С этими новыми правилами намного больше типов могут быть POD сейчас. И даже если тип не POD, мы можем использовать некоторые из свойств POD отдельно (если это только один из тривиальных или стандартных макетов).
Стандартная библиотека имеет свойства для проверки этих свойств в заголовке :
Ответ 3
Что изменилось для С++ 14
Мы можем обратиться к проекту стандарта С++ 14 для справки.
сводные показатели
Это описано в разделе 8.5.1 Агрегаты, который дает нам следующее определение:
не был агрегатом в С++ 11, но в С++ 14. Это изменение описано в N3605: Инициализаторы и агрегаты элементов, которые имеют следующее резюме:
Бьярн Страуструп и Ричард Смит подняли вопрос о том, что инициализация агрегатов и инициализаторы членов не работают вместе. В этой статье предлагается решить эту проблему, приняв предложенную Смитом формулировку, которая снимает ограничение, согласно которому агрегаты не могут иметь инициализаторы элементов.
POD остается прежним
Определение структуры POD (обычные старые данные) рассматривается в разделе 9 Классы, в котором говорится:
это та же формулировка, что и в С++ 11.
Изменения стандартного макета для С++ 14
Как отмечалось в комментариях, модуль опирается на определение стандартного макета, и это изменилось для С++ 14, но это было с помощью отчетов о дефектах, которые были применены к С++ 14 после факта.
Итак, стандартная раскладка пошла из этого Pre С++ 14:
Класс S является классом стандартной компоновки, если он:
Ответ 4
Вы можете продумать следующие правила:
a) классы стандартного макета должны иметь все нестатические элементы данных с одинаковым контролем доступа
Причиной для них является рассуждение о том, чтобы различать «стандартную компоновку» и «не стандартную компоновку» вообще. А именно, дать компилятору свободу выбора, как поместить вещи в память. Это не только ссылки на vtable.
Назад, когда они стандартизировали С++ в 98, они должны были в основном предсказать, как люди будут его реализовывать. Хотя у них было довольно много опыта внедрения с различными вкусами С++, они не были уверены в вещах. Поэтому они решили быть осторожными: дать компиляторам как можно больше свободы.
Вот почему определение POD на С++ 98 настолько строгое. Это дало компиляторам С++ большую широту в макете участника для большинства классов. В принципе, типы POD были предназначены для особых случаев, что вы специально писали по какой-то причине.
Когда С++ 11 работал, у них было много опыта работы с компиляторами. И они поняли, что. С++ компиляторы очень ленивы. У них была вся эта свобода, но они ничего не делали с ней.
Правила стандартного макета более или менее кодируют обычную практику: большинству компиляторов действительно не нужно сильно менять, если что-либо вообще реализовать их (за пределами, возможно, некоторых вещей для соответствующих типов типов).
Тогда возникает тот факт, что это не повредит пользователю. Если вы делаете инкапсулированный класс, вероятность того, что все ваши члены данных будут private в любом случае. Как правило, вы не публикуете публичные данные на полностью инкапсулированных типах. Таким образом, это будет проблемой только для тех немногих пользователей, которые хотят это сделать, кто хочет это разделение.
Так что это не большая потеря.
b) только один класс во всем дереве наследования может иметь нестатические члены данных,
Причина этого возвращается к тому, почему они снова стандартизировали стандартный макет: обычная практика.
Нет обычной практики, когда речь идет о наличии двух элементов дерева наследования, которые фактически хранят вещи. Некоторые кладут базовый класс перед производным, другие делают это по-другому. В каком порядке вы заказываете участников, если они происходят из двух базовых классов? И так далее. Компиляторы сильно расходятся по этим вопросам.
Кроме того, благодаря правилу zero/one/infinity, как только вы скажете, что у вас есть два класса с членами, вы можете сказать столько, сколько хотите. Это требует добавления большого количества правил компоновки для того, как справиться с этим. Вы должны сказать, как многократное наследование работает, какие классы помещают свои данные перед другими классами и т.д. Это много правил, при очень небольшом материальном выигрыше.
Вы не можете сделать все, что не имеет виртуальных функций, и стандартный макет конструктора по умолчанию.
и первый нестатический элемент данных не может быть типа базового класса (это может нарушить правила псевдонимов).
Я не могу разговаривать с этим. Я недостаточно образован в правилах псевдонимов С++, чтобы действительно понять это. Но это как-то связано с тем, что базовый член будет иметь тот же адрес, что и базовый класс. То есть:
И это, вероятно, против правил псевдонимов С++. В некотором роде.
Однако учтите это: насколько полезной могла быть способность делать это когда-либо на самом деле? Поскольку только один класс может иметь нестатические элементы данных, тогда Derived должен быть этим классом (поскольку он имеет Base как член). Поэтому Base должен быть пустым (данных). И если Base пуст, а также базовый класс. зачем вообще его член данных?
Так снова: никаких больших потерь.
Ответ 5
Изменения в C++ 17
Загрузите окончательный вариант C++ 17 Международного стандарта здесь.
сводные показатели
Тривиальные Классы
Определение тривиального класса было переработано в C++ 17 для устранения нескольких дефектов, которые не были рассмотрены в C++ 14. Изменения носили технический характер. Вот новое определение в 12.0.6 (внутренние ссылки исключены):
Стандартные классы
Определение стандартного макета также было переработано с учетом отчетов о дефектах. Опять же изменения носили технический характер. Вот текст из стандарта (12.0.7). Как и прежде, внутренние ссылки исключены:
— конец примера]
108) Это гарантирует, что два подобъекта, которые имеют один и тот же тип класса и принадлежат к одному и тому же самому производному объекту, не будут размещены по одному и тому же адресу.
Примечание. Комитет по стандартам C++ предполагал, что вышеуказанные изменения, основанные на отчетах о дефектах, будут применяться к C++ 14, хотя новый язык отсутствует в опубликованном стандарте C++ 14. Это в стандарте C++ 17.
Ответ 6
Что изменится для С++ 20
Это еще рано, поэтому некоторые ответы могут измениться в будущем. Следуя остальной ясной теме этого вопроса, значение и использование агрегатов продолжает меняться с каждым стандартом. На горизонте есть несколько ключевых изменений.
Типы с конструкторами, объявленными пользователем P1008
В С++ 17 этот тип все еще является агрегатом:
И, следовательно, X<> все еще компилируется, потому что это агрегатная инициализация, а не вызов конструктора. Смотрите также: Когда приватный конструктор не приватный конструктор?
В С++ 20 ограничение изменится с требования:
нет пользовательских, explicit или унаследованных конструкторов
нет пользовательских или унаследованных конструкторов
Это было принято в рабочий проект С++ 20. Ни X здесь, ни C в связанном вопросе не будут агрегатами в С++ 20.
Это также обеспечивает эффект йо-йо в следующем примере:
Инициализация агрегатов из заключенного в скобки списка значений P960
Удержание аргумента шаблона класса (CTAD) для агрегатов P1021
В С++ 17 это не компилируется:
Пользователи должны будут написать свое собственное руководство по выводу для всех совокупных шаблонов:
Но поскольку это в некотором смысле «очевидная вещь», и в основном это просто шаблон, язык сделает это за вас. Это изменение было одобрено Evolution в ноябре 2018 года, поэтому приведенный выше пример, скорее всего, скомпилируется в С++ 20 (без необходимости предоставления руководства по выводам, предоставленного пользователем).









