Rokiのチラ裏

学生による学習のログ

GCC

Conditionals with Omitted Operands

GCC の Conditionals with Omitted Operands という拡張構文についてのメモ。x ? x : yというような Conditional operator を利用した記述を次のように記述する事ができる。 x ? : y 値は x が 0 でない限り x 、そうでない場合 y である。このような単純な…

普段使いのコンパイル環境の整備

私は普段ちょっとしたコードに対してコンパイルを行う時、GCC と Clang のどちらかを使う。使うたびにコンパイルオプションを付与するのは面倒なので、これまでは単にオプションを含めた文字列をそのまま .zshrc のエイリアスとして設定していたのだが、あん…

Xcode8.0 deprecatedのEndless stream of warnings

Xcode8.0にアップデートしてからGCC6.1.0でコンパイルを行うと、どうも下記のような警告文が大量に出力されるようになった。 warning: section "__textcoal_nt" is deprecated .section __TEXT, __textcoal_nt, coalesced, pure_instructions ^ ~~~~~~~~~~~~…

tuple展開も容易になった時代

スライドを作っていて色々と文書を漁って、今頃気付いた。apply() call a function with arguments from a tuple (V3) いつの間にこんな文書が...二年以上も前じゃないか。 #include<experimental/tuple> #include<string> #include<functional> inline void f(int,float,std::string&&){} int main()</functional></string></experimental/tuple>…

left arrow operator(<-)を引数付きのメンバ関数にも対応してみた

ツイッターから見させて頂いたこちらのエントリ。 http://www.atnnn.com/p/operator-larrow/内容としては、クラスのポインタを持っていて関数を呼び出したい時、rigth arrow operatorを用いる事でそのメゾットを呼び出す事ができる。では、関数ポインタがあ…

C++17 std::array 規格によりほぼconstexpr化

C++14までではレガシー配列とstd::initializer_list*1がconstexprに対応していた*2が、C++17以降、std::arrayはfillとswapメンバ関数以外の全てを、constexpr化するとの事。 #include<array> template<class _Tp> using Container_value_t=typename _Tp::value_type; template<class _Tp> </class></class></array>…

データ型の範囲

int main() { using ullint=unsigned long long int; using ulint=unsigned long int; std::cout<

vtableを使わず関数アドレスを解決させてvirtual functionを呼びだす

通常C++プログラマがvirtual functionを宣言する理由は、virtualメソッドへの関数ポインタが格納されているvtableを暗黙に作り出させ、動的なポリモーフィズムを実現させるためである。 しかし、vtable経由で動的に関数を間接的に呼び出すという事は、コンパ…

リンク時に配列とポインタによる型の不一致でエラーを吐いてくれるか

// a.cpp int global_array[1]; extern void access(); int main() { global_array[0]=10; // 10 というアドレス値として扱われてしまう予定 access(); } // b.cpp extern int *global_array; void access(){global_array[0]=1; // 書き込もうとする} 各ファ…

GCCインデントミスの警告機能

$ cat test.cpp int main() { auto f=[]{}; auto b=[]{}; if(true) f(); b(); } $ g++ -std=c++0x -Wmisleading-indentation test.cpp test.cpp: 関数 ‘int main()’ 内: test.cpp:5:2: 警告: this ‘if’ clause does not guard... [-Wmisleading-indentation]…

OS X EI Capitan 10.11.2に最新版のGCCをBuildした作業ログ

最新版のファイルをダウンロード、解凍、整理。 $ wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-6.1.0/gcc-6.1.0.tar.gz $ tar zxvf gcc-6.1.0* $ rm gcc*tar.gz && cd gcc-* 依存パッケージのインストールとシンボリックリンクを張る作業…