auto型別
auto的限制
auto不能用於函式引數;不支援auto型別非靜態成員初始化;auto無法定義陣列;auto無法推匯出模板型別。
void func(auto k = 1); //auto不能用於函式引數
struct Foo
{
auto var1_ = 0; //auto不能用於非靜態成員
static const auto var2_ = 0;
};
template<typename T>
struct Bar{};
int main()
{
int x = 5;
auto y = x; //auto->int,y->int
auto *a = &x; //auto->int, a->int*
auto b = &x; //auto->int *, b->int*
auto &c = x; //auto->int; c->int&
auto d = &c; //auto->int*; d->int *
const auto& g = x; //auto->int&; g->const int&
auto h = g; //auto->const int&; h->const int&
//當申明指標或者引用時,auto的推導結果將保持初始化表示式的cv屬性
int arr[10] = { 0 };
auto cpArr = arr; //auto->int *;cpArr->int *
auto nextArr[10]; //auto無法定義陣列
Bar<int> bar;
Bar<auto> bb = bar; //auto無法推匯出模板型別
return 0;
}
auto的應用
1.無法知道變數應該被定義成什麼 型別。
class Foo
{
public:
static int get()
{
return 0;
}
};
class Bar
{
public:
static const char* get()
{
return "0";
}
};
template<typename T>
func<T>()
{
auto val = T::get();
}
int main()
{
func<Foo>();
func<Bar>();
return 0;
}
2.簡化變數宣告型別
int main()
{
std::map<double, double> resultmap;
std::map<double, double>::iterator it = resultmap.begin();
for (; it != resultmap.end(); it++)
{
//do something
}
return 0;
}
上述程式碼中it的型別其實通過resultmap.begin()即可知道,因此宣告可以簡化如下
int main()
{
std::map<double, double> resultmap;
/*std::map<double, double>::iterator it = resultmap.begin();*/
for (auto it = resultmap.begin() ;it != resultmap.end(); it++)
{
//do something
}
return 0;
}
相關文章
- C++ auto 型別推斷注意的地方C++型別
- 深入解析C++的auto自動型別推導C++型別
- overflow:hidden,auto什麼區別
- 學懂現代C++——《Effective Modern C++》之型別推導和autoC++型別
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- Auto CAD
- 值型別和引用型別型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 值型別與引用型別的區別型別
- js基本型別和引用型別區別JS型別
- typeScript 型別斷言、聯合型別和交叉型別(七)TypeScript型別
- 型別預設和any型別型別
- 資料型別,型別轉換資料型別
- c#:值型別&引用型別C#型別
- JavaScript值型別和引用型別JavaScript型別
- ECMAScript 原始型別與引用型別型別
- Auto CAD:圖紙常用線寬、線型表之詳細攻略
- 說說 auto
- 型別 VS 泛型型別泛型
- TypeScript 泛型型別TypeScript泛型型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- 基本資料型別與字串型別資料型別字串
- BigDecimal轉為String型別、int型別Decimal型別
- Java的基本型別和引用型別Java型別
- js基本語法之 值型別(資料型別)(變數型別)JS資料型別變數
- c#中值型別和引用型別的區別C#型別
- postgresql關於postgresql.auto.conf和postgresql.conf的區別SQL
- 來學習typescript 吧! --6 聯合型別 | 交叉型別 |型別斷言TypeScript型別
- java- 型別-轉換:基本型別以及包裝型別的轉換Java型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- service型別及功能簡介+pod型別型別
- Mysql 資料型別之整數型別MySQL 資料型別
- 資料型別: 資料型別有哪些?資料型別
- TypeScript型別系統和基礎型別TypeScript型別
- Java資料型別及型別轉換Java資料型別
- JS篇-基本型別和引用型別、typeofJS型別
- Oracle資料型別對應Java型別Oracle資料型別Java