VS2013中的C++11新特性
阿新 • • 發佈:2018-12-05
轉自:http://www.admin10000.com/document/2504.html
Visual C++ 2013 Preview 在6月釋出了,C++開發者又找到一個編譯器可以更好的支援ISO C++ 11 的特性了。本文介紹了這些新的特性並附有程式碼例項。
你想動手嘗試編譯文中的這些程式碼話,需要去下載並安裝Visual Studio 2013 Preview (話說:付費嗎?),我尚未在其他編譯器上測試這些程式碼,所以我並不知道與Gcc 或Clang的相容性(可惡的C++)。
原始字串字面值
VC++ 2013現在支援原始字串字面值了。注意:它並不支援統一碼字串字面值。一個原始字串字面值允許你避免轉義那些在HTML,XML和正則表示式裡運用得得心應手的特殊字元。下面是一個示例用法:
1 |
auto s1 = R
"(This is a "
raw
" string)"
;
|
現在,s1是一個指向常量字串值為“This is a "raw" string”的指標。儘管不支援巢狀雙引號,這與C#支援的@string文字是類似的。那麼要在一個字串字面值中嵌入R"(...)"會怎樣。這種情況下,你可以使用以下語法:
1 |
auto s2 = R
"QQ(Example: R"
(This is my raw string)
")QQ"
;
|
現在,s2包含 Example: R"(This is my raw string)"。 在這個例子中,我把QQ作為界定符。這個界定符可以是任何長度不超過16的字串。原始字串字面值也可以包含換行:
1 2 3 |
auto s3 = R"(<tr>
<td>data</td>
</tr>)";
|
最後,不論他們什麼時候新增統一碼字串字面值的支援,你都可以將它們連線起來並構成原始統一碼字串字面值。
可變引數模板
可變引數模板是一個允許多個引數的模板。在我看來,這是個提供給庫作者而不是給庫使用者的特性,所以我也不是很確定它在C++程式設計師中會有多流行。以下我們用一個非常簡單的例子來展示如何在實際開發中使用可變引數模板。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// Variadic template declaration
template
<
typename
... Args>
class
Test;
// Specialization 1
template
<
typename
T>
class
Test<T>
{
public
:
|