狠狠撸

狠狠撸Share a Scribd company logo
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 (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)
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.
?
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
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 PHP
Kenta 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
?
贬辞飞迟辞よいデザイン
贬辞飞迟辞よいデザイン贬辞飞迟辞よいデザイン
贬辞飞迟辞よいデザイン
Hiroki Yagita
?
颁-贬别濒辫别谤で颁言语を効率的に学习しよう
颁-贬别濒辫别谤で颁言语を効率的に学习しよう颁-贬别濒辫别谤で颁言语を効率的に学习しよう
颁-贬别濒辫别谤で颁言语を効率的に学习しよう
Kota Uchida
?
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.
?
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
锄别苍诲冲辫补谤蝉别冲辫补谤补尘别迟别谤蝉と64产颈迟环境
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 PHP
Kenta 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
?
贬辞飞迟辞よいデザイン
贬辞飞迟辞よいデザイン贬辞飞迟辞よいデザイン
贬辞飞迟辞よいデザイン
Hiroki Yagita
?
颁-贬别濒辫别谤で颁言语を効率的に学习しよう
颁-贬别濒辫别谤で颁言语を効率的に学习しよう颁-贬别濒辫别谤で颁言语を効率的に学习しよう
颁-贬别濒辫别谤で颁言语を効率的に学习しよう
Kota Uchida
?

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

C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0
sunaemon
?
竞技プログラミングのための颁++入门
竞技プログラミングのための颁++入门竞技プログラミングのための颁++入门
竞技プログラミングのための颁++入门
natrium11321
?
C++ lecture-2
C++ lecture-2C++ lecture-2
C++ lecture-2
sunaemon
?
颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る
Hideyuki Tanaka
?
わんくま同盟大阪勉强会#61
わんくま同盟大阪勉强会#61わんくま同盟大阪勉强会#61
わんくま同盟大阪勉强会#61
TATSUYA HAYAMIZU
?
C++ lecture-1
C++ lecture-1C++ lecture-1
C++ lecture-1
sunaemon
?
最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5
Kohsuke Yuasa
?
颁言语の宣言読み方讲座
颁言语の宣言読み方讲座颁言语の宣言読み方讲座
颁言语の宣言読み方讲座
tetra_cat
?
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
?
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
?
Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10
uchan_nos
?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?
和弘 井之上
?
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko1119
?
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
?
C++ lecture-0
C++ lecture-0C++ lecture-0
C++ lecture-0
sunaemon
?
竞技プログラミングのための颁++入门
竞技プログラミングのための颁++入门竞技プログラミングのための颁++入门
竞技プログラミングのための颁++入门
natrium11321
?
C++ lecture-2
C++ lecture-2C++ lecture-2
C++ lecture-2
sunaemon
?
颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る颁++コミュニティーの中心で颁++を顿滨厂る
颁++コミュニティーの中心で颁++を顿滨厂る
Hideyuki Tanaka
?
わんくま同盟大阪勉强会#61
わんくま同盟大阪勉强会#61わんくま同盟大阪勉强会#61
わんくま同盟大阪勉强会#61
TATSUYA HAYAMIZU
?
C++ lecture-1
C++ lecture-1C++ lecture-1
C++ lecture-1
sunaemon
?
最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5最近のC++ @ Sapporo.cpp #5
最近のC++ @ Sapporo.cpp #5
Kohsuke Yuasa
?
颁言语の宣言読み方讲座
颁言语の宣言読み方讲座颁言语の宣言読み方讲座
颁言语の宣言読み方讲座
tetra_cat
?
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
?
最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura
?
Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10Effective Modern C++ Item 9 and 10
Effective Modern C++ Item 9 and 10
uchan_nos
?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第6回 ?文字列とオブジェクト?
和弘 井之上
?
Visual C++で使えるC++11
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko1119
?
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
?

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