/ / леене и цялостно объркване на конверсията - в

леене и цялостно объркване на конверсията - в

чувствам се като 6.3.1.3 от стандарта вече е включен в 6.3.1.8

но четене:

В противен случай новият тип е подписан и стойността не може да бъде представена в него; или резултатът е дефиниран от изпълнителя или а сигналът, определен от изпълнението, се повишава.

Този случай не се споменава там. Така че е 6.3.1.3 за целеви промоции само и когато е налице каква е реда на преобразуването. Дали е промоция и след това кастинг или леене след това промоции или само леене.

Отговори:

2 за отговор № 1

Съществуват редица обстоятелства, при които компилатор на C ще вмъкне код, за да преобразува един тип данни в друг. Те включват изрични реализации извършени от оператора на гласове и различни имплицитни преобразувания. И двата контекста на преобразуване са обхванати от §6.3.1:

  1. Няколко оператора преобразуват автоматично стойностите на операнда от един тип на друг. Този подклас определя резултата, който се изисква от такъв имплицитно преобразуване, както и тези, които са резултат от операция на гласове (а явно преобразуване).

§6.3.1.3 обяснява как се извършват преобразуванията, без да се уточнява кога реализациите се извършват. Същата процедура се използва както за изрично, така и за имплицитно преобразуване; за да извършите преобразуване, е необходимо само да знаете оригиналния тип и желания тип.

§6.3.1.8 обяснява как типът на местоназначението е избран в някои общи контексти, без да се посочва алгоритъмът за конверсията. Така че двете клаузи са напълно допълващи. Единият описва как се извършва преобразуването, а другият описва коя конверсия се извършва.

§6.3.1.8 се прилага за някои аритметични оператори, чиито операнди трябва да бъдат от същия тип. (Както бе отбелязано, тази клауза не се отнася до всичко аритметични оператори и трябва да прочететеописание на всеки отделен оператор, за да видите изключенията.) Трябва да се отбележи, че алгоритъмът за избор на целевите типове за двата операнда само води до "разширяване" на реализациите. Целевият тип винаги е широк или по-широк от този на оригинала. Възможно е подписаното цяло число да бъде преобразувано в неподписан цяло число със същата ширина, но тип без знак се преобразува само в подписан тип, когато подписаният тип е достатъчно широк, за да представлява всички стойности на неподписания тип.

Внедряването на подписано не подписаноконвертирането е дефинирано точно без дефинирано от приложението поведение в §6.3.1.3p2 ;. По този начин параграф 6.3.1.3p3 никога няма да се прилага за преобразуванията, изисквани от §6.3.1.8. Това важи и за целеви промоции определена в §6.3.1.1p2, която може да бъде задействана от алгоритъма, описан в §6.3.1.8.

В други контексти, в които се осъществява автоматично или изрично преобразуване, може да се изискват стесняващи се реализации; ако целта на стесненото преобразуване е подписана, може да се приложи §6.3.1.3p3.