const和define的差別
阿新 • • 發佈:2018-06-20
問題 高程 編譯器 參數 fine 返回值 安全檢查 clu 類型安全
(2)有些集成化的調試工具可以對const常量進行調試,但是不能對宏常量進行調試。在C++程序中只使用const常量而不是用宏常量,即const常量完全取代宏常量。
1、const有什麽用途?
(1)可以定義const常量
(2)const可以修飾函數的參數和返回值,甚至函數的定義體。被const修飾的東西都受到強制保護,可以預防以外的變動,能提高程序的健壯性。
int main() { const int j=42; const int k;//錯誤,未初始化 extern const int j=100;//const對象被設定為僅在文件內有效,要在文件外使用,需要利用extern j+=1;//錯誤,j不能改變 int i=2; int &r1=i; const int &r2=i; r1=0; r2=1;//錯誤,r2是一個常量引用 cout<<i<<‘ ‘<<r1<<‘ ‘<<r2<<endl;//0 0 0,r1、r2綁定i,但是r2不能改變i的值。 return 0; }
2、const和define有什麽差別?
C++可以用const定義常量,也可以用#define定義常量,但前者比後者有更多的優點:
(1)const常量有數據類型,而宏常量沒有數據類型。編譯器可以對前者進行類型安全檢查,而對後者只進行字符替換,沒有類型安全檢查,並且在字符替換中可能會產生意料不到的錯誤(邊際效應)。
(2)有些集成化的調試工具可以對const常量進行調試,但是不能對宏常量進行調試。在C++程序中只使用const常量而不是用宏常量,即const常量完全取代宏常量。
宏定義:
#include <iostream> #include <cstdio> #define SQR_1(x) (x*x); #define SQR_2(x) ((x)*(x)) using namespace std; int main() { int a,b,c,d; b=d=3; a=SQR_1(b+2); cout<<a<<endl; c=SQR_2(d+2); cout<<c<<endl; return 0; }
宏定義展開時容易造成二義性問題。a=SQR_1(b+2)展開後為b+2*b+2=11,c=SQR(d+2)展開後為(d+2)*(d+2)=25
const和define的差別