程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++Annoatation 02: More extensions to C , Some features of C

C++Annoatation 02: More extensions to C , Some features of C

編輯:C++入門知識

More extensions to C , Some features of C++11

對於稍微有些C++的同學,大概都知道C++和C的一些主要區別,大的區別就是一個是面向對象,一個是面向過程,這就涉及到對象; 同時,還有命名空間的引入,防止變量名沖突; 還有struct支持成員函數等。 我就繼續注釋一些更需要注意的一些不同,一些是C++11中的東西。  
引用
可以通過引用修改它引的對象,但是不能改變它本身。這麼聽來,就像是常量指針, 另外,引用也讓代碼更加自然,不像c裡邊會出現一堆的&來表示傳址調用。 int a;
int ra;
int const rr a;  
使用引用時,有幾點需要記住:
函數中是否使用引用的場合
  是內建類型(int double char等),且我們實參值,直接 它,那就通過   類型是,結構體等,我們它的成員變量,采用 調用 等,需,采用調用    
右值引用 (對C++11不是很熟悉,會有一些理解上的錯誤,請指正)
int intVa()
{
return ;
}
int a intVal();
int const a intVal();
int a intVal();   void receive(int value){value; cout “Lvalue parameter\n”;} // 左值引用版本
void receive(int value){value; cout ;} // 右值引用版本
void receive(int const value) value; cout ;}   int main()
{
receive();
int v ;
int const cri v;
receive(cri);
receive(v);
receive(intVal());
}   ,在傳入時。   move semantics 和 完美轉發 perfect forwarding 的基礎。移動語義我暫時還不懂啥,以後再講述。
強類型-枚舉類
enum class CharEnum unsigned char
{
NOT_OK,
OK
};   enum Enum1; : no size available
enum Enum2 unsigned int;

enum class Enum3;
enum class Enum4 char;
初始化列表
c語言中,可以用大括號包含一個初始化列表來初始化數組、結構體。C++11把這個概念繼續擴展了,引入了 initializer_list<Type> 這個模本類,可以擴展初始化類,同時也能對初始化列表進行個性化操作。 使用前,要包含頭文件 <initializer_list> 。同時,可以將初始化列表當做函數形參傳入。 void values(initializer_listint iniValues)
{
cout iniValues.size() ;
for
(
initializer_listintconst_iterator begin iniValues.begin();
begin iniValues.end();
begin
)
cout begin ;
}  
auto 和 decltype 這個我覺得,最好了
    類型定義和 ‘using’ 聲明   比如 unsigned long int compute(double, double), 這個函數指針的聲明,使用typedef可以變成這樣: typedef unsigned long int(*pfun)(double, double); 但是,我們聲明時 pfun f; 時,掩蓋了Pfun實際上是一個指針的事實,必須看typedef定義才知道。關於這點,我很诟病,導致我函數指針一直沒學好。C++11中將這點進行了升華,采用using 關鍵字: using pfun unsigned long int(double, double);
或者和auto配合:
using pfun auto (double,double) unsigned long int;
for循環的范圍操作
傳統C/C++ 的for采用標准的 for(init;cong;next)語句,這對遍歷的使用,不那麼的便捷,很多語言都提供了范圍操作符,在STL的算法庫也包含了for_each方法,但是還是不夠便捷。C++11中引入了for的范圍操作版本: int array[100]; for (auto &element:array){...} 這裡,推薦使用auto,避免思想負擔在解析類型上。 同時,element是變量名,表示array中每次遍歷的元素。 引用操作符非常重要,若是要修改元素或array是類類型,則用引用; 若是類類型,但不改變,用const&; 普通的內建類型且不改變,可以不用&。 有了這個范圍操作,C++算是一大進步呀。
原始字符串
傳統C/C++使用""包含字符串,用\來做逃脫而字符。這樣,我們會在代碼中看到一堆的\\\\\\ 實在很影響閱讀。現在很多語言都支持正則表達式了,而正則中最多也正是\\這樣的符號,讓C++來使用,my god! 。我覺得C++可能借鑒了python的R字符串,和perl的定界符規則,引出自己的原始字符串,在原始字符串中,不存在逃脫語義。寫法如下: R"(string)" 寫法一 R"delimiter(string)delimiter" 寫法二 更細致的闡述,打算放在正則表達式時討論。  
新增類型說明符
0101: 表示二進制的5 F : 說明是一個浮點型常量 3F L : 前綴使用說明字符串中字符是wchar_t, 後綴使用說明是一個 long p :十六進制數*(2^p), 即左移p。  
增加對 Unicode 的支持
字符串:
char utf_8[] u8;
char16_t utf16[] u;
char32_t utf32[] U;   對unicode常量,使用\u逃脫,加上一個十六進制量
char utf_8[] u8;
char16_t utf16[] u;
char32_t utf32[] U; 同樣,表達式可以使用原始字符串
感慨:C++復雜太多了,多了太多東西了,每個知識點都是一大章的東西,看來,路漫漫呀!
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved