自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++ sizeof概念及應(yīng)用方式探討

開發(fā) 后端
C++ sizeof到底是什么?它對(duì)于我們的編程開發(fā)起了什么作用?它的具體應(yīng)用方法又是怎樣的呢?在這里將會(huì)一一做一個(gè)介紹。

C++編程語言支持各種程序設(shè)計(jì)風(fēng)格,而且對(duì)C語言中的各種功能都提供支持。對(duì)于這樣一款功能強(qiáng)大的編程語言我們應(yīng)該如何正確的運(yùn)用于程序開發(fā)中呢?首先先讓我們從一些基本知識(shí)開始入手,比如今天為大家介紹的C++ sizeof的一些概念。#t#

1、什么是sizeof

首先看一下sizeof在msdn上的定義:

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a value of type size_t.

看到return這個(gè)字眼,是不是想到了函數(shù)?錯(cuò)了,sizeof不是一個(gè)函數(shù),你見過給一個(gè)函數(shù)傳參數(shù),而不加括號(hào)的嗎?sizeof可以,所以sizeof不是函數(shù)。網(wǎng)上有人說sizeof是一元操作符,但是我并不這么認(rèn)為,因?yàn)镃++ sizeof更像一個(gè)特殊的宏,它是在編譯階段求值的。舉個(gè)例子:

 

  1. cout<<sizeof(int)<<endl; // 32位機(jī)上int長度為4  
  2. cout<<sizeof(1==2)<<endl
    // == 操作符返回bool類型,相當(dāng)于 cout
    <<sizeof(bool)<<endl

 

在編譯階段已經(jīng)被翻譯為:

 

  1. cout<<4<<endl;  
  2. cout<<1<<endl

 

這里有個(gè)陷阱,看下面的程序:

 

  1. int a = 0;  
  2. cout<<sizeof(a=3)<<endl;  
  3. cout<<a<<endl

 

輸出為什么是4,0而不是期望中的4,3???就在于C++ sizeof在編譯階段處理的特性。由于sizeof不能被編譯成機(jī)器碼,所以sizeof作用范圍內(nèi),也就是()里面的內(nèi)容也不能被編譯,而是被替換成類型。=操作符返回左操作數(shù)的類型,所以a=3相當(dāng)于int,而代碼也被替換為:

 

  1. int a = 0;  
  2. cout<<4<<endl;  
  3. cout<<a<<endl

 

所以,sizeof是不可能支持鏈?zhǔn)奖磉_(dá)式的,這也是和一元操作符不一樣的地方。

結(jié)論:不要把sizeof當(dāng)成函數(shù),也不要看作一元操作符,把他當(dāng)成一個(gè)特殊的編譯預(yù)處理。

2、sizeof的用法

C++ sizeof有兩種用法:

(1)sizeof(object)

也就是對(duì)對(duì)象使用sizeof,也可以寫成sizeof object 的形式。例如:

(2)sizeof(typename)

也就是對(duì)類型使用sizeof,注意這種情況下寫成sizeof typename是非法的。下面舉幾個(gè)例子說明一下:

  1. int i = 2;  
  2. cout<<sizeof(i)<<endl; // sizeof(object)的用法,合理  
  3. cout<<sizeof i<<endl; // sizeof object的用法,合理  
  4. cout<<sizeof 2<<endl; // 2被解析成int類型的object, sizeof object的用法,合理  
  5. cout<<sizeof(2)<<endl; // 2被解析成int類型的object, sizeof(object)的用法,合理  
  6. cout<<sizeof(int)<<endl;// sizeof(typename)的用法,合理  
  7. cout<<sizeof int<<endl; // 錯(cuò)誤!對(duì)于操作符,一定要加() 

 

可以看出,加()是永遠(yuǎn)正確的選擇。

結(jié)論:不論C++ sizeof要對(duì)誰取值,***都加上()。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-03 10:11:17

C++動(dòng)態(tài)數(shù)組

2010-02-04 13:39:44

C++數(shù)組參數(shù)

2010-02-04 11:15:28

C++模板限制

2009-08-18 09:51:18

C#枚舉類型

2009-08-20 18:47:19

C#異步通信

2009-08-24 17:39:21

C# 泛型集合

2010-02-06 17:09:29

C++文件拷貝

2020-07-30 12:40:35

CC++編程語言

2009-08-12 10:37:13

C#運(yùn)算符重載

2009-08-28 16:48:50

C#多態(tài)性

2009-09-09 16:46:59

C# XmlSeria

2010-02-06 17:39:52

C++ strtok

2010-02-05 16:46:58

C++ TinyXml

2014-09-18 16:46:51

大數(shù)據(jù)應(yīng)用

2009-08-27 10:20:03

C# foreach語

2009-09-04 16:37:37

C# DES算法

2010-02-06 16:21:35

C++常規(guī)DLL

2010-02-04 14:29:45

C++ typenam

2010-02-03 15:27:26

C++ static

2010-02-06 16:39:45

C++ assert(
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)