標準 c++ 的剖析器一律將 ">>" 視為右移運算子。 但在樣板定義式中,絕大多數的場合其實都代表兩個連續右角括號。 為了避免剖析器誤判,撰碼時不能把右角括號連著寫。
c++11 變更了剖析器的解讀規則;當遇到連續的右角括號時,優先解析右角括號為樣板引數的退出符號。 如果解讀過程中出現普通括號("(" 與 ")"),這條規則產生變化:
template<
bool btest> sometype;
std::
vector
1>
2>> x1;
// 解讀為 std::vector of "sometype2>",
// 非法的表示式, 整數 1 被轉換為 bool 型別 true
std::
vector
>2)
>> x1;
// 解讀為 std::vector of "sometype",
// 合法的 c++11 表示式, (1>2) 被轉換為 bool 型別 false
C 11 理解 二 之 範圍限定
boost c 定義了許多 範圍 range 的概念。範圍表現有如受控制的序列 list 持有容器中的兩點。有序容器是範圍概念的超集 superset 有序容器中的兩個迭代器 iterator 也能定義乙個範圍。這些概念以及操作的演算法,將被併入 c 11 標準程式庫。不過 c 11 將會以語言層次...
C 11特性 《深入理解C 11 讀書筆記
新增關鍵字 struct alignas 32 colorvector 沒有alignas關鍵字的話,對齊到8位,加上的話,對齊到32位,能提公升效率。對齊的資料在讀寫上會有效能上的優勢。比如頻繁使用的資料如果與處理器的快取記憶體器大小對齊,有可能提高快取的效能。而資料不對齊可能造成一些不良的後果,...
C 11 大括號和小括號的使用
c 11之前主要有以下幾種初始化方式 小括號初始化 string str hello 等號初始化 string str hello pod物件與pod陣列列表初始化 struct studnet studnet s 純資料 plain of data,pod 型別物件 studnet sarr po...