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++ Primer(7)】auto型別說明符C++型別
- 深入解析C++的auto自動型別推導C++型別
- 學懂現代C++——《Effective Modern C++》之型別推導和autoC++型別
- overflow:hidden,auto什麼區別
- 表型別對AUTO_INCREMENT的影響型別REM
- TS資料型別:型別別名/聯合型別/字面量型別/型別推論等綱要資料型別
- width:auto和width:100%區別
- 淺談程式語言型別的強型別,弱型別,動態型別,靜態型別型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- C#的型別——值型別與引用型別C#型別
- 值型別和引用型別型別
- JavaScript引用型別-Object型別JavaScript型別Object
- mysql BLOB型別 TEXT型別MySql型別
- 值型別與引用型別型別
- js基本型別和引用型別區別JS型別
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別
- JavaScript值型別和引用型別JavaScript型別
- c#:值型別&引用型別C#型別
- ECMAScript 原始型別與引用型別型別
- [譯] Scala 型別的型別(四)型別
- [譯] Scala 型別的型別(二)型別
- [譯] Scala 型別的型別(三)型別
- [譯] Scala 型別的型別(六)型別
- [譯] Scala 型別的型別(五)型別
- Date型別和Regex型別型別
- 匿名型別是不是強型別?型別
- Swift值型別和引用型別Swift型別
- 型別預設和any型別型別
- 資料型別,型別轉換資料型別
- Android Auto-Building Apps for Auto,Getting Started with AutoAndroidUIAPP
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- 型別 VS 泛型型別泛型
- TypeScript 泛型型別TypeScript泛型型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- Java的基本型別和引用型別Java型別
- 基本資料型別與字串型別資料型別字串