SlideShare a Scribd company logo
1 of 23
C++ でぼくが忘れがちな
こと
あんどちん
自己紹介
• あんどちん(安藤敏彦)
• 名古屋出身・松戸在住
• フリープログラマ
o 今は PHP とか BASH スクリプトとか相手にしてる
• 好きなもの
o 美味しい食事
o 美味しい酒
• 嫌いなもの
o 不味い食事
o 不味い酒
C++ 、覚えてますか?
• …どんな言語でもそうだけど
o ある機能を覚えたきっかけが
 職場の人のソース
 学校の先輩のソース
 Web に載っていたソース
そこに載っていたものをパターンとして覚えて
しまいがち。
だから、言語の機能で持っているものや、規格
で決まっていることも知らなかったり
# まぁ、 C++er …は規格書大好きだから別か
…ところで
懇親会の追加受け付けます
C++
型周り
• char/signed char/unsigned char
o こいつらは皆別の型
• int[n]_t
o サイズ指定型
o C99 由来。 cstdint で定義
o 自分でサイズ毎の型を定義する必要なし
 INT32 とか、 DWORD とか
typedef と cv 修飾
• typedef や const の位置は任意
// 以下の宣言は全部同じ
typedef const unsigned int cuint;
const typedef unsigned int cuint;
int const typedef unsigned cuint;
virtual いらない。 override でいい
• 基底クラスで virtual 宣言されているメソッ
ドは派生クラスで virtual と書かなくても仮
想関数
struct Base { virtual void foo();   };
struct Derived {
void foo(); // 仮想関数
};
// 今時の C++er ならこう書いたほうがいい
struct Derived {
void foo() override; // 仮想関数
};
const 参照での浮動小数点型と整数
型
• 浮動小数点型変数への参照を整数型で作れ
る?
o const なら YES
const double d = 3.5;
// const int temp_d = d; // int のテンポラリが作られる
const int& i = d; // 3 (d のテンポラリを指す )
アクセス修飾子
• 名前が見えなくなるわけじゃない
o アクセスを制限するだけ
class Outer {
struct Inner {
void foo() {}
};
Inner v_;
public:
Inner get()
};
Outer o;
o.get.foo(); // できるよ!
operator &
• …これもオーバーロードできるから
struct S {
string operator &() { return string("hoge"); }
};
S s;
S* p = addressof(s); // これ大事
operator void の挙動
struct S {
operator void() {}
};
S s;
static_cast<void>(s); // 呼ばれない。 GCC4.7 は呼んでた
uniformed initializer による初期化
• C++11 では {} で初期化出来るようになって
便利。
vector<int> v1{0, 1, 2, 3 }; // 要素4つのベクタ
vector<string> v2{1}; // 要素1つのベクタ
初期化
• クラスオブジェクトの初期化は宣言順
struct S {
S() : c(3), b(2), a(1) {} // a,b,c の順で初期化
int a;
int b;
int c;
};
メンバ初期化での *this
• メンバ初期化の構文で *this を使える場合が
ある
struct outer {
unsigned int sz = sizeof(*this);
void f() {
int b[sizeof(*this)];
struct inner {
unsigned int sz = sizeof(*this); // OK
int c[sizeof(*this)]; // NG
} i;
}
};
スコープ
• こんなのが OK
typedef int T;
template<typename T = T, T init = T()> struct my_type {
T value = init;
my_type() = default;
my_type(const T& v) : value(v) {}
operator T() { return value; }
};
C との違い
int main()
• C では return いるけど、 C++ ではいらない
よ
o C++ で return の省略は return 0; になる
• C++ では main の再帰やアドレス取得はダメ
o C ではいいらしい
式中の型宣言
• C++ では式中の型宣言ができない
// C ならこんなことができる
struct S1 { int a; } foo(struct S2{ int b; }*);
条件式の結果、代入式、カンマ演
算子
• これらの結果は左辺値、 C だと右辺値
char arr[100];
sizeof(0,arr); // C++ だと 100 、 C だと sizeof(char*) になる
戻り値の有無
• 戻り値型が宣言されている関数での return
なし
o C++ ではエラー
o C ではエラーにならない
typedef と構造体(クラス)
• C++ では同じスコープで別の typedef を作れ
ない
typedef struct name1 {} name1; // どちらも OK
struct name2{};
typedef int name2; // C だと OK
定数の扱い
• C++ では未初期化の定数を作れない
const int v1 = 3; // どちらも OK
const int v2; // C++ では NG

More Related Content

What's hot

STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)Hiro H.
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Hiro H.
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」Hiro H.
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境Yo Ya
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)Hiro H.
 
Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?m ishizaki
 
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHPKenta USAMI
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画mametter
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたKatsuhiro Endo
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
HowtoよいデザインHiroki Yagita
 
C-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようC-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようKota Uchida
 

What's hot (11)

STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
STLの型の使い分け(ダイジェスト版) @ Sapporo.cpp 第7回勉強会 (2014.10.18)
 
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
Boost.勉強会 #21 札幌「C++1zにstring_viewが導入されてうれしいので紹介します」
 
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
2011.12.10 関数型都市忘年会 発表資料「最近書いた、関数型言語と関連する?C++プログラムの紹介」
 
zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境zend_parse_parametersと64bit環境
zend_parse_parametersと64bit環境
 
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
C++のSTLのコンテナ型を概観する @ Ohotech 特盛 #10(2014.8.30)
 
Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?Microsoft Learn で C# を学ぶとどんな感じ?
Microsoft Learn で C# を学ぶとどんな感じ?
 
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
人類の役に立たないDSL、そしていつからRubyが最高の言語だと錯覚してた? with PHP
 
Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画Ruby 3 の型解析に向けた計画
Ruby 3 の型解析に向けた計画
 
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみたMTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
 
Howtoよいデザイン
HowtoよいデザインHowtoよいデザイン
Howtoよいデザイン
 
C-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しようC-HelperでC言語を効率的に学習しよう
C-HelperでC言語を効率的に学習しよう
 

Similar to C++でぼくが忘れがちなこと

C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるHideyuki Tanaka
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること信之 岩永
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
Cranberries interval library 開発の話
Cranberries interval library 開発の話Cranberries interval library 開発の話
Cranberries interval library 開発の話Wada Yuki
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたMitsuru Kariya
 
JSのお勉強の話。
JSのお勉強の話。JSのお勉強の話。
JSのお勉強の話。Hiroshi Urabe
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)信之 岩永
 
DATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialDATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialTatsuya Tojima
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門Yoshitaka Seo
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語るAkira Takahashi
 

Similar to C++でぼくが忘れがちなこと (20)

C++の復習
C++の復習C++の復習
C++の復習
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
C#や.NET Frameworkがやっていること
C#や.NET FrameworkがやっていることC#や.NET Frameworkがやっていること
C#や.NET Frameworkがやっていること
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
第1回python勉強会
第1回python勉強会第1回python勉強会
第1回python勉強会
 
dwangocpp1-lt
dwangocpp1-ltdwangocpp1-lt
dwangocpp1-lt
 
Cranberries interval library 開発の話
Cranberries interval library 開発の話Cranberries interval library 開発の話
Cranberries interval library 開発の話
 
クソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみたクソザコ鳥頭が非順序連想コンテナに入門してみた
クソザコ鳥頭が非順序連想コンテナに入門してみた
 
C++0x総復習
C++0x総復習C++0x総復習
C++0x総復習
 
JSのお勉強の話。
JSのお勉強の話。JSのお勉強の話。
JSのお勉強の話。
 
C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)C# 8.0 Preview in Visual Studio 2019 (16.0)
C# 8.0 Preview in Visual Studio 2019 (16.0)
 
DATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 TurorialDATUM STUDIO PyCon2016 Turorial
DATUM STUDIO PyCon2016 Turorial
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Frequency with nltk
Frequency with nltkFrequency with nltk
Frequency with nltk
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 

C++でぼくが忘れがちなこと