Ето и поправките и подобренията в C++ 17
Какво представлява фиксирането на езиков стандарт? Отговорът на въпроса е много прост. Липсващо нещо в предишните версии е включено в текущата версия е поправка.
Автоматични правила за инициализиране на директния списък
Вече можете да декларирате параметър на шаблон без тип с контейнер на типа auto. В C ++ 11 се сблъскваме със странен въпрос, където:
auto x {1};
се извежда като initializer_list. Този проблем е разрешен в новия стандарт, така че ще го изведе като int.
Преди да осъществите това, трябва да разберете двата начина на инициализация, като копиране и директно.
За директна инициализация C ++ 17 въвежда някои нови правила:
За "подреден списък с първоначални настройки" само с един елемент автоматично отклонение ще се направи от този запис;
За "архивиран списък с множество елементи", автоматичното приспадане ще бъде неправилно формирано.
Static_assert без съобщение
Тази актуализирана функция позволява да имате условие, без да предавате съобщението, и може да се каже, че вече static_assert декларацията не изисква втори аргумент. Версията със съобщение също е налице. Но той е съвместим с други твърдения като BOOST_STATIC_ASSERT.
Разнообразни типове за начало и край за диапазона на базата на цикли
В C ++ 11, базирани на "линия" се определят вътрешно.
Изясняване на езика
По-строга заповед за оценка на изразяването
Нямаше ред на оценяване, който да е бил посочен в историята на C ++ преди. Компилаторът оцени операндите в произволен ред и може да избере всеки друг ред, докато оценява същия израз друг път.
Обмислете следния ред на оценяване.
В f (x, y, z) редът на оценка a, b, c все още не е специфициран. Но е сигурно, че един параметър се оценява напълно преди да започне оценяването на следващия параметър.
Динамично разпределение на паметта
По време на SIMD (Single instruction, multiple data) или други изисквания за оформление на паметта, може да се наложи да подредите обектите конкретно. Тъй като в SSE се изисква подравняване на 16 байта, а за AVX 256 се изисква подравняване на 32 байта. дефинирайте вектор-4, както следва:
class align(16) vec4
{
float a, b, c, x;
};
auto pVector = new vec4 [1000];
В C ++ 11 и C ++ 14 нямате гаранция за подмяна на паметта. Така че трябва да използвате някои специални процедури като _aligned_malloc / _aligned_free, за да сте сигурни, че подравняването е запазено. Това не е добър вариант, тъй като не работи със C ++ smart указателите. Освен това, в кода се виждат и разпределения или изтривания на паметта.
Международна компютърна академия IT STEP може да ви преквалифицира в завършен и високоплатен програмист. Благодарение на нашето обучение, покриващо всички стандарти на международни изисквания, вие можете да сбъднете своите мечти. Научете повече, като се запишете на безплатна консултация.