c/c++

C++バンザーイ、バンザーイ

断言しよう、 俺は今のプロジェクトがCだったら死んでいた!!!!!!!とかいうくらい、virtualの有り難みを思い知った事はないね。virtualを考えた奴は天才だな!!!!! 願わくば、全てをvirtualにしておいてくれたら……orz.あと、なんかExcelマスターに…

例えば

「例えば、PHPを避ける」ってなぁにその曖昧な書き方?例えば、複数の言語を知らないプログラマや勉強をしないプログラマを避ける。で、いいんじゃね?あと、言語を変えることは〜という人は CGIも書けるとかいうRPGIVとかを触ってから言ってみて欲しいなぁ。

偉い人が

お前らC++舐めるな、殺すぞ。 っていってました>< 基底クラスがあるのに、 別々のリストに格納して、別々に回すとかどんだけだよ……。 HogeList,FooList,BarList,...基底一緒じゃんよ……。 orz.

死に至る言語

→元ネタ 漢の言語 - みねこあC++の何が難しいって、わかってないのに解ってるという奴が多いとか、実は自分もわかってませんとか、 そもそも適当に書かれると依存性高くなり過ぎなんだよ、バーロー。ヘッダにちょっとメンバ関数を付け加えたら、 500ファイル…

ローカル変数はアップキャストすべきではない

昨日はグレンリベットをストレートで十杯ほど飲んでしまったので、 今日は駄目かと思ったら意外とそうでもなかった。 で、書こうと思っていたことその1。 参戦はしないのでトラバはなし。 ローカル変数の型 #4 - odz buffer Re: Re: 型宣言は汎用的にすべき…

vectorとlistのメモリ効率 そにょに

odzさんから「答え」来たよー! ということで、 正解は実体でした。 実体をコンテナにいれたことがなかったのでわからなかった! 正直、コンテナにいれるのはポインタ(できればスマート)じゃなあ、 と思っているだけに、そういえば実体も入ったのだなあ、 …

vectorとlistのメモリ効率

元々は、LinkedListとArrayListのメモリ効率のお話。 ArrayListとLinkedListのメモリ効率 - ori’s diary 404 Not Found メモリ効率というと通常、「メモリ空間をどれだけ占有するか?」というイメージで捉えられると考えられるため、 ArrayListが効率が良い…

多重継承を禁止したらJava以下じゃないか!

C++を使っていると、たまに「よくわからないから多重継承は禁止」とかいう規約があることがある。……馬鹿じゃないかしら。とまでは言わないわけだけれども、 C++から多重継承を取り上げたら、Javaの継承よりも弱くなっちゃうじゃないか!くらいは言いたい。 …

オブジェクトファクトリ

今日はなんか変なマクロをあーうーあー、とか言いながら Factoryに置き換えていたんだけれども、 Base* createBase(int type) { switch(type) { case TypeHoge: return new Hoge(); case TypeBar: return new Bar(): case TypeFoo: return new Foo(); } ... …

駄目な子ほど可愛い

あ、あんたなんか好きで使ってるんじゃないんだからね!仕事なんだから仕方なしに使ってるんだからねっ!! 変人ですから。 - みねこあ id:minekoaさんの駄目な子ほど可愛い好例。 CよりC++ですよね〜。

型がないのは納得いかないね

今は動的言語が幅をきかせているのでこういう事は言いづらいけれど、 言いたくなる事もある。いや、勿論動的言語には型がない訳じゃない。 型を意識しなくても書けてしまう事が問題。静的言語においてはどうしてもtype-safe(型安全)を求めたいし求められる…

ふお! re:だふのわるだくみ

ひょっとしていそぴーとかid:puruhimeさんあたりの若い衆はこれを知らんかな? Duff's Deviceってのは void send(short *to, short *from, int count) { int n=(count+7)/8; switch(count%8){ case 0: do{ *to = *from++; case 7: *to = *from++; case 6: *to…

sizeof(Hoge)==0?

はてブコメントより。id:sankasekiさん曰く クソして寝る前にC言語でClassを記述して欲しい、ついで言うとサンプルソースの様にClass固有のメモリ領域が不要である場合(メンバ変数なし等)、環境によってはclassポインタがNULLになり a: b: c: が一致する あ…

もしかしてCの奴らは代入やキャストでポインタのアドレスが変わらないとか思っているのか?

class A { public: A (){} virtual ~A (){} }; class B { public: B (){}; virtual ~B (){}; }; class C : public A, public B { public: C (){} virtual ~C (){} }; int main() { C* c = new C(); A* a = c; B* b = c; printf("c:%p\n", c); printf("b:%p\n…

Cスタイルキャスト

なんでC++のキャストを使わないの? って訊いたら「めんどい」って言われた〜。 orz...

常人or変人?

変人言語 - みねこあ 2008-01-22 - [´・[ェ]・] <もももっもっ 反応遅くて済みません。 お二人からCは常人言語と言われてしもうた〜。 個人的にはC++の悪癖はCの悪癖だと思っているのと*1 CとC++で選べと言われたら「絶対」C++を選ぶと思う*2ので、 そういう…

無料のCコンパイラで何かつくる意味ってあるのか?

きむら(K)さんにどうこう言うわけではないです!(布石 まあBCC++のCコンパイラ部分もいい加減ほめられたデキではないと思いますが、 学校の授業(講義ではない?)ではコンパイラのバグが露呈するようなことは たぶんないからいいんじゃないでかね。 C99への準…

!Inner classes have no special access to the outer class in C++.

らしいです。 C++初心者として思うに、Hogeでprivateなものは、Barのコンストラクタとして渡してもやっぱprivateのままで、アクセス不可のような気がするけどなぁ…… http://d.hatena.ne.jp/puruhime/20080117#1200583162 Nested classes can access private …

re:C++ vs Java 内部クラス

エラーが。うーん、Borland C++5.5は駄目な子なのかな? マジで! とか思ってC++ Builder5 Professionalで実行してみたけど 確かに外部クラスのprivate:に引っかかる。 うーぬ。 Stateを実装する際に普通に使っていたテクニックだったので、 通るもんだとば…

Cのvoid*はキャストすべきかしないべきか?

きむら(K)さんに反応。 Do you CAST a pointer value which is returned by malloc/realloc/calloc and vaise versa? 要するにANSI/ISO Cではvoid*から何らかの型のポインタに対するキャストは必要ないのですが、(してもしなくてもいい) それを「すべき」…

C++のこういういうところが素敵じゃね?

たとえば、 bar.h class CNode { public: CNode(){ cout << "bar CNode::constructor" << endl; } virtual ~CNode();// 実装し忘れ... }; foo.h class CNode { public: CNode(){ cout << "foo CNode::constructor" << endl; } virtual ~CNode(); }; foo.cpp …

まだまだ続くよッ!Singleton

Singletonとんとん。 で、GamePadなら、 class GamePad { public: enum Button { PAD_A, PAD_B, }; private: class GamePadImpl { public: GamePadImpl(){}; virtual ~GamePadImpl(){}; bool isPushButton(Button b) { return true; } void update(){} }; st…

どうして大域的アクセスが無ければ困るのか?

Singletonの続き。:-[ 要するに GamePadを大域的アクセス可能なクラスとして扱いたい理由としては class Character { public: Character(){} virtual ~Character(){} virtual void execute() = 0; }; class Player : public Character { public: Player(){};…

よみがえるSingleton

もう少し引っ張るSingleton。 Modern C++ DesignにもC++におけるSingletonの実装の話が載っている。 GoF本におけるSingletonの説明を単純化すると「あるクラスのインスタンスがたった1つになることを保証し、それに対する大域的なアクセス・ポイントを提供…

実例に沿ってSingletonとんとん

例えば、 ゲーム的に表現してしまうんですが、 ScriptEngine というクラスがあるとして、 スクリプトをロードして実行する機能を持つとする。一つのスクリプトデータに関して一つのインスタンスを持つ訳ではなく、 ロードしたデータに関連したハンドル、 な…

Singletonを実現するgetInstanceが推奨できない理由

id:nicht-seinさんからコメントがあったので書いてみます。 まず、コメントにも書いてくださったようによく見かけるこれ (僅かに手を加えました) class CHoge { private: CHoge() : value_(100) {}; ~CHoge(){}; int value_; public: void setHoge(int val…

ちょっと久々に(?)きもいと思ったぜ!

int hoge = getHoge(); if (!hoge) { .... } ええええええええええええええ int を ! で見るのってありえなーいとか思いました。 (正常かどうかは不明

それってグローバルだよねえ

と、 C++のソースを読んでいるとよく見かけがちなソースCHoge::GetInstance()->hogehoge();これって、 きもいいいいいいー とか思うんだけど、(自分はね 多用されがちあまつさえ #define Hoge CHoge::GetInstance() とか Hoge->GetFoo()->GetBar(); とかや…

本当にあった怖い話

#include <iostream> using namespace std; class Base { public: Base () : value_(0) {} Base (int value) : value_(value) {} virtual ~Base (){} virtual char* getName() const=0; int getValue() { return value_; } private: int value_; }; class Derived : pu</iostream>…

gotoとデストラクタときむら(K)さんの数時間

きむら(K)さんに確かなソースを示していただきました。 ちゃんと確認した(する)ということはGoodです。 でも、できればこういうのはある処理系でのみ確認するよりは、 規格をあたったほうが説得力が増すと思います(うわー上から目線w)。 まあ当たるべき規格…