VS2012
VS2012を導入したので(あと2012.11版のVC++)、VS2012で追加された新しいC++11の機能を試してみた。機能を試すことが目的なのでソースの意味や綺麗さは皆無です…
#include <vector> #include <iostream> //新しいSTL #include <atomic> #include <chrono> #include <condition_variable> #include <filesystem> #include <future> #include <initializer_list> #include <mutex> #include <ratio> #include <thread> //外部テンプレート extern template class std::vector<double>; class intenger { public: intenger(int i) : value(i) { } //コンストラクタの委譲 intenger() : intenger(0) { } //強い型付けenum&前方宣言 enum class int_size : unsigned int; //final指定(ここにはないけどoverride指定もある) virtual int get() const final { return value; } //明示的な型変換 explicit operator double() const { return static_cast<double>(value); } //強い型付けenum enum class int_size : unsigned int { MAX = 2^32U, MIN = 0U, }; private: int value; }; //テンプレート関数のデフォルトテンプレート引数 template<class T, class U = double> void f(T, U* = nullptr) { } //可変長テンプレート引数 template<class... T> void g(T... t) { } //初期化リスト void h(std::initializer_list<int> list) { //範囲for文 for(auto i : list) { std::cout << i << std::endl; } } struct point { public: point(){} point(int x, int y) : x_(x), y_(y) {} private: int x_; int y_; }; //別名テンプレート、コンパイラ自動生成関数のdefault/delete指定はない int main() { //デフォルトテンプレート引数 f(4); //可変長テンプレート引数 g<int, float, double, const char*, char>(1, 1.0f, 1.0, "a", 'a'); //統一的な初期化構文(Uniform Initialization) point p{10, 20}; //初期化リスト h({1, 3, 4}); return 0; }