サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
猫
prettysoft.hatenablog.com
はじめに C++ 11 で auto キーワードが型推論機能として生まれ変わりました 7 Declarations 7.1 Specifiers 7.1.6 Type specifiers 7.1.6.4 auto specifierここでは auto の4つの使い方について簡単に説明します auto, auto&, const auto&, auto&& (auto* などともできますがここでは省きます) auto auto はコピーされても構わないときに使います 整数やポインタなどを受け取る場合はいいのですが、次のような使い方では無駄なコピーが生じてしまうので注意が必要です s は foo[n] のコピーです std::vector<std::string> foo; ... for( auto s : foo ){ ... } auto& auto& はほぼ万能型です lvalue
SFINAE とは SFINAE は、Substitution Failure Is Not An Error の略です これは、テンプレートの展開途中に文法違反になるような候補があったとしても、他の候補があるのであればその文法違反はエラーとせずに無視するという仕様です と言っても何のことを言っているのかわからないかもしれませんが、大丈夫です 具体的な例を見れば SFINAE というのは実はとても簡単な仕組みに SFINAE という名前を付けているだけなんだということがわかると思います 標準での言及箇所は・・・・・・わかりません 標準の .pdf を substitution で検索すると 14.8 辺りにそれっぽいところはあります n1905 14 Templates 14.8 Function template specializations 14.8.2 Template argum
読み方のコツ 具体例 const の読み方 読み方のコツ 規則は単純です。この二点だけ押さえましょう: ポインタの* より 配列の[] や 関数の() の方が優先順位が高い 日本語の人は左から右へ読む。ただし () の中は後で読む 英語の人は逆に変数名(一番内側の括弧)から結合優先順位の高い順に外へ読む そしてそれぞれの記号が出てきたら下記のように読み替えましょう * 〜を指すポインタ, a pointer to 〜 [] 〜の配列, an array of 〜 () 〜を返す関数, a function returning 〜 〜を引数に取り〜を返す関数, a function taking 〜 and returning 〜 具体例 char* aaa; char aaa[10]; char *aaa[10]; char** aaa; char (*aaa)[10]; char (**
はじめに これは気にする必要のないことなのでこれまで意図的に説明しなかったことなのですが、rvalue とは何者なのかということについて気になる人も多いようです rvalue参照についてはこれまで何度か説明をしてきましたが、そこでは「rvalue参照の rvalue とは一時オブジェクトである」と言ってきました 「rvalue とは」ではなく「rvalue参照の rvalue とは」です rvalue参照の文脈で rvalue と言えばそれは必ず一時オブジェクトのことです しかし rvalue参照と関係の無い文脈での rvalue は必ずしも一時オブジェクトであるとは限りません では rvalue とは何者なのでしょうか ここでは rvalue とは何者なのか なぜそれを知る必要がないのかを説明しましょう 標準では 標準では次のように言っています N3797 3 Basic concept
はじめに 初期化に無頓着な人は C++ の初期化の挙動について知らないということが原因の一つのような気がします そこでここでは C++ の初期化について説明します デフォルトコンストラクタ デフォルトコンストラクタというのは、引数なしで呼ぶことのできるコンストラクタのことです ユーザー定義の引数なしで呼ぶことのできるコンストラクタが宣言されているクラスではそれのことです そうしたコンストラクタのないクラスでは暗黙のコンストラクタのことです 12 Special member functions 12.1 Constructors 5 A default constructor for a class X is a constructor of class X that can be called without an argument. If there is no userdeclare
private 継承や protected 継承がよくわからないということをよく聞きます クラスの継承というと is-a 関係だの is-implemented-in-terms-of 関係だのという言葉が出てきてしまうのが何となく難しそうに感じさせている一因だと思いますが、では本当に難しいことなのかというと実は別に難しくも何ともありません private 継承や protected 継承がよくわからないということの原因はただ基底クラスのアクセス指定子が何を意味しているかを理解していないところにあるのだと思います Fig.1 // public継承 class CDerivedClass1 : public CPublicBaseClass { ... }; // protected継承 class CDerivedClass2 : protected CProtectedBaseClas
「コールバック関数」ってよく聞きますよね 今回はその「コールバック」の使い方を覚えましょう その前に その前に、関数のポインタがなんだかわからないという人や、関数のポインタの宣言の仕方がわからないという人は C/C++ 変数宣言の読み方入門 や C/C++ ポインタ入門 を先にご覧になった方がいいかもしれません 具体的には まず具体的な例を挙げますが、「コールバック関数」というのは文法的には関数のポインタを引数に取る関数に指定するその関数のことです この例では foo 関数はパラメータに指定された callback という関数のポインタを介して bar 関数を呼び出すことができるようになっていますね この仕組みが「コールバック」です Fig.1 void foo( size_t celt, int* pelt, void (*callback)(int)){ for( size_t n =
はじめに 新人教育などでプログラムを書かせる場合、その人がイメージしやすい問題を与えるということが重要です ですから、まったくの初心者には「関数の仕様を渡して、その仕様通りの動作をする関数を書かせる」といった問題や「printf や malloc を書いてみよう」といった問題よりは「電卓を書いてみよう」「カレンダーを書いてみよう」といった問題の方が適切です (そういったステップを乗り越えた後は printf や malloc を書かせるのはとてもよい課題です) 電卓やカレンダーならどんな初心者でも動作の細部まで完成形をイメージできますから、書いているプログラムが今どこまでできていて次に何をしなければいけないのか、といったことも容易にイメージすることができます 初心者に課題を出す場合にはここが重要なところで、ここをイメージできないままに放っておくと、宿題だから仕事だからやらなきゃいけないから
はじめに C++20 の前の基礎知識として、以前 C++ の名前解決 でも紹介した ADL (Argument-dependent name lookup) に関連した話題を少し紹介してみます ■蛇足 ここで「名前を探す」などと言っているのはすべてコンパイル時の話です コンパイラ内部の話です 実行時に関数を探すようなコードが生成されるわけではありません ADL と関数テンプレート 標準に次のような記述があり、通常の関数テンプレート呼び出しには ADL は適用されるが、テンプレート引数を明示的に指定した場合は他の候補の名前が見えていないと ADL は適用されない(呼び出そうとしている Unqualified name がテンプレート関数だと認識されない)。と言っています N1905 14 Templates 14.8 Function template specializations 14.
テンプレート内でのマルチバイト文字とワイド文字の扱いを例に、テンプレート引数に応じた場合分けを実現する方法について説明します テンプレート引数に応じて何か処理を分けたいというときには、その場合分けを別のテンプレートに追い出すことで実現できます テンプレート引数に応じた場合分け 今、Fig.1 のような関数を考えてみましょう Fig.1 #define elementsizeof( a ) sizeof((a)[0]) #define elementsof( a ) (sizeof((a))/elemetsizeof((a))) void debug_dump_vectorA( const std::vector<std::string>& v, int indent = 0 ){ int n = 0; for( std::vector<std::string>::const_iterato
はじめに 近年、組み込み環境でもスクリプト言語への関心が高まっていますが、そういった言語処理系を書く際に必要となってくるのが字句解析、構文解析です ここでは簡単な再帰下降型のパーサを例に、実際に実装してみながら構文解析について学んでゆきましょう 再帰下降型の構文解析器は単純に実装するとスタックの消費が激しいことやスタック領域の枯渇の予測が難しいことなどであまり実用的なものにはならないのですが、構造が簡単なので構文解析の仕組みを理解するのには向いています (「再帰降下」でも「再帰下降」でもどっちでもいいです。「recursive descent」の訳かな) BNF 式の構造の定義としてBNF的な表記を用いていますが、別にBNFを知らなくても問題ありません 空文字列(ε)は省略してあります 一部には正規表現的な表記も用いています * は 0回以上の繰り返し、+ は 1回以上の繰り返しを表してい
このページを最初にブックマークしてみませんか?
『プログラミングの教科書を置いておくところ』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く