update: 2012/07/03
reference:
1. Arne's Blog: What about C++11 in Xcode?
2. Sams Teach Yourself C++ in One Hour a Day, 7/e
A. 新增專案:
Xcode > File > New > Project... > Mac OS X > Application >
Command Line Tool > Next
Product Name: HelloC++11
Type: C++
Use Automatic Reference Counting: unchecked
> Next > Create
B. 使用 C++11 的 auto 關鍵字: (利用編譯器的型別推斷能力)
1. 說明:
a. 在 C++11 中, 你可以選擇不需要明確地指定變數的型別, 而是使用
auto 關鍵字來替代. 使用 auto 關鍵字, 變數的型別將藉由給予變數的
初始值來決定.
b. 承上, 為變數定義正確型別的任務將由編譯器來處理. 編譯器所作的事,
是去檢查變數初始化的值, 然後決定符合此變數的最佳可能型別.
c. 使用 auto 關鍵字時, 需要給予變數初始值, 好讓編譯器能決定其型別,
不然的話, 會得到編譯錯誤的訊息.
************************************************
2. 開啟 main.cpp 檔案, 修改如下:
#include <iostream>
//@add
using namespace std;
int main(int argc, const char * argv[])
{
// insert code here...
//std::cout << "Hello, World!\n";
//@use auto
auto Flag = true;
cout << "Flag = " << Flag;
cout << " , sizeof(Flag) = " << sizeof(Flag) << endl;
return 0;
}
說明: 在使用 auto 的地方, 會出現警告訊息:
3. 修改編譯器設定:
預設的設定:
************************************************
4. 編譯並執行:
Flag = 1 , sizeof(Flag) = 1
--------------------------------------------------------------------------------
1. 開啟 main.cpp 檔案, 修改如下:
#include <iostream>
//@add
#include <vector>
//@add
using namespace std;
int main(int argc, const char * argv[])
{
// insert code here...
//std::cout << "Hello, World!\n";
//@use auto
/*
auto Flag = true;
cout << "Flag = " << Flag;
cout << " , sizeof(Flag) = " << sizeof(Flag) << endl;
*/
//@add: dynamic array of integers
vector<int> MyNumbers;
// 將一些元素放入 vector 中 (每次向容器後面添加一個值)
MyNumbers.push_back(100);
MyNumbers.push_back(200);
MyNumbers.push_back(300);
MyNumbers.push_back(400);
MyNumbers.push_back(500);
// 顯示所存放的元素(原始方式)
//
// Iterator 變數的型別為: vector<int>::const_iterator
for (vector<int>::const_iterator Iterator = MyNumbers.begin();
Iterator < MyNumbers.end();
++Iterator) {
cout << *Iterator << " ";
}
return 0;
}
編譯並執行:
100 200 300 400 500
************************************************
2. 改成使用 auto:
....
int main(int argc, const char * argv[])
{
//@add: dynamic array of integers
vector<int> MyNumbers;
// 將一些元素放入 vector 中 (每次向容器後面添加一個值)
MyNumbers.push_back(100);
MyNumbers.push_back(200);
MyNumbers.push_back(300);
MyNumbers.push_back(400);
MyNumbers.push_back(500);
// 顯示所存放的元素(原始方式)
//
// Iterator 變數的型別為: vector<int>::const_iterator
/*
for (vector<int>::const_iterator Iterator = MyNumbers.begin();
Iterator < MyNumbers.end();
++Iterator) {
cout << *Iterator << " ";
}
*/
//@update: use auto
for (auto Iterator = MyNumbers.begin();
Iterator < MyNumbers.end();
++Iterator) {
cout << *Iterator << " ";
}
return 0;
}
編譯並執行:
100 200 300 400 500
說明:
在 auto 那一行, 編譯器檢查 Iterator 的初始值(為 MyNumbers.begin() 的回傳值),
並將 Iterator 變數的型別設為與 MyNumbers.begin() 的回傳值之型別相同.
(i.e. vector<int>::const_iterator)
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。