Малоизвестные особенности С/С++

<< < (5/5)

Storm:
проверишь на 64 битной платформе - получишь 8 вместо 4 (на настоящей 64 бита типа UltraSparc). С преобразовал символ в число и в программме обработал целую переменную базового типа int. С++ обрабатывал как char - это скорее можно отнести к особенностям компиляторов, хотя стандарты на язык порыть не помешает, если это важно :)

tos:
по моему дело не в самой платформе а в разрядности компилятора, не так ли?
например в VS есть компилятор x86-64

Alder:
Storm, ну дык это и требовалось. Не особенности компилятора, а особенности самого языка получается. Т.е. для С++ мы получим 1, а для С не 1 :)

Sochin:
Смотрим на отличия языков ISO C и C++, описанные в самом Стандарте С++:
Цитировать

Change: Type of character literal is changed from int to char
Rationale: This is needed for improved overloaded function argument type matching. For example:
int function( int i );
int function( char c );
function( ’x’ );
It is preferable that this call match the second version of function rather than the first.
Effect on original feature: Change to semantics of well-defined feature. ISO C programs which depend on
sizeof(’x’) == sizeof(int)
will not work the same as C++ programs.
Difficulty of converting: Simple.
How widely used: Programs which depend upon sizeof(’x’) are probably rare.
Про оператор sizeof:
Цитировать

The sizeof operator yields the number of bytes in the object representation of its operand.
...
sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1.
Стандарт С++ обязывает рассматривать символьный литерал как объект типа char, размер которого вне зависимости от реализации обязан быть равен одному.

LazarusLong:
1. многие знакомы с тернарным оператором

x = (y < 0) ? 10 : 20;

но далеко не всем известно, что тернарный оператор может быть lvalue, т.е. находится слева от оператора присваивания:

(a == 0 ? a : b) = 1;

Что является сокращением для следующего кода:

if (a == 0)
    a = 1;
else
    b = 1;

2. в инициализационной части цикла for могут быть объявлены не только переменные но и классы, объекты, структуры, функции и т.д. Например

for(struct { int a; float b; } loop = { 1, 2 }; ...; ...) {
    ...
}

Навигация

[0] Главная страница сообщений

[*] Предыдущая страница