Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

タグ

C++とProgrammingに関するch1248のブックマーク (43)

  • C++erは全員戻り値型の後置記法を使おう - ◯◯◯◯ソフト開発日誌

    目次 目次 「戻り値型の後置記法」って何? 何が嬉しいの? 問題点 「戻り値型の後置記法」って何? C++11から導入された言語仕様です。 タイトルの呼び方は自分が勝手に使っているだけで、英語圏だと「trailing-return-type」がよく使われるらしい。 cpprefjp.github.io この仕様を使うと例えば以下のようなコードが int Add(int a, int b) { return a + b; } このようになります。 auto Add(int a, int b) -> int { return a + b; } 何が嬉しいの? この仕様はC++のメタプログラミングで戻り値型の推論を簡単に行う目的で使用されます。 なんだ、そんなC++上級者のための機能なんて下々の人間には関係ないじゃん、とお思いかもしれませんが、この機能にはもう一つわかりやすい大きなメリットがある

    C++erは全員戻り値型の後置記法を使おう - ◯◯◯◯ソフト開発日誌
    ch1248
    ch1248 2024/05/10
    これは良いな
  • PythonはJavaやC ++に比べて非常に遅いのに、なぜ機械学習のような高速アルゴリズム処理にPythonが使われるのですか? - Quora

    機械学習Pythonで行うというのは、Pythonで計算処理をすることではなくて、C++等で書かれた(Python向けの)の計算処理の外部ライブラリを使うことを意味しています。Pythonを使うのは簡単なデータの前処理や後処理(結果をログファイルに書き出すなど)だけです。メインの計算処理をPythonで書くことはありません。というか、Pythonはそもそも機械学習みたいな重い計算に用いることは全く想定されていない言語なので、メインの計算処理は書きたくてもPythonでは書けません。 こう書くとPythonは不便な言語だなと思われるかもしれませんが、実際には、深層学習などの、GPUや並列計算機をブン回すような重い計算を必要とするような処理は、JavaだろうがC++だろうが、基的に、素人(機械学習の専門家は、普通、計算機の高速化(HPC)に関しては全くの素人です)が書いたコードは、遅すぎて

  • Hayato.io

    Hayato.io This Page Is Under Construction - Coming Soon! Why am I seeing this 'Under Construction' page? Related Searches: Contact Lens Top Smart Phones song lyrics Dental Plans All Inclusive Vacation Packages Trademark Free Notice Review our Privacy Policy Service Agreement Legal Notice Privacy Policy|Do Not Sell or Share My Personal Information

  • コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記

    僕は先日、「コンパイル時Cコンパイラ」なるプログラムをつくって、公開した。 「コンパイル時Cコンパイラ」とは、コンパイルするとC言語プログラムのコンパイルが行われるというようなC++プログラムである。 C++のコンパイル中に C言語プログラムのコンパイルを行う、 "コンパイル時Cコンパイラ"をつくりました #ELVMhttps://t.co/kKiLU3rLFX— うどん (@kw_udon_) 2016年11月18日 自分で書いておいてなんだが、「なんのこっちゃ」という感じではある。(ちゃんと記事中で説明する。) 実際、変なプログラムではあるのだが、とても嬉しいことに多くの人に面白がっていただき、予想だにしなかった大きな反響をいただいた。 Hacker Newsで1位になったり、LLVMの公式ブログで紹介されたり、果てはC++の作者であるBjarne Stroustrupにも言及されるに

    コンパイル中にコンパイルする「コンパイル時Cコンパイラ」をつくった話 - kw-udonの日記
  • 【C++】なぜヘッダと実装はわけるべきなのでしょうか(.hに実装を書くことは邪道か)

    私はC++歴3年の学生趣味プログラマーです。 「C++はなぜヘッダと実装を分けなくてはならないのか/そもそも当に分けなければならないのか」という質問です。 C++といえば、ヘッダー部と実装部を.hファイルと.cppファイルに分けることが一般的とされている言語ですが、 これは同じオブジェクト指向言語のC#やJavaにはない特徴です。 そのせいでC++使いたちは今日もcppファイルとhファイルを行ったり来たりしながらコーディングする羽目になっています。(そしてVS使いはF12とCtrl+-を得意気に連打しています。) 私にとってもそれが当たり前になって久しいですが、 時々C++を学び始めたばかりの後輩から「なぜヘッダファイルに実装を書いてはならないのか」「なぜC++は二度も同じコードを書くことを強いるのか」と質問を受けます。 私はそのたびに「実装の隠蔽化」とか「循環参照の危険が云々」とか「そ

    【C++】なぜヘッダと実装はわけるべきなのでしょうか(.hに実装を書くことは邪道か)
  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか

  • C++ におけるコードレビューの重要性と活用 - NyaRuRuが地球にいたころ

    そのような場合 C++ では、この関数 g の仮引数 obj に対して const 修飾を行うことで「私 g は obj の参照先の値に対して破壊的な操作を行いませんよ」という宣言を関数 g にさせることができます。 void g(const LargeObj& obj){ ... } void f(){ LargeObj tmp; g(tmp); // tmp に対する変更はない ..... // tmp に対する何らかの処理(安心です!) } やりましたね! C++ のコードにこの種のコメントを残すのは,コードレビュアーの仕事を増やすお手軽な方法のひとつです. 悪性の const_cast や mutable が問題なのではありません.同僚が悪性の const_cast や mutable をコードに紛れ込ませるようであれば,それは採用プロセスの問題です. より現実的な問題は,cons

    C++ におけるコードレビューの重要性と活用 - NyaRuRuが地球にいたころ
  • 今すぐ使える C++ コーディングテクニック集 - torus711 のアレ

    前置き これは、Competitive Programming Advent Calendar Div2013, 第 5 日の記事です。 記事の内容はタイトルの通り、アルゴリズムではなくコーディング自体に関するテクニック集です。(おそらく)競技プログラミング界隈ではこういった知識についてのまとまった資料が少なく、他の参加者のコードを見て盗まなければならないというのが現状だと思います。当ブログでも、テクニカルな書き方をしたコードを特に説明せずに掲載しているので、わたしがよく使っているものをまとめてみようと思いました。 この記事の内容を実践することで、例えば次のような効果があります。(個人の感想です) コード量が減少し、すっきりまとまったコードになってうれしい コードの意味が分かりやすくなり、デバッグしやすくなってうれしい Challenge / Hack の際に変なコードでも読めるようになっ

    今すぐ使える C++ コーディングテクニック集 - torus711 のアレ
    ch1248
    ch1248 2015/02/16
    うーん
  • ビルド高速化してみた - うなてっくろぐ

    数日前から作っていたミニゲームを公開。ソースもあるよ! http://d.hatena.ne.jp/kyubuns/20110321/1300708060 というわけでソースに飛びついてきました。DirectXのコードは書いたことないのでちょっとわくわくします。しました。 だいぶ読みやすいコードだとは思うのですが、コンパイルの長いこと。i7でも一分かかってます。なんとかならないの?(バンバン なんとかしました。 まずはビルド環境の構築 まず今日使う材料はこちら。適当なところで調達してきて下さいね。 Microsoft VisualStudio 2010 (C++ Expressでもいいかも) Boost Library DirectX SDK ライブラリ類はプロパティシートでパスを切っておきましょう。Microsoft.Cpp.**.userというデフォルトのシート、もしくは新しく作っても

    ビルド高速化してみた - うなてっくろぐ
  • C++のコンパイルとリンクがあまりに遅いのでカッとなって原因と対策を調べてみた - Qiita

    #pragma once // 二重インクルード防止 #include "classA.h" // クラスAのヘッダ →継承してるので必要 // #include "classB.h" // クラスBのヘッダ →前方宣言できるのでcppにインクルードをかけば良い。 #include "classC.h" // クラスCのヘッダ →実態をメンバに持ってるので必要 // #include "classX.h" // そもそもヘッダで使ってない(もしcppで使ってる時は、cppに書くだけでOK) class classB; // 定義がポインタであれば前方宣言だけでOK class classD : public classA { public: ~ private: classB* m_pClassB; // ポインタ classC m_classC; // 実態 }; 継承している場合は仕方

    C++のコンパイルとリンクがあまりに遅いのでカッとなって原因と対策を調べてみた - Qiita
  • C++で大規模な配列追記のパフォーマンス - ponkotuyの日記

    はじめに @__boronium による 「じゃあC++はどうなの?」 という疑問にお答えするコーナー。元のPython版はhttp://d.hatena.ne.jp/ponkotuy/20111216/1324021461 でどうぞ。 ちなみにg++4.6.1 -O2 -std=c++0xでコンパイル。 はじめる前に補足 微妙に間違った参考のされ方してたので補足しておくと、こいつはどういう訳か「データの入力が圧倒的に多いのにその殆どは参照すらされずに捨てられる場合」に一番早いコンテナ、という極めて稀なパターンに特化した測定なので、そゆ場合にしかアテになりません。 Vector #include <vector> int main() { const int size = 10000000; std::vector<int> v = {1,2,3}; for(int i=0; i<size

    C++で大規模な配列追記のパフォーマンス - ponkotuyの日記
  • Java の enum - ぐるぐる~

    イマドキの Java には enum があるんですよ実は、という話。 知ってるよそんなこと!な人は読むまでもないかも。 enum って? 列挙型のこと。C とか C++ とか C# とかでおなじみのアレ。 単純な enum は Java でもこれらの言語の enum と同じような記述になるけど、これらの言語の enum が整数型をベースにしているのに対して、Java ではオブジェクトをベースにしている点が異なる。 まぁその話は後ほど・・・ 単純な enum ただ列挙するだけの enum なら、当に C や C++ や C# とほとんど変わらない。 // 信号機の色 enum SignalColor { RED, BLUE, YELLOW } ただこれだけ。末尾には、余分なカンマがあってもいい。 enum SignalColor { RED, BLUE, YELLOW, } 更に、末尾にセ

    Java の enum - ぐるぐる~
  • 多相性について - 組み込みC/C++

    CからC++へプログラムを移行する動機として多相性を使いたいというのがあるかと思います。さて、次のようなCソースがありました。これを多相性を使って、オブジェクティブなソースにしてみましょう。 void *copy_char(char *to, const char *from, int length ){ int i; for(i = 0; i<length; i++){ to[ i ] = from[ i ]; } return to; } void *copy_short(short *to, const short *from, int length ){ int i; for(i = 0; i<length; i++){ to[ i ] = from[ i ]; } return to; } int main(){ const char base1[ ]="abcde"; char

    多相性について - 組み込みC/C++
  • RAII以外にもある後処理の書き方 - イグトランスの頭の中

    言ってしまえば、高階関数は便利だねという話でもあるわけです、それに加えてC++特有の事情があるだけで。 C++視点からのRuby紹介 // Speaker Deckの52ページ目の「ブロックを使ったRAIIっぽい機能」より。 ブロックを使ったRAIIっぽい機能 File.openメソッドファイルを開いた後、受け取ったブロックを実行例外の発生有無にかかわらず最後にファイルを閉じるスコープを抜けると自答的にリソースが閉じられるRAIIと共通しているこのような書き方はC++でも有用です。なぜなら、C++には事実上「デストラクタで例外を投げてはいけない」ためです(cf. More Effective C++ 項目11 デストラクタで発生した例外を抑える)。 そこで、ブロック引数のように関数(オブジェクト)を実引数に取る関数という方法です。後処理に失敗する可能性のある処理を抽象化する方法として有力な

    RAII以外にもある後処理の書き方 - イグトランスの頭の中
  • private継承はどう使う?

    > 基底クラスの段階でのprivateと継承してからの段階でprivate > 扱いになるのとでは意味が違うのでしょうか? 継承時のアクセス制限は、いうなれば「継承する側の都合」なので、 「継承する自分自身を"呼ぶクラス"や自分自身より"下位の派生クラス"」に影響します。 privateで継承したクラス自身はこの影響を受けずに、 自分自身は基底クラスの方の影響だけを受けるということです。 定義も派生する側に書きますよね。 同じ基底クラスからでも継承するクラス毎に別設定できるということです。 # なので、他のクラスの一部実装だけを流用するためにprivateで実装継承なんてこともありえるのです。 # publicで継承すると余計なインターフェイスまで取り込んじゃいますが、 # privateなら内部で利用するだけですから余分なものがあっても自分が使うだけで、外には漏らしません。 # (pri

    private継承はどう使う?
  • C++でのポリモーフィズムと継承と、コード保守性 - negationの日記

    結論から言うと「ポインタを使うしかない」ということなのですが,まずはいくつかの問題とパターンを見てみましょう. 初めは、C++で継承を使ったポリモーフィズム実現まで まず例題として複数クラスが関連したものを想定します.今回は下記のような小説棚をクラスで書くこととします. class Novel{ //小説クラス public: std::string title; //タイトル std::string author; //作者名 std::string illustrator; //挿絵作者名 //コンストラクタ Novel(); Novel(std::string t, std::string a, std::string i) : title(t), author(a), illustrator(i){}; virtual ~Novel(); //「==」演算子定義 bool op

    C++でのポリモーフィズムと継承と、コード保守性 - negationの日記
    ch1248
    ch1248 2014/11/10
    設計の問題に見える。クラスをインタフェース部と実装部に分けて、pimplイディオム使えば上手くいきそう。
  • はてなブログ | 無料ブログを作成しよう

    日記_2024.8.29 鞍馬と貴船 29日は鞍馬と貴船に行ってきました。こんな天気でバイクは無理、でも引きこもるのも嫌なので前々から行きたかった鞍馬と貴船に行くことにしました。ただ、いつ大雨が降っても全くおかしくないので天気がヤバそうなら帰ることにします。普通に日帰りできる距離ですから…

    はてなブログ | 無料ブログを作成しよう
  • C++ 基底クラスのアクセス指定子 - プログラミングの教科書を置いておくところ

    private 継承や protected 継承がよくわからないということをよく聞きます クラスの継承というと is-a 関係だの is-implemented-in-terms-of 関係だのという言葉が出てきてしまうのが何となく難しそうに感じさせている一因だと思いますが、では当に難しいことなのかというと実は別に難しくも何ともありません private 継承や protected 継承がよくわからないということの原因はただ基底クラスのアクセス指定子が何を意味しているかを理解していないところにあるのだと思います Fig.1 // public継承 class CDerivedClass1 : public CPublicBaseClass { ... }; // protected継承 class CDerivedClass2 : protected CProtectedBaseClas

    C++ 基底クラスのアクセス指定子 - プログラミングの教科書を置いておくところ
  • GNU make 日本語訳(Coop編) - 目次

    著者 :リチャード・M・ストールマン, ローランド・マグラス (GNU プロジェクト) 訳者 : いのまた みつひろ / ecoop.net(技術メモ公開中) 翻訳文更新日:May 20, 2002(翻訳終了・未校正) Linux 標準搭載の make コマンド, 別名 gmake の日語版です。 この資料の著作権は Richard.M.Stallman & Roland.McGrath と Free Software Foundation にあり、また翻訳版には前述の著作者に加えて ecoop.net に著作権があります。再配布・転載等される方はこちらを見て下さい。 GNU Project についてはgnu.org(日語)を参照のこと。 序文はこちら GNU makeユーティリティは大きいプログラムのどの断片が再コンパイルされる必要が あるかという事と,それらを再コンパイルする発行コ

  • C++プログラマ(というか自分)のためのObjective-C講座(というかメモ)

    目次 全般 クラス メッセージの送信 idとNSObject その他 全般 まあ、/Developer/Documentation/Cocoa/ObjectiveC/index.htmlを見れば、細かいことは分かるので、ここではC++に慣れた人から見たObjective-Cの概略をまとめるということで。 まず。 Objective-Cコンパイラは、C++コンパイラに比べるとコンパイラとしてよりもプリプロセッサに近い動きをする。 /usr/include/objc以下にいろんなヘッダがあるんだが、これらをあらかじめincludeしたC、という感じに近い(もちろん文法の拡張がいくつかあるので、それらの解析はObjective-Cの重要な機能なんだけど)。 それは例えば、「動的バインドされるメソッドにアクセスする関数」「動的にクラスを追加する関数」のような、言語仕様の内側部分をいじくっちゃうよう