C++ за 21 день седьмое издание



Download 1,38 Mb.
bet40/437
Sana22.02.2022
Hajmi1,38 Mb.
#89455
TuriРеферат
1   ...   36   37   38   39   40   41   42   43   ...   437
Bog'liq
word1

2 :

  1. int main()




  1. {




  1. using namespace std;

6 : cout « "Computing the size of some C++ inbuilt variable types"



7:




«

endl;



















cout

«

"Size of bool:

" «

sizeof(bool)

«

endl;




8 :




9:

cout

«

"Size of char:

" «

sizeof(char)

«

endl;

short)

1 0 :

cout

«

"Size of unsigned short int: " «




sizeof(unsigned




cout

«

endl;







sizeof(short) « endl;




1 1 :

«

"Size of short int: " «

long)

1 2 :

cout

«

"Size of unsigned

long

int: " «

sizeof(unsigned

    1. endl;




  1. cout « "Size of long: " « sizeof(long) « endl;




  1. cout « "Size of int: " « sizeof(int) « endl;




  1. cout « "Size of unsigned long long: "




    1. sizeof(unsigned long long)« endl;

      16:

      cout

      «

      "Size of long long:

      " «

      sizeof(long

      long) « endl;

      17:

      cout

      «

      "Size of unsigned int: " « sizeof(unsigned

      int) « endl;

      18:

      cout

      «

      "Size of float:

      " «

      sizeof(float) «

      endl;




      19:

      cout

      «

      "Size of double:

      " «

      sizeof(double)

      « endl;

      2 0 :

      cout

      «

      "The output changes

      with

      compiler, hardware

      and OS"

      2 1 :

      2 2 :




      «

      endl;








































  1. return 0;




  1. }



Результат


Computing the size of some C++ inbuilt variable types


Size of bool: 1


Size of char: 1


Size of unsigned short int: 2


Size of short int: 2


Size of unsigned long int: 4


Size of long: 4


Size of int: 4


Size of unsigned long long: 8


Size of long long: 8


Size of unsigned int: 4


Size of float: 4


Size of double: 8

Конкретные значения вывода зависят от компилятора, аппаратных средств и операци­ онной системы.



Определение размера переменной с использованием оператора sizeof

59



Анализ


Вывод листинга 3.4 демонстрирует размеры различных типов в байтах и зависит от конкретной платформы: компилятора, операционной системы и аппаратных средств. Дан­ ный конкретный вывод — это результат выполнения программы в 32-битовом режиме (32-битовый компилятор) на 64-битовой операционной системе. Обратите внимание, что 64-битовый компилятор, вероятно, даст другие результаты, а 32-битовый компилятор автор выбрал потому, что должен был иметь возможность запускать приложение как на 32-бито­ вых, так и на 64-битовых системах. Вывод оператора s iz e o f свидетельствует о том, что размер переменной знакового и беззнакового типа одинаков; единственным различием у этих двух типов MSB является наличие информации о знаке.


ПРИМЕЧАНИЕ Все размеры в выводе приведены в байтах. Размер объекта - важный пара­ метр при резервировании памяти для нее, особенно когда резервирование осуществляется динамически.


С++11


Возможности компилятора по выведению типов и ключевое слово a u to



  1. некоторых случаях, когда тип переменной очевиден по присваиваемому при инициали­ зации значению, именно он и применяется. Например, если переменная инициализирует­ ся значением true, типом переменной может быть только bool. В языке С++11 есть воз­ можность определять тип неявно, с использованием вместо него ключевого слова auto:

auto Flag = true;

Здесь задача определения конкретного типа переменной Flag оставлена компилятору. Компилятор просто проверяет характер значения, которым инициализируется перемен­ ная, а затем выбирает тип, наилучшим образом подходящий для этой переменной. В дан­ ном случае для инициализирующего значения true лучше всего подходит тип bool. Таким образом, компилятор определяет тип bool как наилучший для переменной Flag и внутрен­ не рассматривает ее как имеющую тип bool, что демонстрирует листинг 3.5.




ЛИСТИНГ 3.5. Использование ключевого слова auto для выведения типов компилятором



  1. #include 2 : using namespace std;





  1. int main()




  1. {

  2. auto Flag = true;

  3. auto Number = 2500000000000;

8 :



  1. cout « "Flag = " « Flag;



1 0 : cout « " , sizeof(Flag) = " « sizeof(Flag) << endl;
1 1 : cout « "Number = " « Number;
1 2 : cout « " , sizeof(Number) =•" « sizeof(Number) « endl;


13:



  1. return 0;




  1. }

60 ЗАНЯТИЕ 3. Использование переменных, объявление констант


Результат


Flag = 1 , sizeof(Flag) = 1


Number = 2500000000000 , sizeof(Number) = 8


Анализ

Как можно заметить, вместо явного указания типа b o o l для переменной F la g и типа lo n g lo n g для переменной Number в строках 6 и 7, где они объявляются, было исполь­ зовано ключевое слово a u to . Это делегирует реш ение о типе переменных компилятору, который использует для этого инициализирующее значение. Чтобы проверить, создал ли компилятор фактически предполагаемые типы, используется оператор s iz e o f , позволяю ­ щий увидеть в выводе листинга 3.4, что это действительно так.




ПРИМЕЧАНИЕ Использование ключевого слова auto требует инициализации переменной,

поскольку компилятор нуждается в инициализирующем значении, чтобы при­


нять решение о наилучшем типе для переменной.


Если вы не инициализируете переменную, то применение ключевого слова auto приведет к ошибке при компиляции.


Хотя на первый взгляд ключевое слово a u to кажется не особенно полезным, оно суще­ ственно упрощает программирование в тех случаях, когда тип переменной сложен. Возь­ мем, например, случай, когда объявляется динамический массив целых чисел MyNumbers





  1. форме s t d : : v e c to r : std::vector MyNumbers;

Вы обращаетесь к элементам массива (или перебираете их) и отображаете полученные значения, используя следующий код:


for ( vector::const_iterator Iterator = MyNumbers.begin ();


Iterator < MyNumbers.end();


++Iterator )


cout « * Iterator << " ";

Ни тип s t d : .- v e c to r, ни оператор цикла f o r еще не были объяснены, поэтому не волнуйтесь, если код кажется непонятным. Он лишь перебирает все элементы вектора, начиная с начала до конца, и отображает их значения с помощью оператора c o u t. Посмо­ трите на сложность первой строки, где объявляется переменная I t e r a t o r и ей присваи­ вается исходное значение, возвращенное методом b e g in (). Переменная I t e r a t o r имеет тип v e c t o r < i n t > : : c o n s t _ i t e r a t o r , изучать и писать который программистам весьма сложно. Вместо того чтобы знать его наизусть, программист может положиться на тип возвращаемого значения метода b e g in () и упростить код цикла f o r до следующего:




for( auto Iterator = MyNumbers.begin();


Iterator < MyNumbers.end();


++Iterator )


cout « * Iterator « "

Обратите внимание, насколько короче стала первая строка. Компилятор проверяет инициализирую щ ее значение переменной I t e r a t o r , которым является возвращ аемое



Использование ключевого слова typedef для замены типа переменной

6 1

значение метода b e g in (), и назначает его как тип переменной. Это упрощ ает программи­ рование на языке C++, особенно когда вы используете шаблоны не очень часто.




Использование ключевого слова typedef для замены типа переменной

Язык C++ позволяет переименовывать типы переменных в нечто, что вы могли бы найти более удобным. Для этого используется ключевое слово ty p e d e f . Например, про­ граммист хочет назначить типу u n s ig n e d i n t более описательное имя STRICTLY_POSI-TIVE_INTEGER.





Download 1,38 Mb.

Do'stlaringiz bilan baham:
1   ...   36   37   38   39   40   41   42   43   ...   437




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish