2014-10-14 2 views
0

Я пишу компилятор C++ для моего класса компилятора, и мне было интересно это. Арифметика между эквивалентными определениями типами Так, б/с определением типов имеют рыхлое имя эквивалентность:Arithemtic между эквивалентными typedefs

typedef int FOO; 
typedef int BAR; 

int test; 
FOO i; 
BAR j; 

i = 1; 
j = 2; 
test = i + j; // Code clarity 

является это должен работать? Действительно ли typedefs просто прославили базовые типы или они каскадируются в иерархию?

+1

Должен ли этот код работать, полностью зависит от семантики используемого вами языка, о котором вы не сказали нам в своем вопросе. –

+0

«Я пишу компилятор C++» ... действительно? Вау. –

ответ

2

Да, это будет работать нормально, но подумайте о случае, когда вы получите структуры.

+1

Я думал об этом случае. Работает одинаково. Какой момент вы хотели сделать? – MSalters

+2

@MSalters Structs использует строгое эквивалентное имя, которое будет вести себя иначе, чем другие. – KRUKUSA

1

В C и C++ декларация typedef определяет псевдоним для имени типа. Он не определяет новый тип. Компилятор должен разрешить каждый typedef (рекурсивный, если необходимо) дескриптор типа, который не содержит имен typedef. (Если это невозможно, программа не очень хорошо образован.)

Так не только FOO(1) + BAR(2) работы просто отлично, без неявных преобразований, переменная определяется как FOO будет соответствовать int в специализации шаблона.