2
3 :
デフォルトの名無しさん :2013/11/19(火) 09:29:24.36
STLつかうと一気に実行ファイルサイズが10倍に?! 環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
>>3 最近白髪が増えてきたが、そうか禿げるのか‥‥スッポスッポ先生にあやかれるのなら光栄だ
6 :
重要 :2013/11/19(火) 13:16:31.09
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
そうhogeか
hoge
9 :
デフォルトの名無しさん :2013/11/19(火) 18:22:16.55
hoge++
hage
dynamic_cast<Hage>("@ノハ@");
「実はhogehogefugafugaで」 「ナンダッテー」
ハードタブ派がこの世から駆逐されますように…人
還付金hoge
ハードhage
また釣りに来ないかな
#include <studio.h> main(){ printf(”konnitiwa!”); } なぜかエラーが出て実行できません!!!!!!何でですかね!!!???!?!?
int main() {
スタジオ・イオは業績不振で去年解散したじゃないか
いお?
#include <stupid.h>
#define amigo friend
社内システムを開発してるんだが、 mfcのSDIで作ってて、一つのメイン画面から20弱くらいのプログラムに遷移するようなやつで、 画面だけSDIで作ってあとは一つ一つdllにしようかと思ってたんだが、 上司がインストールとか再頒布パッケージとか嫌いみたいで、 exeだけコピーしてすぐ使えるようにしたいって言ってんだわ…。 だから.netも論外みたいな感じなんだが、UIは簡単に作りたいからmfc使えみたいな分けのわからない話なんだが dllに小分けしようにも再頒布無しじゃmfcをスタティックリンクするしかないと思うんだけど、 そうしたらdll一つでメガ単位になるんでなんだかなぁ・・・って感じなんだが なんかいい方法ないですか? もういっそ1つのプロジェクトに全部詰め込むしかないかと思ってるんだけど、 ソース多くなると重くなるしメンテもめんどうだし悩んでるんだが、 みんなはどんなふうに開発してんの? やっぱdllに小分けしてるの?
もはやスレ違いだが、前スレ 930氏に聞きたい。 > 930 名前:デフォルトの名無しさん[] 投稿日:2013/11/19(火) 00:50:35.25 > staticにする必要ないだろ > WM_なんちゃらって書いてるって事はメッセージループ周ってるんだろうからループスコープの外に書けばいいだけ。 ループスコープの外っていうとWinMainだと思うけど、そのなかに置いたオブジェクトをウィンドウプロシージャに どう渡せばいいですか? Windowsプログラムは全然シロートなんで標準的なやり方があったら教えて。
25 :
重要 :2013/11/19(火) 21:40:36.32
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
hog.e
WM_なんちゃらとか書いてるから素人だな プロならWM_hogeと書く おおかた、グローバル変数で渡せとか言うんだろ
28 :
重要 :2013/11/19(火) 21:58:41.49
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
また荒らし始めた
相手にするなって書いてるくせに反応しすぎだろ
31 :
デフォルトの名無しさん :2013/11/19(火) 22:05:01.16
受験番号(int)と成績(double)のペアが複数あった場合、成績順に 受験番号を取り出したい。STLでさくっと頼む。 ここんとこC++やってなくてすっかり忘れてもたw map<>にpush_back()してsort?
成績がdouble
別にshortでもいいけど、同じならわかりづらいかなと思って。
vectorで十分じゃないか
ペアって言ってんだからpair使えば
受験者構造体を作ってそこに大小関係を定義してvectorでsortしたくなるが
37 :
デフォルトの名無しさん :2013/11/19(火) 22:16:11.52
unordered_map<>::insert make_pair sort
vector<pair<int, double> > hoge
おぉ、サンクス。 しかし、そのfor文は何w 最近の仕様?
あ、やっぱ受験者名も追加してくれ。とか言われるんだろうな
>>41 言わないから。
しかし、emplaceってのも最近? STLに前からあった?
うーむ、g++4.8以降くらいじゃないとサポートされてないのか。
STLってなんですか?
standard template libraryの略。 std::vectorなどのテンプレートクラスを集めたライブラリ。 今はC++の一部になっている
>>39 ってC99だとどう書くのが一番シンプルに済むかな。
>>42 C++の新しい規格C++11によって言語仕様、ライブラリに多数の追加変更が発生した
このfor文はrange-based forといい、コンテナ全体を走査する事が出来る 内部的にはイテレータをbeginからendまで回している
std::map::emplaceもC++11で追加された関数で、与えられた引数からpairを構築し、コンテナに挿入する
そのforはいただけないね。まぁ並列化を意識したのかもだけど。
g++って最新バージョンいくつ? 最適化にも少しは力入ってるのかなぁ。
>>24 そのループがwhile( xxx ) だとして、その直前に書けばいいだけ。
なんでわかんないの?
>>45 >今はC++の一部になっている
どうしてこうも平然と嘘がつけるのか
>>50 ウィンドウプロシージャやそこから呼ぶ関数にどうやってポインタ渡すかって話じゃね?
STLという言葉を使う人って頭悪そう ということだな
55 :
デフォルトの名無しさん :2013/11/20(水) 01:07:06.48
>>51 嘘じゃなかんべ、コア言語の規格票に書いてあるんだから
# 私見ながら、ライブラリは別規格とし、コア言語ではあくまで例示にとどめて欲しかった
毎回この流れは止めて欲しい 「そんなことが規格の何ページに書いてあるのですか?」 ↓
std::emplaceを使ってstd::mapに要素を挿入した場合とstd::pairを挿入した場合は速度違うかな? 大きなオブジェクトだとコピーしないから違いが大きくなりそうだね
>>57 コピーコンストラクタ一回分省略できそうな気がするけど
RVO/NRVOで結局同じになるんじゃないかとか思うんだがどうなんだこれ
C++11って最近どうなの 仕事で使ってる人いる?
60 :
デフォルトの名無しさん :2013/11/20(水) 02:06:58.76
使えるときは普通に使ってる
61 :
デフォルトの名無しさん :2013/11/20(水) 02:16:10.98
>>60 同じく
使うつもりだった C++11 が NG だと、割れ泣き濡れて蟹と戯る・・・て感じ
新しい機械のコンパイラだと使えるんだけど、まだしばらくは古い機械も扱うし 使いたくても使えない感じ。あと6年くらいしたら使えるかなぁ…
調子乗ってラムダ式よく使うけど使わない方がスッキリしてることが多い
慣れてくるとだんだんラムダ式が長くなるよな そして最後に()を付けてその場で実行したり
でも確かに int speed[16] の順に int HP[16], MP[16] を並び替えるとかのとき えっそのためだけに構造体を定義してコピーして…?って悩むことが有る そしてその場でバブルソートを書いちゃうこともある
emplace_back使うと速いから、 理由はemplace_backは右辺値をコンテナに直接追加するけど、 push_backやinsertは一端右辺値を作って、その右辺値をコンテナにコピーしてコピーコンストラクタを発生させるから
>emplace_backは右辺値をコンテナに直接追加 え?
誤 emplace_backは右辺値をコンテナに直接追加する 正 emplace_backは右辺値をコンテナに直接追加できる
ほー おもろいな
そのためのものが理屈通り動いていることの確認の 何がおもしろいのか
KY発見
これ位って、コピーコンストラクタで800KBをnewしてコピーするのは割と重い部類だぞ
何をしてるのか分からない癖に口出すなよ
74が何を言ってるのかが分からないな
>>69 これのdist(twister)って何やってんの?
distって変数..じゃない何かなのか
&&とか、色々拡張されちゃってるんだねぇ...
>>66 中で右辺値を追加って、どういう機構ですか?
単にpairのコピーがないから速いのだと理解してましたが.
最近大学でバリバリのC言語習ってるんだけどC++に慣れてると微妙な書き辛さに原辰徳だわ 特にfor分の最初でi初期化出来ないのが一番悲しい
>>78 いや、内容的にはだいたいわかったんだけどdistってclass定義だったのか。
class templateだとか、もっとわかりやすい名前にしてほしいな。
>>80 なんだバリバリのC言語って。
Cなんて今時8bitマイコンくらいにしか用途ないんじゃないか?
82 :
デフォルトの名無しさん :2013/11/20(水) 14:54:19.62
linuxもtorもバリCだろ
>>81 >内容的にはだいたいわかったんだけどdistってclass定義だったのか。
>class templateだとか、もっとわかりやすい名前にしてほしいな。
とりあえず関数オブジェクトでググったぽうがいい。たぶん理解できてない。
84 :
デフォルトの名無しさん :2013/11/20(水) 14:57:04.47
BSDなんか標準言語がCだわ
>>83 あぁ、そんなのあったな。くらいの理解だわ。
そういう小手先系は理解するまでが面倒なので放置してるわw
>>66 >>77 ですが、やはりコピーコンストラクタは呼ばれてますね。
>>69 はコピーなしにコンテナに入るから速いのではなく、
コピーが1回分減るから速いという事を確認しました。
コピーそのものは発生してます。
88 :
重要 :2013/11/20(水) 17:23:11.13
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
89 :
デフォルトの名無しさん :2013/11/20(水) 17:45:24.18
hogeが禁止になったら次はmogeを使いましょう。
hoge moge ↓ ↓ hage mage
講師の頭が固くてC89縛りなんじゃね?
C++11はみんなバリバリ使ってるっぽいのに、C11は話題にもならんな まあCなんて組み込みかOSカーネルくらいだし、C89で十分なんだろうけど
まだC99すら広く受け入れられている訳ではないからな
96 :
デフォルトの名無しさん :2013/11/20(水) 18:13:51.34
名付ける必要のない識別子を例示する時にhoge以上に適切なメタ構文変数はありません 日本語なのでかなで「ほげ」としたいところですが、 これがサンプル中に出てくると非常に紛らわしくなります int ほげ=10; extern int はげ(int); int ひげ=はげ(ほげ); わかりにくいですね int hoge=10; extern int hage(int); int hige=hage(hoge); なんとわかりやすいのでしょう。というわけで名付ける必要のない識別子にはhogeをつかいましょう foo, barなどいういう軟弱なメタ構文変数とちがいhogeシリーズは hage, hige, huge, hege, hoge と何も考えずに5種類もつかえます。 hogeを使いましょう
hogeもいいけどhageもいいよね
int var1 = 10; extern int func1(int); int var2 = func1(var1); この方がマシ。他人に説明するのにホゲは不適切。
hageには理解できないコードだからな
hugeは使えない
なんでC90でなくてC89なんだ
F-90ではなくF-91が如し
Toccata und Fuge
BWV578
105 :
デフォルトの名無しさん :2013/11/20(水) 20:21:56.31
VC++2008を使っており、オライリー・ジャパン社から出てる 「ゲーム開発者のためのAI入門」のサンプルを実行したら こんなエラーが出て、実行できません 1>リンクしています... 1>LINK : fatal error LNK1104: ファイル '..\..\VC98\Lib\USER32.LIB' を開くことができません。 VC98ってなんですか?ファイル検索しても全く見当たりません
俺が昨日掃除機かけたときに吸い込んじゃった
>>105 VC6(1998)のような気がするが何年前の本?
データベースからのデータの取得を主にしたクラスを作りたいと思っているのですが、 それぞれ取ってくるテーブルが違う場合、 取ってきた値群の取扱いについてアドバイスをください。 今現在、クラスを一つ作ってその中にそれぞれデータべースから 値を検索してリストで返すメソッドを作ってあります。 それぞれのメソッドには参照渡しで渡して返しているのですが、 この作りだとそもそもクラスにしないで関数でいいじゃないか?と思うんですが、 オブジェクト指向についてまだまだ勉強不足なもので、 みなさんならどういったクラス設計にしますか?
作らないな だってデータベースほど共通化した処理ならsqlのラッパなりなんなり腐るほどあるじゃん
>>85 ちゃんと理解しておいた方がいいYO
なんでかっていうと多くのライブラリ関数等が「3番目の引数に関数オブジェクト(/ファンクタ)を入れてね」
って言ってるからさ。
main.cppで sys.title = TRUE; sys.wait = FALSE; sys.scene = 1; main.hで class System{ public: bool title; bool wait; int scene; }; extern System sys; とやってるんですが、main.cppで「定義されていない識別子」エラーが出てしまいます・・・ 他のファイルでは同じように書いて問題なく使えているんですがどうしてでしょうか。
System sys; がどこにもないからだろ。 しかしbool型に TRUE/FALSE て
>>112-113 すみませんおかげで解決しました
これに気付かないとか正直ひどすぎましたもうしません
115 :
デフォルトの名無しさん :2013/11/20(水) 22:42:08.45
派生クラスを複数作って処理をしていった場合 基底クラスのメンバー変数とかは使われず無駄になることない? C++はこういうものなの?
全く意味がわからん コード貼れ
クラスのスタティックメンバ変数ってものを宣言することある? -- Amigo.h -- class amigo { static int count; public: /// }; -- Amigo.cpp -- int Amigo::count = 0; ヘッダにそんなもの書く必要がある場合ってある? 俺には思いつかない。
基底クラスのメンバ変数無駄にするような派生なんてしないほうがいい
せやな そんな設計で基底と矛盾がないように作られてるとは到底思えんし
あれだよ、例えばほら、Javaではすべてのオブジェクトでsynchronizedできるようになってるけど StringオブジェクトとかIntegerオブジェクトでsynchronizedする人なんていないから そういう情報を基底クラスに持ってても使われなくて無駄だよね、とかそういうことじゃない?
>>111 そりゃTRUEというものがどこにも定義されてないからな
>117 Win32API使ってるとたまに遭遇するけど、追加の引数を渡せないコールバック関数をstaticメンバにして それに何かデータを渡したい場合とか。
あー…あるある。SetWindowsHookExとかな
125 :
121 :2013/11/20(水) 23:11:03.56
>>122 え、じゃねーよ。
識別子が定義されてないんだからリンクエラーじゃなくて
コンパイルエラーだろ。
このコードでコンパイルエラーになるところはそこしかない。
>120 >115は「変数」と申しております。
>121,125 >111-114
>>123 いやそうじゃなくて、ヘッダにわざわざ書く必要があるかってこと。
Amigo.cpp に
namespace {
int Amigo_static_count = 0;
}
を置いてそれを使えばいいじゃない。
get, set系をstaticメンバにすればいい。
ヘッダにはたとえprivateでも極力なにも入れたくないし。
俺はC++のヘッダはクラスの設計を俯瞰するように書くものだと思ってるんだが そんなにprivateを書くのが嫌ならインタフェース化しろよ
>>115 基底クラスでちゃんと使われていて、派生クラスで意識しないうちに使われてるだけ、っていうことじゃないの?
本当になにも使われないパターンだってありうるだろうけど。
>>129 privateは設計とは言えないなあ。
実装の詳細であることが多い。
pImplなんか極力その方向に持っていこうとした現れ。
>>129 インターフェースとは何ですか?
規格の何ページに書いてあるのですか?
まあ private static 変数は無名名前空間に持っていっても 大体の場合は大した問題はないよな まあ精々 .cpp が複数になった時に便利な程度
どうやって実現するか、は他人に見せる必要はない。 pImplだって本当は何の痕跡も残したくないのだが、何もないわけにはいかないから しょうがなく不完全型のポインタという形でごまかしてるようなもん。 staticメンバなら本当にヘッダから排除できるからそうするに越したことはない。
private static な方が便利、ね でもそういうケースはゴッドクラス化してる恐れがある
privateメンバは全部pimplで隠しちゃえばいいってじっちゃんが言ってた ヘッダに書いてたって意味ないし
privare static でオープン配列はよく使うけどな メンバー関数のポインタの排列とかも作るし
pimplはなんか嫌 スタイルのために他の色んなものを犠牲にしてる感じが。
ぴんぷるぴんぷる
private staticってコンストラクタの呼び出し回数数える時とか便利じゃない? そういう問題じゃないのか
>>142 それヘッダに置かなくてよくね?
ソースに置くならメンバにする必要なくね?
って問題
クラスに入れたいからそうしてんだよ いい加減理解しろアホ
>>144 クラスに入れたいときってどういうときなんだよ
入れないと困るパターンを一つでもあげてみろ
まあセンスなんて人それぞれだし 個人的にはprivate static変数って初期化方法からして何だかなって思うけど
ヘッダだけで書きたい場合(例:template)とか。
>>143 テンプレートクラスのとき、どうするの?
>>145 あるクラスに密接に関連していて
クラス外から見える必要のないものが
クラスに入ってないと気持ち悪いだろ
なるほど 具体例挙げていただけると助かる
151 :
150 :2013/11/21(木) 00:03:23.34
templateの方ね
>>148 そんときゃ入れればいいだろ。
原理主義じゃないんだし。
SLTやboostでstaticメンバを持ってるクラスってなんかあったかなあ・・・
そんな二大ゴミライブラリを挙げなくても
>>135 オレ前にpimplの痕跡を消そうとしていろいろやったけど断念した。
効率よくやるのはムリポ。
stlとboostを否定する奴は老害だ。 C++11を否定する奴もまた老害だ。 見かけ次第Pから排除しろ。
>>154 あなたの思うゴミじゃないライブラリって何?
STL? 15年くらい前にそんなの有ったね
チャラい若造に、STLってSimpleTemplateLibraryって割に、全然シンプルじゃないですよねーwwwww って言われたんだが、このクソゆとり野郎って思った私は老害なのでしょうか?
vectorとか使わないのか
思い至らなかっただけだろw つまり、そういうことだ。
理論w
インライン関数も同じだな
>>155 class WithoutPimpl {
public:
WithoutPimpl(int p, int l);
int prop() const; //コンストラクタで受け取ったpを返す
int lean() const; //コンストラクタで受け取ったlを返す
};
これをやりたいってこと?
ちょっとでも適用できないパターンがあったらそのアイデアはゴミだ そういうもんだ
STLってStandardTemplateLibraryって割に、 全然Standardじゃないんですよねーwww
Standard Traditional Library
C++関連NGワード: STL
.cppにコード全部書けば、IDEなりコンパイラなりが公開すべきpublicな部分だけを 抜き出して.hppへ出力してくれれば便利だと思う。なんでそうなってないの?
そんなことしたら多重定義です
>>172 お前がまだ標準化委員会に提案していないからさ。
exportを指定する構文がないから、全部exportする事になってしまう
pimplか、初めて見た時はヘッダにpublicメソッドとimplポインタがあるだけで何がどうなってるのかイミフだったな、何もかもみな懐かしい。
>>143 テンプレートクラスの場合はヘッダに置くしメンバーにもする。
しかしテンプレートクラスでなければヘッダには置かないしメンバーにもしない。
てことだよな。
なんでそのクラスがテンプレートであるかないかの違いだけで
そこまで大きく流儀を変えなければならないんだ?
Pimplって、なんかバッドノウハウ感が漂うんだよなあ。いや使ってるけどさ。
STLってSexTechniqueLibraryって割に、 先輩まだ童貞ですよねーwww
Sしかかかってないのと、あとLはもうちょっと頑張れ
>>177 それはpimplだって同じことだよな。
やっぱバッドノウハウなのか?
俺はprivateメソッドもなるべく消してるよ。 メンバ情報を使って計算するってだけならcppの中のフリー関数で間に合うからな。 あとpimplポインタを消そうとしたこともやっぱりあるw ひとつぐらいそれで動いてるやつあるかもw
183 :
デフォルトの名無しさん :2013/11/21(木) 07:08:52.99
pimplってpimple(ニキビ)とpimp(売春婦のヒモ)のどっちのこと?
>>177 「流儀をそろえる」ことよりも、実務的に「再コンパイルの発生を抑える」ことのほうを優先すれば
そうなるでしょ。
pimpl使うと他の人に読みにくいって言われるから使えない
実際のメモリ配置を考えるとprivate static変数はやだな privateをpimplまで隠しきるのも嫌 オブジェクトのサイズが増えるんだから再コンパイルの発生は必然で それを意地でも抑えたいほどコンパイルが激遅いことはもうあまりない
>>182 factory使って実体を作って返したりしてみたわ
voidポインタにしたら完全に型情報は隠蔽できる
型名を変更したくなっても再コンパイルが必要ない
192 :
デフォルトの名無しさん :2013/11/21(木) 07:45:18.24
ファイルスコープにローカルなクラスを作ればよくね? つーかpimplが嬉しいってことは、そのクラスがでかすぎるってことじゃね?
>>191 外のクラス名を偏向せずにpimplの型名だけ変えたい理由ってなに
>>192 > ファイルスコープにローカルなクラスを作ればよくね?
それがpimplじゃいー
ヘッダにユーザーが使えないprivateを書くことを、具象クラスだから仕方ないと思うか、許せないかの違い 再コンパイルしないでいいってのは副産物
>>195 再コンパイルの発生以外に「許せない」っていう根拠あるの?
理由も無くpimplの型をvoidで書いてたやつはちゃんと人に見せる前に直しとけよ
198 :
デフォルトの名無しさん :2013/11/21(木) 08:12:04.47
オバQポインタまたはpimpヒモ野郎か。 バッドイディオムな響きだな。
>>194 後者の方が筋が良さそうに思えるが、外人的にはどういう結論になってるの?
CでOOPやったときはpImplみたいな書き方したな。 C++になってもまだこんなののお世話になるとは思わなかった。
>>199 使い分け派3名
よく理解してない1名
単に解説している1名
pimpl派1名
純粋仮想派2名
ってところ
>>199 up voteが一番多い回答は
C#の「値型」「参照型」みたいな区別をして、「値型」のほうにはpimplを使い、「参照型」には
pure virtual を使う。ただし「値型」のほうはわざわざpimplを使うほどのものでないことが多い。
って感じ。
>>201 なるほど、とりあえずpimpl派には勝ったってことで納得しとこうw
>>203 使い分けしろって書いてるのに勝ったも糞もないわ
>>204 >ただし「値型」のほうはわざわざpimplを使うほどのものでないことが多い。
>>205 そのpimplを使うほどの物ではないものはpure virtualにするか迷うようなものでもない。
使う機会の多さで勝ち負けを決めるんならpure virtualの方が勝ちということでいいけど。
そんなに使う機会が少ないならルールで禁止するか空気読んで使わないな 記法的にかなり異質だし。
そのクラスの挙動を隠したいならpure virtual 挙動は明確だけど実装方法を隠したいならpimpl 実装方法を隠したいときなんて、 名前空間がグダグダでincludeするだけで他に影響あたえるようなヘッダ(windows.hのmin maxマクロとか!)を使わないとだめだけど、 他に影響させたくないとかぐらいしかない。 そのヘッダを容易に変更できる環境ならばそっちを修正すれば事足りる。 他に使うときはヘッダ類が巨大でコンパイル時間がかかりすぎて困ってるときぐらい。
windows限定のプロジェクトなら#include <windows.h>が半ば前提だから HANDLEの類をprivateに置くとしても隠さないな マルチプラットフォームなプロジェクトならpimplも悪くないか。でもそういうのは プラットフォーム依存な型のメンバ変数なんて置かないと思う
>>209 クラスの挙動を隠蔽とか、意味が分からんのですけど?
どうやって使うんだよ。
>>209 挙動を隠蔽というのは、何をするのかという仕様を隠蔽することか?
class PureVirtual { PureVirtual(); // 生成されたインスタンスの状態は秘密です。 virtual ~PureVirtual(); // インスタンスが破棄されるかどうかは秘密です。 virtual void doSomething(int x) = 0; // 挙動および引数の意味は秘密です。 virtual int Something() const = 0; // 返される値の意味は秘密です。 };
多態のことだろ
挙動隠蔽指向設計
>>209 長々と書いておられるようだが、まず、全ての文章が意味不明
すべて同意できる俺は少数派なのか・・・ いっとくけど自演じゃないよ?
ソースが数百にのぼる大規模開発やへぼいコンパイラを使わざるを得ない環境に 身をおいたことが無いなら、再コンパイルを抑えるための実装隠蔽の意義がよくわからないのは しょうがないかもしれない。
>>218 趣味で作るプログラムでも、1日に2〜3ファイルのペースで増やしていけば、数百ファイルくらい数ヶ月で到達するぞ
C++のコンパイル時間でコーヒーを1杯作って飲み終われるとか時々聞くけど 一体どんだけの規模になるとそうなるの?
>>220 んーと
>>209 の意図と同じかどうかは知らないが(同じだと思うが)
大雑把な動き(IF仕様)は決まっているが、その動きを実現するための
実際の動作(挙動・・・っていうか実装の詳細)は利用者側に見せない、
というか意識させない、ということだろ
例えば virtual string lookupOwner()=0 の場合に
どこのDBからどう引いてくるのか意識させない、とか
pimplとの使いどころの違いは
pimplは「隠す」とか「実装を切り離す」(リビルド速いとか)とか
いうのが主眼なんだけど
pure virtualの場合は「意図させない」とか「差し替えやすい」とか
いうのが主眼になってる
・・・ってな話じゃないの?
10年くらい前に参加したシステムでサブプロジェクト50個 かつ頻繁に共通ヘッダが書き換えられてフルビルド・ビルド失敗とかあった マシンパワーとメモリが大幅に増えたからいくらかマシになってるだろうけど 構成からおかしいといくらでもそうなる
public関数とprivate関数で隠蔽の目的が異なる private関数は無くなったり名前が変わったりしても他に影響が及ばない
>>223 それはインターフェースでサブプロジェクト分離してない設計が悪い
pimplよりpure virtualやコンポーネント化すべき部分で
リーダーが馬鹿だとどうしようもないっていう普遍的な教え
>>222 pure virtual の元々の使い道はなんだろうけど、 pure virtual インターフェースクラスで
pimpl と同様に実装の隠蔽ができるんだから委譲関数ベタベタ書かなくていい分そっちの
ほうがいいんじゃね?っていう話をしてたんだよ。
×pure virtual の元々の使い道はなんだろうけど ○pure virtual の元々の使い道はそうなんだろうけど
>>222 代わりに解説ありがとなー
>>226 使い方変わっちゃうし。
std::unique_ptr<scoped_lock> lk=scoped_lock::createInstance();
とか嫌でしょ。
pimplと比べて相対的にクラスを使用する方で使いづらい(実体をそのままほかのクラスのメンバに出来ないとか)、デバッグしづらいを許容できるならいいんじゃない?
230 :
デフォルトの名無しさん :2013/11/21(木) 12:29:17.91
グーグルさんのC++コンパイルは大規模サーバ使いまくってもまる一日かかるらしい
クソみたいなOSSに依存しまくってたら膨大になるな
>>226 ああ、そういう流れなのね
で
>>194 の記事を読んできたけど、pimpleの良いところとして
・バイナリIFが安定してる(pure virtualだと変わることがある) -> shared lib分割時とか
・必要なメモリサイズが小さくてすむ(仮想関数多いときとか特に)
とか出てるね
C++なんて使うなや、って話か。
よく考えたら仮想関数の数は関係ないな 継承するクラスの数によるんだっけ? > オブジェクト毎のvtblのサイズ
235 :
デフォルトの名無しさん :2013/11/21(木) 15:05:29.01
STLのstd::stringについて、質問です。 DLL内のstd::stringと、アプリのstd::stringの実装が違う場合(つまり、STLの実装が違う場合)、 DLL内のstd::stringから、アプリのstd::stringに代入したら、アプリは吹っ飛ぶのでしょうか? >std::string sbuf = dll_object.string; みたいな。
アロケーターがあるから多分大丈夫
class string1 { size_t _size; size_t _capacity; T* ptr; }; class string2 { T* _begin; T* _end; T* _capacity; }; string1 dllstring; string2 appstring; appstring = *reinterpret_cast<string2*>(&dllstring); こんなことしたら当然吹っ飛ぶよね。アロケータを共有していない場合も吹っ飛ぶ。
そもそもリンクできなかったりしないのかそれ。
239 :
235 :2013/11/21(木) 15:56:09.67
std::stringの実装の多くは参照カウンタでcopy on writeにしてるよな その実装方法は個々の実装で差がある
241 :
235 :2013/11/21(木) 16:16:22.49
ということは、 >std::string sbuf = dll_object.string; のとき、左右のstd::stringの実装がことなる場合に、 参照カウンタの書き込みで、メモリを壊す可能性はあるのでしょうか?
>>241 どんな理由であれ、データ構造や仕様に差があったらそのデータを同じ物として使えば何らかの不具合になるだろう。
特にstringは確実にポインタを抱えてるから、
どの位置の値がどういう意味のポインタなのかに違いがあれば
大きな不具合になる。
>>240 stringのCopyOnWriteってまだしてる処理系あるの?
スレッドセーフ絡みでもう廃れた実装手法だと思ってるんだが
244 :
235 :2013/11/21(木) 16:52:19.98
>>242 なるほど、管理情報が不整合で普通に不具合、ということですねorz
>>243 今のSTLに参照カウントは無いかも、ということですねorz
ところで、アロケータというのは、不整合を回避するしくみだったりするのでしょうか?
後、全く関係無い質問ですが、copy on writeのものっていうのは、マルチスレッドで使えない、ということでしょうか?
例えば、QByteArrayは、copy on write、と書いてあったような気がしますが。。。
COWがマルチスレッドじゃ使えないってことはないよ
スレッドセーフを諦めて速度重視でCoWなstringを自作するメリットはあるわけか
248 :
235 :2013/11/21(木) 17:22:27.20
std::stringはSTLじゃないだろ
STLの定義くらいどうでもいいものも少ない
・C++の規格にSTLなんて無いぜ派 ・コンテナとイテレーターとアルゴがSTL派 ・stringもSTL、ただしiostreamは違う派 ・iostreamもテンプレートは全部STL派 ・C++ライブラリは全てSTL派 ・自分以外の共通モジュール開発担当のライブラリは皆STL派
・俺がSTLだ!
上の二つは一応説明がつくけど 他は合理的な説明がつかない
std::basic_string はコンテナに入りますか?
iteratorがあれば、入るんじゃねーのー?
南山まさかずって人がロベールは読むなって言ってたけど本当?
257 :
デフォルトの名無しさん :2013/11/21(木) 21:21:38.81
日本人プログラマの言うことには耳を貸すな
ロベールって日本人じゃね
C++よりも日本語の勉強を・・・
>>259 日本語がたいして出来ない底辺がマになるのに
C言語で会話しそうだな
262 :
重要 :2013/11/21(木) 22:59:55.68
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
結局どうなんです?
とりあえずSTLという言葉を使う人は馬鹿確定
>>264 お前一人で頑張ったって、世界は変わらんよ
その人の言うには、今時C++11じゃない本はだめだということらしいです その人は独習C++をすすめているようですけど、C++11に対応しているのでしょうか?
本なんかで対応できるのか? オレC++に10年以上ブランクがあってリハビリ中なんだけど、本で何とかなるとは思ってないな。
hageの原著読めばその人も満足じゃね
実は植毛をしておりました
C++11対応の本なんてポケットリファレンスくらいだろ 独習とか頭湧いてんのかそいつ ただ、ポケットリファレンスは初学者向きではないね
初学者でもC++やる奴は優秀でないと駄目。だからC++11対応の英語本で勉強しろってことだろ これぐらい読みこなせないとC++なんてやっても駄目って感じじゃないか
無茶振りすぎるだろ 会社じゃ未だにC++03が使われる事が多いから、 今無理してC++11覚えても あれも使えないこれも使えないって苛つくだけだろ
273 :
デフォルトの名無しさん :2013/11/22(金) 01:08:02.56
そうだ! C++11 ならあの手があった!! ・・・孔明ぇぇぇ
>>272 優秀な奴はそんなうんこ会社にはいかないよ
前にC++11対応をうたった英語の入門書を買ったけど、 C++11はそれほど深くは語られてなかった 所詮みんなが求めてるC++11って浅いところだけなんだなと思った
better C++03か
バター
現状C++11の初心者向けの本がないから どれでも好きな本を読めば良い その人が何を考えているのかは分からないが、 ロベールは中でもいい選択肢だと思う C++11を知りたければ、その上でポケットリファレンスを読めば良い
特に信用しなくていいみたいですね 気にしないことにします
C++が既に入ってる人ならC++11は規格書読めばいい。 英語読めない人は寄付募ってた人のアレ読んで足りないとこはググれw
洋書読めるなら禿の新作A Tour of C++とか良さそうだね 200ページないみたいだし、米Amazonでの評価も悪くない
282 :
235 :2013/11/22(金) 08:54:40.70
>std::string実装の異種混合(DLL内部のせいで) >アロケー 上記の関係教えて下さいorz
既存のAPIやライブラリが要求するから仕方なくって場合を除いて、生ポインタって使う機会ある?
生ポインタ使いたくなった時
>>280 バカにしてるくせに人に勧めるってどういう
287 :
デフォルトの名無しさん :2013/11/22(金) 17:08:52.95
人という基底クラスを作り その人クラスに年齢や身長などのメンバ変数を作る この人クラスを派生させいろいろな職業の人を作っていった場合 基底クラスのメンバ変数は使わないから無駄にならない? C++ってこういうもの?
人と言う空の基底クラスをつくり この人クラスを派生させいろいろな職業の人を作っていって 必要になった時にその人クラスに年齢や身長などのメンバ変数を追加すればいいんじゃないの
290 :
デフォルトの名無しさん :2013/11/22(金) 17:18:53.25
>>287 継承したメンバがいらないのに、なぜ派生させるんだ?
>>287 年齢や身長などの基底の属性がすべて存在する場合だけ派生させる
>>287 派生の目的として再利用、拡張性、概念の整理がある以上
使用されない変数や実行されない関数があっても
何ら問題ではない
基底として利用しちゃだめとかいろいろ条件つければ 何しちゃいかんって法律があるわけじゃないしね 最高級のスパゲッティを作る可能性はあるが。
いやそれ以前にクラス設計と利用の問題だろこれ
295 :
デフォルトの名無しさん :2013/11/22(金) 18:14:37.35
職業をメンバとして扱えば。 複数の職業を持つ場合に備えてリストにしておくとか。
296 :
デフォルトの名無しさん :2013/11/22(金) 18:17:17.08
あ、もしかして多重継承恐怖症?
297 :
デフォルトの名無しさん :2013/11/22(金) 18:27:49.99
多重継承恐怖症っていうより現実派って感じかな。 無職になった時のクラスチェンジとか僧侶になりたいときとか楽だから。
298 :
デフォルトの名無しさん :2013/11/22(金) 18:30:28.14
あああ・・・ 冷たいコーヒー買ってしまった。 やてもた。
299 :
デフォルトの名無しさん :2013/11/22(金) 18:31:01.57
僧侶? 司教じゃね?
300 :
デフォルトの名無しさん :2013/11/22(金) 18:32:22.43
仏教オンラインでは僧侶なんだけどな。 ハンターの100倍強い。
>>287 C++の問題であるかのように言ってることから想像するに、
インターフェイスのようなのが欲しいってことかな?
それなら抽象基底クラスってのがC++にはあるけど。
302 :
デフォルトの名無しさん :2013/11/22(金) 20:26:22.64
よくわからん 基底クラスのデータは使わないのが普通なの?
受け取る側のことを考えればいい。 void acceptSomeOne(人& hito); という関数があるとする。 実行時には hito のところに僧侶や予備校講師が飛び込んでくるんだ。 acceptSomeOneちゃんはそれで満足するか? そういうソフトウェアだったら問題ない。
>>302 いくら派生クラスから直接使わなくても、
基底クラスのインターフェース通して使われるわけだが。
>>287 いろいろな職業の人を作ったら無駄になるってところがわからないんだが。
職業ごとに年齢や身長を調べたい場合には使うだろ。
てか、人クラスを例に継承して云々てスゲーよく見かけるけど、ホントのとこ全然実際的じゃないよね? 例え話だからって言われたらそりゃそうなんだけど、実際だとモノフィックなデータクラスとして書かない? どうせDBからデータ読み込むんだろうし、ポリモーフィックなクラスの例として適切なのか?ってよく思う。
>>306 >>303 の言うように、人を参照してる関数とかが僧侶や予備校講師を受け取って
何か意義のあることが できるんだったら適切
ウチの会社だと新人研修では車クラスでお勉強するね インターフェイスと大まかな仕様だけ渡して3Dで表示、操作できれば本採用
Javaが出たての頃に買ったJavaの初心者本も車だった気がする。 モデル化やオブジェクト指向の例としては、車の方が適切だと思うんだけど、現実にソフトとして作る可能性が高いのは、人間に関するデータ処理の方だったりするよね。
310 :
デフォルトの名無しさん :2013/11/23(土) 10:09:40.86
ゲーム系ならキャラクターを派生してPC,NPC,モンスターとか
職業の扱いは、人の持つスキルやプロフィールなのか、とある個人なのかでかわってくると思うね。 そのあたりで、なんかすれ違ってないか?
どれとどれかすれ違っているのだろう 別に議論しているわけではなくて、各々思うところを述べているだけに見えるけどなあ
複数の職に就いている場合はどうするのっと
314 :
重要 :2013/11/23(土) 12:01:56.43
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
hoge
モデリングなんて着目する主体によるし、 人クラスそれ自体、分野で扱うものが違う。 ここで議論する話じゃない。
317 :
デフォルトの名無しさん :2013/11/23(土) 12:48:05.65
名付ける必要のない識別子を例示する時にhoge以上に適切なメタ構文変数はありません 日本語なのでかなで「ほげ」としたいところですが、 これがサンプル中に出てくると非常に紛らわしくなります int ほげ=10; extern int はげ(int); int ひげ=はげ(ほげ); わかりにくいですね int hoge=10; extern int hage(int); int hige=hage(hoge); なんとわかりやすいのでしょう。というわけで名付ける必要のない識別子にはhogeをつかいましょう foo, barなどいういう軟弱なメタ構文変数とちがいhogeシリーズは hage, hige, huge, hege, hoge と何も考えずに5種類もつかえます。 hogeを使いましょう
>hage, hige, huge, hege, hoge なんか,hage先生からhageってしたかったけど さすがにこれじゃひどいからって、一文字変えてhogeにしたって感じだな
人クラスに職業持たせて各職業ごとの処理が必要なら その時々でダブルディスパッチ実装で良くね?
321 :
デフォルトの名無しさん :2013/11/23(土) 19:36:46.77
プログラムを作りやすい時代になったよね。 昔は、作ってて問題があると専門書を引っ張り出してきて探しまくってたけど今は殆どの問題は「ネットで検索」で解決出来るもんね。 結構面倒?難しい?問題だと、海外サイトじゃないとヒットしないのが玉にキズだけど。
その分知らなくちゃならない知識も増えた 昔の人は選択肢少ない分だけ楽だよ 羨ましいね簡単そうでさ
グーグルの逆引き能力が高すぎて書籍の立場がなくなりつつある。 電子書籍が統一フォーマットになって電子書棚全体に対して全文検索できるようになったら 書籍の復権もあると思うんだけどな。
てか、月額1千円とかでオライリーの電子書籍が読み放題/検索し放題ってサービスやってほしい。 全部が無理ならC++関連のみとか、JavaScriptのみとか、カテゴリ分けしてもいいから・・・・・・
オライリーは著者のオナニーがうっとおしい 眈々と必要な情報を体型的に並べてくれりゃいいのに
月1000円なら年12000円分の書籍買った方がいい
2-3冊しか買えねーじゃん
本はその一部分が必要が為に買ったりするから結構な数買っちゃう
本が置けなくなったから倉庫物件買いました
>>326 月1000円は書籍代というより有料情報の横断検索代と思えば別に高くない。
専門書・論文は会社で色々買ってもらっているだろ 専門書すらたいして買ってもらえない底辺企業・学校にいるから自腹なのか
システム開発が本業の会社とは限らないだろ? ソフトウェアなんて今や社会のあらゆる場所で使われてるんだからさ。 ユーザー企業にだって規模が小さいだけで本格的なプログラムを作っている人間はいくらだっている。
>>332 プログラムを作っている奴がいるならユーザー企業でも買ってもらえるだろ
ユーザー企業で本格的なプログラムを作っている奴は開発ツールも自腹なのか
334 :
デフォルトの名無しさん :2013/11/23(土) 22:43:22.13
>>324 Safari Books Onlineは40ドルくらいだから試してみたら
大学生は買ってもらえない って思ったけど大学生なんてC++入門書一冊あれば充分だな
どっかの会社でオブジェみたいにオライリー全種制覇とか紹介されてたなw 月額1千円のサービスってのは、エバーノートの全文検索機能便利→自分でスクラップしなくても どこかの誰かが優良な情報のみを選りすぐって全文検索サービスを提供してくれたら有料でも 利用するのに→オライリーの電子書籍に全文検索エンジンを組み合わせれば直ぐにできそうじゃね? って思っただけなんだけどねw
年に1冊もあれば十分、という人なら買ってもらう本だけでいいんだろう。
会社側でオライリーと契約して職場では読み放題というのもある
>>338 紙の書籍では検索できないし、一度は通読して大体でも何がどの本のどの辺りに書かれてるか
把握しておかないと役に立たないとまでは言わないまでも、少なくとも効率的には利用できない。
グーグル便利すぎ!に対抗するには、電子書籍化+書籍境界を越えての全文検索機能は
必須だと思う。
>>333 開発ツールはまとめて購入するだろうが書籍は認められにくいだろうね。
契約で読み放題っていうのは電子書籍の方ね 紙で読み放題っていうのは殆ど聞いたことない
>>341 そんなのあるのか、知らんかった。
だったらもう既に全文検索エンジンと組み合わせて独自のオライリー本検索システムとか
作ってる会社もありそう。羨ましいぞ
344 :
デフォルトの名無しさん :2013/11/24(日) 02:37:21.89
隣の芝は青い
pure virtualだけのインタフェースクラスを作って、同時にそのデフォルト実装クラスも 用意したとき、それらを同じヘッダに入れる? たまにカスタム化した実装クラスをつかうかもしれないけど、 ほとんどの場合はそのデフォルト実装クラスを使う、という前提で。 あと、そのためのfactoryクラスはどうしてる?
>>335 大学図書室とか所属研究室で頼めば買ってくれるしょや?
operator==が実装されてるクラスのswitch構文てサポートされんかな
switch構文てウィンドウメッセージの処理ぐらいにしか使わないだろ? クラスでの需要ないから
非プリミティブ型リテラルの生成規則を厳格に定めてからだね ==(classType, primitiveType)ならばクラスにこだわる必要ないし
>>345 同じヘッダに入れてもファイル数を減らすだけの効果しかないだろ。
>>345 その前提だったら同じヘッダに入れる。
factoryもインタフェースだけ入れる。
switch要素のバリエーション増やして何が嬉しいの?
switchにoperator==による同値判定ロジックを使いたいってことだろ 別におかしな発想ではない 今さら互換性で無理なんだろうけど
elseifの代わりならmapに入れておけ JavaScriptのような仕様は使いにくい
ちょっと言葉足らずで言語批判っぽくなってしまった JavaScriptのswitchはジャンプテーブルでないので、 C++でそれをやると2つの意味をもつ事になって使いにくくなる
switchは構文がおぞましいから使わない
switchは仕方なく使うもんであって、使えるパターンを増やしてどうする、ってことだろ。
switch使うやつは大罪人
switchはマジ使わなくなった 昔は連発してたけど
Cじゃないと使わないな
fallthroughをコンパイラスイッチで禁止できればこんなに嫌われずに済んだろうに
そんなことしちゃダメだろ
364 :
デフォルトの名無しさん :2013/11/24(日) 15:45:24.40
有名どころのSNS(mixi、Facebook、Twitter、インスタ、flicker)レベルのややこしい仕組みのシステムをC++で書いたら早くならないの?
switchはループと組み合わせるとbreak/continueの対称性が壊れるのが美しくない
enumのswitch分のcase漏れをコンパイル時エラーにしたいんだがいい方法無いだろうか
ちょっと言い直す、 switch文に限らず、enumの条件網羅をコンパイル時に保証できるようにしたいんだ。
switchはifより速く動作させられるコンパイラ、CPUは稀とおもう。 これでいいだろ。 do { if(・・・) { ・・・ break; } if(・・・) { ・・・ break; } if(・・・) { ・・・ break; } } while(0);
>>366 -Wallにすれば警告が出る。エラーにしたければ-Werror。
って、普通こんなのデフォ設定だろ。
>>367 ifで網羅チェックとかアホか。
>>368 switch文は定数だからオプティマイズが効くわけだが。
>>362 それがないswitchなんて意味がない
最初からハッシュテーブルに詰めろ
>>368 オートフォーマットと相性悪いし1行に複数文は置きたくない
そしてbreak使いたい(そしてgotoを避けたい)がためのこのdo/whileの使い方嫌いだ
>>369 アフォ
>>366 はどう読んでも
enum { hage, hige, huge, hege, hoge};
switch(hogehoge) {
case hage:
case hige:
case huge:
case hege:
default:
}
でチェックしたいという事だろ お前の読解力の無さにはびっくりだよ
>>372 こっちがびっくりだよ。
マジならこんなレベルのやつとは関わりたくないもんだわ。
374 :
デフォルトの名無しさん :2013/11/24(日) 16:19:43.31
>>364 FacebookはPHPから移行してる。新規はD言語とかも
375 :
366 :2013/11/24(日) 16:23:38.73
>>369 default無くしたら-Wallで警告出た、
default書くのが癖になってたんでこれ知らなかった、サンクス。
>>367 型のパターンマッチだけならあるんだけどなあ
網羅は無理そう
QACとか使えばできるだろ。
値の衝突がありえるから構文解析無しではスクリプト生成でさえ無理だね。
アホ自慢はいい。 同じ値使ったらコンパイラがエラー出すわ。
生成物手動修正自慢は市んんでて下さい。
なんかQACとかも知らないアホが混じってるな。
むしろツール使わないとできないの?って言いたい。
QACって何?
そんなお前はハンドアセンブルしとけばおk。
コンパイラって何ですか?
ライトついてますか?
オプション変更で済むのにツールやライブラリを使う馬鹿
静的解析やっといた方がいいぞ?w まぁほとんど無意味なことも多いが何%かは本当のバグのこともある。
Sonarとか別に使ってるから 最近知って舞い上がってる新人君か?
使ってたらそもそもこんな話は出ないだろ。
だから使う以前の話だろと
ところでSonarってQAC++の代わりになんの? QACのレポート何万件か潰したけど無料でもっと品質いいレポート出してくれる なら使ってみるわ。
濃さによるが代替は無理だな まあ気になるなら使ってみ
>>387 ライブラリーは関係ないだろ。
まあ、言ってることには同意する。
>>392 Sonar って、CodeSonar のことか?
なら、QAC++ の代替えは無理。
同じ静的解析だけど、方向性が違う。
QACの代わりがオプションで済むとか思ってるやつのことは何も信じられないwww
>>366 gcc なら -Wswitch-enum もある
-Wallに入っている。
PGReliefっての使ってる やっぱQACのがメジャーだわな
>>395 誰もそんなことは言ってない。
>>366 程度ならオプションで済むと言ってるだけ。
QAC 出してきた奴は、 最近知って舞い上がってる新人君。
つか、そんな理解力だとマに向いてないぞ (w
QAC使ったこともないやつが言いそうなことだな。
Gimpel1C-lintには長いことお世話になっているけど codeSonerの方がよいですか?
スレ違い。
>>402 Gimpel1C-lint は初めて聞いたのでよくわからんが、取り敢えず営業に電話して CodeSonar 試させてもらえばいいと思うよ。
>>397 -Wswitch と -Wswitch-enum は別だよ
Eclipse+Javaだと色々無料で揃うのに、C++さんときたら……
vsただで揃うだろ
410 :
288 :2013/11/25(月) 14:25:40.32
>>292 の言う通り
ソースをキレイにするために
基底クラスのメンバー変数や関数は使わなくてもOKってことで良い?
411 :
デフォルトの名無しさん :2013/11/25(月) 19:29:48.16
IT関連物は日本人製がNo1だよな お前ら見たいな超すごいのが気合を入れ開発しているから当然か GCC・LLVM・Clang・VS・Javaとかなんかも実質は日本人が開発って言われているし
どこの妄言がソースだ?
日本人は最高 チョンは消えろ
起源説
アイム・ザッパニーズ!
>>409 わざわざありがとう。
ところでこれって、日本代理店あるの?
直接購入?
>>417 昔4oftech とかサザンパシフィックが扱っていた
バージョンアップは直接やりとりしています。
>>418 なるほど、うちだと適当な商社通して買うことになるかな。
使い勝手とか、検出能力とかはどう?
ちなみにうちは、PG-Relief がメイン。
オプソ系はコミッターの国別統計取れば分かりそうではある、取れればだけど。
>>420 オプソ系の貢献は日本企業が強力サポートしている関係で
日本がかなりの割合占めていると言われている
工作員おつ
黙れ朝鮮人
424 :
288 :2013/11/26(火) 13:31:06.93
>>292 の言う通り
ソースをキレイにするために
基底クラスのメンバー変数や関数は使わなくてもOKってことで良い?
必要あれば使うしなければ使わないだけ
利用されないのならそもそも基底に入れているのが間違い。
427 :
デフォルトの名無しさん :2013/11/26(火) 17:04:07.77
メタボ基底
別に使うかどうか分からなくたって「人クラス」にそれにふさわしい属性データがあったって良いと思うけど
あ、そう。
>>424 逆に駄目だというならその理由を示すべき。
A「再利用、拡張性、概念の整理を優先させたために
未使用の変数が存在しています。
何か文句はありますか?」
B「それはダメ」
A「根拠は?必然性は?」
B「…」
メ、メモリの無駄遣い…
432 :
デフォルトの名無しさん :2013/11/26(火) 19:00:58.50
必要になるまでそのクラスって作らないっしょ? 必要となったときに必要なだけの状態であればいいのでは。
433 :
デフォルトの名無しさん :2013/11/26(火) 19:02:11.47
継承には強い合理性がいるってことだね
男にだって乳首はあるんだ気にするな
乳首弄られたら気持ちいいだろ
そのクラスが、開発するアプリ用として作るのかライブラリとして作るのかで変わるかな。 アプリ用だったら、使わないのに実装すると、テストから漏れて、後々に引き継いだ奴が 既存実装を使おうとしてこけるとか。
MFCのSDIでのスクロールについて教えてください 100*100で10行テキストが入るCScrollViewに、 onDrawで int x = 0, y = 0; for (int i = 0; i < 15; i++) { CDC.TextOut("xxx", x, y); y += 10; } として画面外まで描画した後、 SetScrollSizesで100*150とセットしてスクロールさせるようにしているのですが、 これだと当然ですが画面全体がスクロールしてしまいます。 上3行固定で下の7行をスクロールしたいんですが、(Excelのウィンドウの固定のような感じ) どうしたらいいんでしょうか?
スレチ
>>432 は継承などなしに
全てを詰め込んだ巨大クラスを作り出すタイプ
>>438 C/C++スレがhoge禁止になって機能しなくなって
C++ってことで仕方なくこのスレなんだろ。
apiに続いてC/C++スレまで基地外が原因で機能しないからな。
そして、hoge基地の次のターゲットはここだろな
適切なのはC/C++スレでもなくMFCスレなんですがそれは
hoge禁止になったからスレが機能しなくなったとか hogeキチガイは頭がおかしいにも程がある
個人的な思い込みに基づいて"hoge"の使用に過剰な反応をする人がこのスレに住み着いていて、 最近は「hoge禁止」がスレ住人の総意であるかのように見せる工作を繰り返しているようです。 あまり気にしないでやってください。
いいからキチガイは完全スルーしろよ
先生方、素敵なhoge++を見せてください
お前、知能低すぎ。
歯毛
阿保毛
451 :
デフォルトの名無しさん :2013/11/29(金) 13:17:36.07
委譲で生成したクラスは 委譲をした元のクラスを解放すれば解放される? newで生成してるからdeleteしなきゃダメ?
newしたらdeleteしなきゃダメに決まってんだろが
つスマートポインタ
コマンドライン引数で得た数値を配列の要素数にしたいのですが const a = atoi(argv[1]); int b[a]; これだと「定数式が必要です」というエラーになります どうしたらいいでしょうか
vector使っとけ
「定数式が必要だっつってんだろが」
>>454 C++はC言語と違って配列のサイズはコンパイル時に決まってないと無理
実行時にサイズが決まる場合はmalloc以外の解決法はない
>>455 vectorは配列ではない
458 :
デフォルトの名無しさん :2013/11/29(金) 17:31:49.40
実行時にサイズが決まる場合はmalloc以外の解決法はない 実行時にサイズが決まる場合はmalloc以外の解決法はない 実行時にサイズが決まる場合はmalloc以外の解決法はない
寧ろ、malloc()による安易な解決こそ避けるべきだがな。
> C++はC言語と違って えっ? Cって実行時に配列のサイズ決められるの?
まあC++の文脈で説明するならまずはnew int[a]からだろうな
c99地方の方言で実質allocaつこた配列確保があるからのう
newしろって言いたいけど初心者過にはやらせたくないからやっぱvectorかなあ
std::unique_ptr<int[]> n(new int[a]);
>>464 この <int[]> を型推論させる記法というか仕様ってあるんかな
>>463 むしろ初心者にこそ、後片付けの大切さを知ってもらうため、newしてもらうって
のもあるけどね
あと互換性無くなるけど、gcc拡張なら、動的に配列使うこと出来た気がする
>>466 何を言うとる
何もわからないまま、俺C++得意だぜwwwwで終わり
そして初心者にきちんと物事を教える大切さを周りの人間が知る
>>454 vector b;
b.resize(atoi(argv[1]));
いまだに実行時に配列のサイズ決められないってC++は駄目だな
用途の問題で必要ある時はvector使うし
455 (配列ではなく)vector使っとけ
457 vectorは配列ではない
468 vector b; b.resize(atoi(argv[1]));
>>457 と
>>468 はコミュ障の嫌いがある
実行時に決めたいときはvector使うし…
Cしかできないやつが混じってるな。
コミュ障と基地外はプログラムやる奴の持病だし
いまってCがろくすっぽ使えない奴がC++に必死って感じなのか 自分でメモリ管理なんて出来ないよ。だからスマポ、Vector
>>469 「可変長配列なにこれ便利www」つって何MBもスタックに置き始める馬鹿がでてくるから固定でいい
vectorは可変長配列。
478 :
デフォルトの名無しさん :2013/11/29(金) 20:16:53.65
>>476 サイズの問題じゃなかろうが
そう思い込んでるなら、おまえこそ深刻な問題を抱えているぞ
>>476 何MBもスタックは固定長でもやるだろ。C++はそんなアホな奴でも配列使えるようにvectorを用意
C++はCをたいして使えないアホでも使えるようにしたやさしさ満点のCの拡張言語
>>479 実行前にチェックできるかどうかは天と地ほどの差があるわ
はあ?
よく分からんけど念の為書いておくとvectorはヒープ領域を使う
vector<int> b; b.resize(atoi(argv[1])); b[0]=12345; 実際にはresizeなんてまず使わない≒事前にサイズを知る必要がまずない。 vector<int> b; b.push_back(12345);
じゃあstatic int b[a]が最強だな スタックもヒープも使わん
って書いたけど違うな
サイズ分かってるときはreserveしとくと速いよ
>C++はC言語と違って配列のサイズはコンパイル時に決まってないと無理 C言語も同じだ。 >実行時にサイズが決まる場合はmalloc以外の解決法はない vectorあるし、他にもいろいろコンテナあるし、newもある。 >vectorは配列ではない 可変長配列だ。 >「可変長配列なにこれ便利www」つって何MBもスタックに置き始める馬鹿がでてくるから固定でいい vectorは何メガデータを入れようとも管理領域の数バイトしかスタックを消費しない。 約1名C++ができない知ったか野郎が混ざっているようだね…。
>>479 アセンブラ原理主義のおっさんの幻影を見た
>>486 reserveは管理領域を事前に予約するだけで、
配列のサイズは変わらないんだよ。
491 :
デフォルトの名無しさん :2013/11/29(金) 20:46:12.81
> C言語も同じだ。 ちげーよバカ vectorはrandom_access_iteratorとoperator[]を実装した列コンテナにすぎず 配列かどうかはおまえの妄想しだいだ
mallocじゃないと動的に確保できない? 実行時に配列サイズを決められない? こいつらmapという連想配列がC++にあることも知らなさそうだな。
そいつら大抵内部でmalloc使ってるわけで
>>491 配列は同じだろ。そこはvectorの話しじゃない。配列と書いてある。
>>488 >>C++はC言語と違って配列のサイズはコンパイル時に決まってないと無理
>C言語も同じだ。
C99可変長配列
>>実行時にサイズが決まる場合はmalloc以外の解決法はない
>vectorあるし、他にもいろいろコンテナあるし、newもある。
それらはコンテナであって配列ではない
まともなC++erならきちんと分けて考えてる
>>vectorは配列ではない
>可変長配列だ。
配列ではない
>>「可変長配列なにこれ便利www」つって何MBもスタックに置き始める馬鹿がでてくるから固定でいい
>vectorは何メガデータを入れようとも管理領域の数バイトしかスタックを消費しない。
"数バイト" ではない
http://ideone.com/oB79hE >約1名C++ができない知ったか野郎が混ざっているようだね…。
ですね
単なる配列の動的に確保のためにmapを使うのはどうかと思う
何メガバイトもスタックを消費すると思ってた奴は黙ってろよ。
確保した領域へのポインタとその大きさとベクタの要素数で12バイトか
「配列」と言ったら言語機能の配列のことを指すものだと思ったけど 「配列」と言った場合は「配列として使えるクラス全て」を含むのか?
free() < 呼んだ?
>>494 デフォルトのアロケータは各環境のAPI呼んで、Cライブラリのmalloc()なんか呼ばないだろう
>>496 一番下のはそもそもvectorの話じゃなかったのにかわいそうな
>>476
>>485 その延長なら ユーザー定義リソース が最凶だな
何しろ解放処理すらいらないし
わざわざstd::arrayができてるのに vectorを配列扱いなんてひどい
>>500 言語の用語の厳密な定義の話をしているの?
それとも可変長配列を使いたいという要求をvectorが満たせるかどうかという話をしているの?
最初の質問は、要素数が動的に決まる場合はどうすればいいのかという話だったから、
当然後者だよね。なんで前者の話にすり替えるの?
>>494 sbrk() 呼んだ〜
void* operator new(size_t size, void* pv) 呼んだ〜
>>502 >デフォルトのアロケータは各環境のAPI呼んで、Cライブラリのmalloc()なんか呼ばないだろう
って調べたの?
VCとかdinkumwareとかnew呼んでるだけみたいなんだけど
>>504 std::arrayは使ったことないけど、vectorは配列じゃない、
でも、C++の配列欲しいで出来たのかな。
となるとvectorは配列ってみなしてもらってないのかな
で、dynamic arrayの話もC++にはあるんだろ?
>>>実行時にサイズが決まる場合はmalloc以外の解決法はない >>vectorあるし、他にもいろいろコンテナあるし、newもある。 >それらはコンテナであって配列ではない >まともなC++erならきちんと分けて考えてる 実行時にサイズを決めたいのだからコンテナでいいだろ。 コンテナを使ってはいけない理由は?
いらなくね?
>>506 > コマンドライン引数で得た数値を配列の要素数にしたいのですが
って言ってるじゃん
配列を引数に取る関数に渡したいのかもしれないし
そういう用途ならVectorは使えないよね
「要素数が実行時に決まるリスト構造を扱いたいのですが」なら配列でもVectorでもいいと思うけどね。
国語って難しいね。
配列の要素数を動的に決めたいってだけのことなのに、 vectorは配列じゃないからmalloc使えとか基地外レベルだろ。 vectorで何の不満があるんだよ。 何メガもスタック消費しないから安心して使えよw
C++でCの配列使うって基地 普通はstd::arrayかvector
>>513 >
>>506 >> コマンドライン引数で得た数値を配列の要素数にしたいのですが
>
>って言ってるじゃん
>配列を引数に取る関数に渡したいのかもしれないし
>そういう用途ならVectorは使えないよね
コマンドライン引数って書いてあるけど…
>>514 お前も余計なこと言って馬鹿晒してるな
素直にvector使ってもいいだろとだけ言ってりゃ良かったのに
配列を引数にとりたくて、要素数が不定なら、 ポインタ使うだろ。
>>516 は?
だからコマンドライン引数で配列の要素数を決めて、
それを別の関数の引数として渡す可能性もあるよな
そういう時はVector使えないよな
だから「配列の代わりにVector使えばいい」ってのはVectorで代替できる状況以外では全く意味がない回答
>>519 >そういう時はVector使えないよな
なんで?
data()渡せばいいんじゃね
Cスレでやれよ
>>517 mallocを使わなくてもコンテナという便利なものがあることを理解できましたか?
コンテナはスタックを何メガも消費しないことは理解できましたか?
>>519 vectorの参照を渡したらいかんの?
>>522 vectorは配列だと言ってしまったり、お前も無知晒したってことだよ
素直に配列馬鹿wとか言ってればよかったのに
>>519 …もしかしてvector使ったことないとか?
>>513 恐らく初心者でC,C++の区別よく分らない初心者が、
ここに動的配列生成の仕方を質問しただけって思う。
そして、恐らく質問はC++じゃなくC質問だったんだろうと思う
>>519 どうしてVectorが配列を返せないと思ったの?
他の言語だってリストを配列に変換するメソッドは用意されてるだろ
C++03でも&x[0]でいいしな
>>525 俺はvectorは配列だとは言ってないな。
可変長配列だとは言ったけど。
しかし実質的にはほぼ配列として使えるぞ。
C言語の配列を取る関数にポインタを渡せるし、
何より何メガもスタックを消費しない。
>>531 配列として使える?
ならテンプレートで定数として使ってみろ詭弁野郎
mallocを使わなくてもコンテナという便利なものがあることを理解できましたか? コンテナはスタックを何メガも消費しないことは理解できましたか? vectorはdataで生配列のポインタを得てC言語の関数に渡せることとが理解できましたか?
リストは配列です。それも可変長だよ
C++のlistはどう考えても配列じゃないよ 中身が別物
スレのレベル低下が著しい listが配列って・・
何でこんなにカオス
そう定義すればそうなる 人間は自由なのだから
リストが配列というと語弊があるよな。 言語定義を厳密に考えれば「配列」ではない。 しかし実質的には配列のように扱えることもある。 ランダムアクセスせずイテレーターで上から辿れば配列っぽい。 そういう意味では抽象的な配列と言える。 そもそもイテレーターパターンが複雑なコンテナを抽象的な配列として扱うためのパターンだから当然なのだけど。
541 :
デフォルトの名無しさん :2013/11/29(金) 21:39:46.87
これはひどい・・・ 厳密だってお(バンバン
そりゃやろうと思えば無理にランダムアクセスもできなくはないけどさ・・ そんなこと言ったらmapも配列か?めちゃくちゃだな
>スレのレベル低下が著しい >何でこんなにカオス C/C++スレがhoge基地スレになり、そこに居た低脳がこっちに移住したからよ
mallocを使わなくてもコンテナという便利なものがあることを理解できましたか?
コンテナはスタックを何メガも消費しないことは理解できましたか?
vectorはdataで生配列のポインタを得てC言語の関数に渡せることが理解できましたか?
>>454 の要求を満たすにはvectorで十分であることは理解できましたか?
>>542 配列だろ
つ>こいつらmapというがC++にあることも知らなさそうだな
549 :
デフォルトの名無しさん :2013/11/29(金) 21:49:16.44
unordered_array
なんか本当にイテレータで列挙できれば配列ってことにしてるみたいですね 彼にとってはファイルシステムの抽象コレクションも配列なんでしょうね
>>547 コピペミスした
つ > こいつらmapという連想配列がC++にあることも知らなさそうだな。
ということで配列
いや、だからスマートポインタで配列確保すりゃ文句ねえだろ
一体どこでどうC++を勉強したらこうなるのか疑問
554 :
デフォルトの名無しさん :2013/11/29(金) 21:54:10.88
おーいバカ、Associative containersをどう訳したら連想配列になるんだよ
>>551 ああ、本人じゃなかったのか
すまんすまん
const a な時点でスレチだろ?
配列のサイズを動的に指定するという話から脱線しすぎだぞ。
listは配列と言い出したの俺じゃねーから。
配列の話の流れで vectorの中身だけポインタとしてmoveする方法ってあるの?
vector が「配列」ではないと言っている人が、「配列」を得る方法として malloc を 挙げているように見えるんだけど合ってる? vector の先頭要素へのポインタを配列として使うことと malloc で確保した領域を配列として使うこととで違いがあるとは思えないんだけど、 どういう区別してんの?
mallocでないと配列を動的に確保できないと主張している人が頑張ってスレを伸ばしているの? vectorを配列代わりに使ってはいけない理由は何なの?
リストカット
565 :
562 :2013/11/29(金) 22:07:39.76
561と質問が被ったな。
vectorは配列じゃないがvector使えと言ってるのがいるんだろ
最初のキチガイが出て来なくなっただけだ 俺はvector使うことには賛成の上で vectorは配列じゃないと言ってるだけだ馬鹿
お前らが配列と信じているC++コンテナって何よ? その理由は? std::arrayのみだ(arrayをインクルードしないのは配列といわない) []でアクセスできるコンテナなら配列だ([]アクセスが配列をあらわす)
>>569 お前の主張、
>>454 の質問には何の役にも立たないな。
あとvectorはスタック何メガも消費しないからな。
>>571 まだ言ってるw
無知を煽るつもりが無知さらしえ悔しかったのか?馬鹿w
>>569 は、コンテナを使わずにmallocを使えと言っていた、
vectorはスタックを何メガも消費すると思っていた、
vectorからデータのポインタを読んで関数に渡せないと思っていた彼なの?
>>454 のシンプルな質問にどれだけ駄レスを重ねるのですか
>>575 認めたw 彼が認めたw
同一人物であることを認めてるわこれw
>俺はvector使うことには賛成の上で
えーmallocじゃないとって言ってたの忘れた?
580 :
デフォルトの名無しさん :2013/11/29(金) 22:33:45.70
馬鹿はレスしてはならないってローカリルールに書いといたら?
>>570 メモリレイアウト
vectorは内部メモリの連続性が保証されている上で、動的にサイズを変更できる唯一のコンテナ
mallocとnewの違いって何?
template <int N> void doSometing() {
}
質問者はどっか行ってしまったのだろうか
template <typename T, int N> void doSometing() { T [N]; なんかする } const a = atoi(argv[1]); switch (a)
template <typename T, int N> void doSometing() { T [N]; なんかする } const a = atoi(argv[1]); switch (a) { template <int N> case N: doSomething<int, 1>(): break; }
糞スレにふさわしいクソコード
template <typename T> catch(const T& t) { ErrorHandler<T> handler; }
それは便利かも
いやこれコンパイル通らないし
>>590 を右辺値参照にして野に放つ
typedef delctype(
>>590 ) hoge;
typedef std::remove_reference<hoge> gehogeho;
return (gehogeho&&)(
>>590 );
すべてをはぎ取られ、みじめに死んでいく刑、というわけか
595 :
重要 :2013/11/30(土) 04:31:57.31
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
自己矛盾乙。俺もだが
int foo(int a, int b) { return a - b; } int arg = 10; boost::bind(foo, 1, _1)(arg); // -9 boost::bind(foo, 1, _1)(10); //コンパイルエラー なんでエラー? 下はリテラルじゃなくて arg+1 とかでもダメ
std::bindはOKでboost::bindはダメなのか
テンプレートを特殊化するときだけはnamespace stdの中に自分の定義を入れる事が許されるんだよね? #include <boost/bind/arg.hpp> namespace std { template <> struct is_placeholder<boost::arg<1>> : integral_constant<int, 1> {}; template <> struct is_placeholder<boost::arg<2>> : integral_constant<int, 2> {}; template <> struct is_placeholder<boost::arg<3>> : integral_constant<int, 3> {}; template <> struct is_placeholder<boost::arg<4>> : integral_constant<int, 4> {}; template <> struct is_placeholder<boost::arg<5>> : integral_constant<int, 5> {}; template <> struct is_placeholder<boost::arg<6>> : integral_constant<int, 6> {}; template <> struct is_placeholder<boost::arg<7>> : integral_constant<int, 7> {}; template <> struct is_placeholder<boost::arg<8>> : integral_constant<int, 8> {}; template <> struct is_placeholder<boost::arg<9>> : integral_constant<int, 9> {}; } とかしたいんだけど。
やればいいじゃない
604 :
デフォルトの名無しさん :2013/11/30(土) 19:44:15.08
hogeがダメなら、hageにしようっと。エイリアスのsonnでもいい
605 :
デフォルトの名無しさん :2013/11/30(土) 20:03:35.13
RFC3092で
606 :
重要 :2013/11/30(土) 20:05:42.66
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
もちろん
>>606 にもhogeが書き込まれているので、この発言はスルーしてくださいね
608 :
デフォルトの名無しさん :2013/11/30(土) 20:38:33.13
永久再帰
hogeを禁止することを禁止します。
610 :
デフォルトの名無しさん :2013/11/30(土) 21:20:50.50
再帰に反応するやつには近親感をおぼえる 概して効率悪いし破綻も孕むけどロジック的には面白いからね 主体も客体も示さない受動形には、反吐とか殺意とかそっち系だが
近親とか孕むとか…
ツリー構造を辿るような処理は再帰使った方が自然だろ 馬鹿か?
そして無限ループ、スタックオーバーフローへ・・・
C++の処理系にも末尾再帰最適化があることはあまり知られていないようだ
615 :
デフォルトの名無しさん :2013/12/01(日) 01:37:40.79
テールリカージョンの最適化を知らんやつなんていたのか?
再帰使うなら深さは常に意識しとけよ 最大階層が不定なら強制的に抜ける処理いれとけ
617 :
デフォルトの名無しさん :2013/12/01(日) 02:18:28.18
それやると処理全体が破綻する場合があるから、 そうなるとテールリカージョンを非再帰に変形は手作業だね
不変条件わかってれば変換は難しくはない 問題は再帰構造ということが直観的にわかりにくくなる事
619 :
デフォルトの名無しさん :2013/12/01(日) 02:54:41.08
それは論外 再帰の最適化は読めていてこそ成り立つこと
読めないなんて書かれてないだろ プログラミングするなら日本語ぐらい読めた方がいいぞ
>>620 >プログラミングするなら日本語ぐらい読めた方がいい
hoge基地が普通のスレ住人には無理な要望って感じ
日本語でお願いします
623 :
sage :2013/12/01(日) 09:46:58.72
| |r;;;;;ノヾ |ヒ =r=;'<私の名は保毛 |ヽ二/ ⊂ノ |
ε hogeがダメなら俺の出番だな… >aho
エイホさんなにやってんの
保毛は大事だ。C++先生にならないように保毛しよう
628 :
重要 :2013/12/01(日) 12:29:08.93
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
hoge
「hogeは禁止」をNGワードにした
std::bind や boost::bind のコードが複雑すぎて追えない C++のリハビリを兼ねて自分のbindを作ってみたが、むずかしー 何とか動くものができたが300行超えちゃった。 目標200行だったんだが。
改行入れなければいいんじゃね(´・ω・`)
いや、かなりぎちぎちに書いて316行になった。 しかも引数は5個まで縛りw
>>613 スタックオーバーフローを避ける方法はいくらでもある
>>631 ですが、VCで動いたと思ったらideonで全然通らなくて焦ったw
微妙に違いがあるんですね
"Hell'o world!\n"
>>636 破壊はしてないけどテンプレートのコンパイルエラーメッセージには精神を破壊されそうになったw
右辺値参照とかdecltypeとか新しめの機能の学習のつもりだったんだけど、
右辺値コンストラクタをどう書いていいのか、まだ確信を得られない・・・
make world make love
test failed
右辺値参照は結局ただの参照 左辺値参照となにか変わるわけではない
hello world hello kotonoha delete makoto
戻り値が右辺値になったのが嬉しかったな、もう第一引数を結果用に使う必要なくなったんや
RVOの無い処理系だなんて
前から右辺値にできたろ
>>641 右辺値参照で自クラスのオブジェクトを受けるのもコピーコンストラクタっていうの?
class HaGe : public HOge {
Sage m_sage;
HaGe(HaGe&& hage) : ここ { }
コンストラクタ初期化子で何すればいいの?
hageはどうせ死ぬんだからmoveすりゃいい
>>647 なんとなくわかってるんだけど、それは明示的に書かなきゃダメですか?
HOgeとSageにmoveするコンストラクタがある場合、HaGeに HaGe(HaGe&&) を全く書かなかったら?
左辺値のコピコンを書かなかった場合、基底クラスとメンバのコピコンは暗黙で呼ばれてましたよね?
>>648 >>641 にある通り、右辺値だからと言って自動的に何かしてくれるわけじゃない。
テストしてみりゃわかる
>>648 ダメに決まってんだろ
moveは暗黙でやってくんねーぞ
>>646 m_sage(std::move(hage.m_sage))
>>648 自分は
>>631 ですけど、今回ちょっと勉強していろいろわかった。
いったん右辺値で受けても、受けた変数自体は左辺値になってしまうので、さらに別な場所に右辺値として渡すときは
>>651 のようにしないとダメ。
そういう仕様が望ましいんだろうけどよくわからない。これから調べる。
え?
ホゲを使う奴にマトモな人はいない
>>652 勉強はいいが bind なんて面白くないだろ。
ラムダ式使えるようになってから存在意義なくなってるんじゃないか?
ムーブなんて今更だよな オブジェクトはnewしてポインタで処理を基準するのが基本だよ 現実的な話、オブジェクトのコピーなんて稀にしか使い道がない C#やJavaのやり方が理にかなってるんだよ
>>658 釣りじゃなくてマジな
なら聞くがオブジェクトをコピーして有用な状況ってどんな時だ?
オブジェクトを参照で管理する方向性でプログラミングするなら ハナから仕様として備わってる言語使えってのは強ち間違ってはいない
>>659 オプション設定時みたいにキャンセル(状況に応じた巻き戻し)したいとかいろいろ状況ありすぎて困る
参照はいいものだが、コピーも同じぐらいいいもんだろ。釣りじゃないなら何なんだよw
寿命の長いオブジェクトはそりゃそうするさ。 短命な値型のオブジェクトだって随所に必要だろ?
最近オブジェクトの寿命の長短が極端に分かれてきた。 最初にマスター情報読んで構築するエンティティオブジェクトはアプリの稼働時間とほぼ同じ寿命。 それ以外は関数やメソッドのスコープ内でしか生きてない。 そいつらも名無しの一時変数だけにできないか検討中w
moveなしに c = a + b; をどうやって効率化するんだよ? a + b で作られる一時オブジェクトがその寿命の短いオブジェクトだろうが
オブジェクトにコピー能力を要求するのは面倒 プログラムを無意味に複雑化させるだけ
>>666 キミは物事を表面的にしかとらえていないね。
おおかた 「friend はカプセル化を破壊するよくない機能」なんて思ってるクチだろ?
>>669 現実的な話をしてる
カスが作るようなゴミ虫クラスは要求されるものが小さいからコピーなんて簡単だよ
でも商業ベースでクラスを作るとなったらそうはいかない
規模がデカくて複雑なだけではなく様々な制約や予算の都合もあり素人がやるような素朴なコピーやクローンでは話にならない
そうなると複製は切り捨ててオブジェクトを参照ベースで管理した方がはるかにメリットがデカイわけだ
価値のあるクラスは大抵コピーやクローンが切り捨てられるから価値のないちっぽけなクラスがそれに合わせるべき
一貫性を保つことによって全体的なパフォーマンスや保守性がぐっと高まる
>>662 と
>>666 は
>>667 にきちんと答えてはいかがか
c = a + b という式において、当然aとbはconstと考えられるから変化するのはcだ。
cは新しく発生した情報をコピーまたは参照せねばならない。
新しく発生した情報を捨てずに c が参照する機能、それがムーブだ。
>>657 の1行目と2行目がどれだけトンチンカンなことを言っているのかおわかりだろう。
>>671 おまえまさか、「規模がデカくて複雑なだけではなく様々な制約がある」クラスを作ってるんじゃないだろうな?
>>671 巨大で複雑なクラスを作る方が素人丸出しやが…
巨大で万能なクラスがあってそいつが全体の調整役を担ってるのは手続型のスタイル。オブジェクト指向には向かない
>>671 クラスは要求されるものが小さくなくちゃダメだぞ
分割・分割・分割、と口をすっぱくして指導されなきゃわかんないのか?
いいよなあ ちっぽけで簡単に管理できるクラスしか作らないやつらは気楽でよ
>>677 ちっぽけで簡単に管理できるクラスに分割するために頭を悩ませるんだろ?
巨大で何でもできるクラスなんて誰でも作れるわ。必要な状態と機能を追加してきゃいいだけなんだから
>>675 a + b でnewされたものを c が受け取るのが move だろうが。
まったく理解してないのだ丸わかりだぞ
分割を繰り返せばクラスやオブジェクト間のリレーションが増える これは逆にコピーをやりにくくするだけ 要件が元から大規模で複雑だとどうしようも無いんだよ comにも対応しなきゃだしネットワーク接続もするし特殊なデバイスだっていじらなきゃならない コピーなんかするのはバカな真似でしかないんだ
>>677 どうせ大規模なデータを扱ってるとか言うんだろう
クラスの単位で「簡単に管理」ができなくなった負けの始まりなんだよ。
所有と管理の分離って知ってるか?
>>678 そういう初心者みたいなレベルの話じゃねえのよ
適切に機能分割したってそう簡単に素朴なクラスにはならねえ
それがプロの相手にしてる仕事ってもんだ
趣味や子供のお遊びならそりゃ簡単にコピーできるとこまで分割単純化できるだろうよ
>>679 つまりnewすりゃいいからmoveは要らんちゅう話だろ
要らん機能増やしてどうするんだ
> comにも対応しなきゃだしネットワーク接続もするし特殊なデバイスだっていじらなきゃならない class ComNetWorlConnectableDeviceController; か?w
まともな設計できない自称プロがバカ晒しててワロタ
とコピーしやすいデータ構造にしとけよ 小さいデカイ、メンバー数が多い少ないなんてコピーの実装(保守)とは無関係だからなw
>>682 もともとは
>>657 の以下の発言がもとになっていると思うが、
> オブジェクトはnewしてポインタで処理を基準するのが基本だよ
> 現実的な話、オブジェクトのコピーなんて稀にしか使い道がない
「適切に機能分割したってそう簡単に素朴なクラスにはならねえ」は正しいとしても、
そういう厄介なものに気をとられ過ぎていないか?
それはそっちで解決してくれ。
オブジェクトのコピーはその問題には役に立たないかもしれないが有用なものだ。
friendはJavaで言うところのパッケージ内スコープをやりたい時によく使う
>>657 は言ってみればグローバル変数ですべて実装するタイプなんだと思う
>>683 だんだん具体性に欠ける話になってきた。
c = a + b をあんたが言うような形で実装してみてくれ。
もちろんc++の話
クラスオブジェクトにするのもスマートポインタ、参照にするのもどれも表現方法でしかない、 C#やJavaの基本参照型の言語でもディープコピーが必要になる場面があるだろ。
ボクが今直面している厄介な問題の解決に役立たないからこの機能は無意味! という精神だったのか
>>692 あるだけでたまにしかつかわんし
切り捨てていい部分
c++のmoveってディープコピーを避けるための機能だろ? 矛盾に満ちた思考だな。
friendはより完全に近い隠蔽を果たすための機能 カプセル化を壊す、なんてのは表面的な捉え方だね。
正解: 大抵の場合でcopyでも最適化されてmoveになるから言語仕様としては必要ない
ans = (a + b) + (c + d); これも最適化されるの?、 (a + b)、(c + d)の2箇所は左辺値同士の加算で、最後の3つ目は右辺値同士の加算なんだが
moveを今日初めて知って、便利すげーー。コピーなんて要らなかったんだ! っていう初心者が騒いでるだけだったのか
そうみたいだね
hogeとahoは予約語ですか?
ahoge
704 :
重要 :2013/12/02(月) 14:58:08.73
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
>>696 情報隠蔽ならfriendいるかもしれんが、
単なるカプセル化ならfriend要らんべ。
struct Path::SimpleContext{略};
void Path::Walk( Path::SimpleContext&, const MoveTo& );
void Path::Walk( Path::SimpleContext&, const LineTo& );
void Path::Walk( Path::SimpleContext&, const CurveTo<2>& );
struct Path::ComplexContext:Path::SimpleContext{略};
void Path::Walk( Path::ComplexContext&, const MoveTo& );
void Path::Walk( Path::ComplexContext&, const LineTo& );
void Path::Walk( Path::ComplexContext&, const CurveTo<2>& );
void Path::Walk( Path::ComplexContext&, const CurveTo<3>& );
template<class ComplexType> void WalkOn( const Example&, ContextType &context )
{
Walk( context, MoveTo( Vector<2>( 0, 0 ) ) );
Walk( context, LineTo( Vector<2>( 1, 1 ) );
Walk( context, CurveTo<3>( Vector<2>( 0.5, 1 ), Vector<2>( 1, 1 ), Vector<2>( 0, 0 ) );
}
SimpleContext simple;
ComplexContext complex;
WalkOn( Example(), simple );
WalkOn( Example(), complex );
706 :
705 :2013/12/02(月) 16:36:48.53
ごめん。同じ事言ってたのに早とちりした。
>>692 せやで。多用すんで。
#( 2 3 2 1 3 1 ) asSet asSortedCollection do:
[ :each |
Transcript
show: each asString;
cr.
].
出力結果:
1
2
3
あえてSmalltalkを例に出すところがいいね
>>656 >ラムダ式使えるようになってから存在意義なくなってるんじゃないか?
やっぱそうなの?
でも自分的には練習になったし30%くらいは達成して満足。
マクロを使わない -> ○
void*を使わない -> ○
200行以内 -> X 300行近く
std::bindと同じ構文 -> X キモい構文
可変個引数 templateとか使ってみる -> X 全然
ラムダ式は高機能な分無駄なところも出てくるからbindがそのまま適用できる局面ならbindを選ぶのも良い
いや今となってはbindに存在意義など無い
712 :
709 :2013/12/02(月) 23:59:56.53
欠陥に気付いた・・・ ファンクタとして operator( ) を、一応5引数までということで定義するんだけど、 operator () (void) がどうしても定義できない。 投げ出すべきか・・・
引数なしって、それ全部bindしてんのかw
>>697 明示的にしたことでインライン要らなくなったんだよ馬鹿
>>713 普通の奴はそうするけど。でも、ここに居るのはhogeだよhoge。
hogeを受け入れてね
if (*hage==*hoge) delete hoge; use(hage, ETERNALLY);
class hage : public hoge {}
hageはC++のマスターレベルの奴を指す言葉 一方、hogeは底辺レベルを指す言葉 hage,hige,huge,hege,hogeでC++レベルをさすって日本では常識 お前、hogeだって馬鹿されたら努力してレベル上げれば良いのに、 努力しないで基地化している奴がアンチhogeだろ
hageはStroustrupのみに許された称号 こんな駄スレに書き込んでる奴に名乗る資格はない
やめろ!Hageたくなーい!Hageたくなああーーい!
>>722 禿げになるまで努力しろ、保毛じゃC++は使えない。
これがhage先生の一番重要な教え。
超高脳の先生でさえ禿るまで努力したんだ
ビヤーン先生はhigehageだろ
725 :
重要 :2013/12/03(火) 21:50:10.46
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
簡単な質問お願いします。 while文なんですが、条件を書かずwhile(){ }とした場合、無限ループになるんでしょうか? ググってもなかなか出てきません・・・
イエス
いつのまにか空式whileが合法に
先輩にwhile()じゃなくて、for(;;)使えって怒られたんだけど何で?
まじかよ。ためしてないがまじで()内trueおかなくても無限ループになるの?
>>729 while(true)でVisualC++兄貴が文句を言うから
エラーだね 30年以上前の K&R にも省略していいとは書いてない
while⇔until とか if⇔unless のシンタクスシュガーがある言語嫌いです 馴れても未だに頭がよじれる
VC2012でerror C2059: 構文エラー : ')'になるな ビルドオプションで通るんかな
[ true ] trueWhile: []. [ true ] falseWhile: []. これならどうよ
trueですか。ありがとうございました。・
おまえら構造化プログラミング教に教化されちまったのか嘆かわしい loop: goto loop;
そして関数名の接頭子が付き、ファイル名の接頭子が付き、namespaceの接頭子が付き・・・と成長するんですね分かります
>>741 そこは setjmp/longjmpでしょ:-p
マングリングって何かエロいよな
型名ばっかりどんどん肥大化していく
>>713 別にいいだろ?
やっと引数なしができた。
ついでに参照を束縛するやつもできた。
許されん事だ。 世の中にはしていい事と悪いことがある。
>>746 ほんと日記帳だな。みんなで日記帳しようスレ
【終日来客なし、自宅で過ごす。】
ああw あとはメンバポインタだ
そういって私は加奈子のうなじを撫でた
プレースホルダーは後から来た変数に席をゆずらないといけないんだぜ
昨日は仕事ではC++ついては何にもしなかった。 とういことでC++スレを見にきて、C++した気になる。 今日もC++の予定はないからここに来よう。寝る。
・大根(半切り) ・豚こま300 ・白ねぎ ・シャンプー(いつもの。あれば)
クンっとつんのめる加奈子。 私はうなじ伸ばしたその手を首筋へと移した。
潤んだ瞳で見つめる加奈子。 私は、加奈子の敏感な部分に手を伸ばす。
なるほど、わかった。 C++ = ビョーン博士 = 禿げ = 保毛禁止 = hoge禁止 というわけか。 逆にみんなでhogeを使ってビョーン博士の頭の進行を食い止めようではないか。
却下だタワケ
いやまだ一人いる。 歯毛だ!
760 :
重要 :2013/12/04(水) 07:36:15.42
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
∧_∧ ( ´∀`)< hoge
加奈子って中年ババアの名前っぽくていまいちなんだけど
加奈子「hoge」
加奈子「あゝ、C++さん何てTechnicでいらっしゃるの」
官能連続小説「初めてのC」
最近の若い子の名前って光宙とかか。
>>765 せんせい!
C+ C++ はなにが違うんですか
C+ はエラーです
769 :
デフォルトの名無しさん :2013/12/04(水) 11:57:56.27
C++++++ と際限なく追加しまくってる語感はあるね
「初めてのC 〜未來の場合〜」 「初めてのC+ 〜加奈子の場合〜」 「初めてのC++ 〜トメの場合〜」
ill-formed
もう H にしちゃえよ
今の次代にC++なんて使うのは基地外しかいないってのがよく分かるスレだな
775 :
デフォルトの名無しさん :2013/12/04(水) 13:25:44.94
今の現役がみんな引退している頃か・・・ どうなっているやら
使いふるしのネタに嬉々として食いつくのは冬休みの学生だろう 初々しい
C+hoge
「初めてのhoge」
>>769 C++は右辺値なので重ねて++できない
(++c)++ これなら通る
781 :
デフォルトの名無しさん :2013/12/04(水) 17:49:10.20
enum hoge{}; 空の列挙型は合法ですか?
782 :
重要 :2013/12/04(水) 17:53:53.27
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
Essential hoge 第3版
784 :
デフォルトの名無しさん :2013/12/04(水) 18:05:27.28
名付ける必要のない識別子を例示する時にhoge以上に適切なメタ構文変数はありません 日本語なのでかなで「ほげ」としたいところですが、 これがサンプル中に出てくると非常に紛らわしくなります int ほげ=10; extern int はげ(int); int ひげ=はげ(ほげ); わかりにくいですね int hoge=10; extern int hage(int); int hige=hage(hoge); なんとわかりやすいのでしょう。というわけで名付ける必要のない識別子にはhogeをつかいましょう foo, barなどいういう軟弱なメタ構文変数とちがいhogeシリーズは hage, hige, huge, hege, hoge と何も考えずに5種類もつかえます。 hogeを使いましょう
独習hoge
786 :
hoge :2013/12/04(水) 18:18:51.73
>>781 enum-head { enumerator-list(opt)}
enum-head { enumerator-list , }
となってるから、文法には矛盾しない
hage, hige, huge, hege, hoge は見分けづらいからやめて
「;」と「:」の方がもっと見分けづらい キミはC++をあきらめた方が良い
そうだな。 やめるわ
790 :
デフォルトの名無しさん :2013/12/04(水) 19:01:22.25
>>779 operator ++ (int) &&; で右辺値用の後置 ++ にならんか?
こんぽーねんとしこうって何、教えて
C++11になって、boostでいらなくなったライブラリってある?
boostでいらないものなんてないよ
標準に入ったけどめんどいから放置してるわ
お約束でboostがいらないって言っておこう
いらないんっていうんならいらないんだろう お前の中ではな
BOOST_AUTOだけは書き換えたなあ
>>792 VSまでフルC++11 + C++14の一部までサポートするようになったからな
boostは要らないとはいわないが、必要性は低下したな。
今時って、C++11というのになってるんか。 仕事では、Cと、C++はVC++6.0だけで、あとはC#だな。
上からboost
VCなんて駄目コンパイラーを使っているC++erはいないからな VSにおまけでついているのがVCだし。おまけに力なんて入れない
>>798 そんな夢みたいな話でいたいけなwindowsユーザーを騙すのはやめてください
winユーザー・開発者ってゆとりだからいい加減な物でも大満足って感じだろ VC開発者にとって一番大事なのはIDEだし
ああそうだよ ideonで全然通んなくて途方に暮れたよ
VSを使う際cl.batを用意して、 Microsoft C/C++ Optimizing Compilerを clang++に置き換えるのが通なやり方
>>808 そんなん使わなくても今は公式で用意してるだろ
811 :
重要 :2013/12/05(木) 16:26:52.16
【重要】 hogeは禁止します、使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。 なお、hogeはNGワードに追加しておくことが強く推奨されています。
>>807 hogeでない奴ならClang++をVSでも使っているだろうな
俺はhogeだから使ってないけど
813 :
hoge :2013/12/05(木) 17:01:22.64
このスレに書き込む時は必ずhogeをどこかに入れましょう。 NGワードに登録している人には全くレスが見えず 非常に愉快なことになります。
hageは何を使えばいいんだ?
katsura
名付ける必要のない識別子を例示する時にhoge以上に適切なメタ構文変数はありません 日本語なのでかなで「ほげ」としたいところですが、 これがサンプル中に出てくると非常に紛らわしくなります int ほげ=10; extern int はげ(int); int ひげ=はげ(ほげ); わかりにくいですね int hoge=10; extern int hage(int); int hige=hage(hoge); なんとわかりやすいのでしょう。というわけで名付ける必要のない識別子にはhogeをつかいましょう foo, barなどいういう軟弱なメタ構文変数とちがいhogeシリーズは hage, hige, huge, hege, hoge と何も考えずに5種類もつかえます。 hogeを使いましょう
ホゲを使う奴はキチガイとしか言いようがない
818を見てわかるように hoge使い=荒らし
どちらかというと816が荒らし どちらもhoge使い
821 :
818 :2013/12/05(木) 21:38:07.30
>>819 悪かったよ
リンク先は「ほげちゃん」ていう絵本だ
いい話だぞ
>このスレに書き込む時は必ずhogeをどこかに入れましょう。 >NGワードに登録している人には全くレスが見えず >非常に愉快なことになります。 ほら、愉快とか何とか言ってhogeを入れることが目的化してる 荒らしの典型だな
アンチHogeがわいてくると、リアル基地外来たーでスレが停滞するからな
湧いてるって言うから見に来たのに。
>>825 hoge: 低脳、ゆとり、あほ(底辺民)、でも、犯罪を犯せば刑に処せられる
アンチhoge: リアル基地外(精神病疾患、精神崩壊者)、犯罪を犯しても起訴すらされない
だからアンチがわいたらhogeですら相手しないでさっと逃げるよ
828 :
hoge :2013/12/07(土) 04:58:31.18
いやどう考えてもずっと同じコピペを貼り続けている811が一番ヤバい。 鬱病発症中って感じだ。 ていうかお前811だろ。
○ お前のレスは間違っている ○ お前は低脳、基地外、精神疾患、鬱病発症中 だと俺は考える × お前は低脳、基地外、精神疾患、鬱病発症中 →これは誹謗にあたり名誉毀損で訴えられる恐れがあります それ以前に人としてやめましょう まあ名前欄がhogeな時点でお察しくださいかな
830 :
重要 :2013/12/07(土) 07:47:31.37
【重要】 hogeは禁止です。使用しないでください。 万が一hogeが書き込まれても、スルーしてください。 相手にするとあなたも荒らしと同じ扱いになります。
831 :
デフォルトの名無しさん :2013/12/07(土) 08:01:07.45
インスタンス名を参照するマクロ(たしか)を教えてください わりとあたらしめの機能(それでも何年も前からある)で、 そういうことをまとめたページを見失ってしまったので よろしくお願いします
まず「インスタンス名」とやらが何を指すのか 定義を教えてください
#define INSTANCENAME_OF(INSTANCE) (&INSTANCE)
>>832 classA instA = new classA;
の「コード内の文字列"instA"」のことです
ほかに、「コード内の文字列"classA"」を参照することも可能だったはずです
>>833 すいませんが違うと思います
たしか、「__」が使われていた気が・・・・
そういうことが可能になったことを知って感動した記憶があります
836 :
デフォルトの名無しさん :2013/12/07(土) 08:30:36.75
たぶんC++の話じゃないと思うんだよね。 instAは変数名だよね。 これを知るのはC++の範囲では不可能なんで、記憶が誤ってると思うんだ。 記憶を書き換えられた可能性もあるね。 一方で、VSのマクロという意味なら取得できるかもしれないんだけど、 このスレで質問することじゃないんだよね。 つまり、結論だけ言うと JSはCの二倍速い。
>>836 Linux環境でg++でやりました
もしかしたらGCC拡張か、POSIXかもしれないですけれど
日記いいすか?
bindを実装するって話、やっとメンバポインタまでideonで通るようになったので一区切りとします。
200行以内という目標はまったく達成できませんでした。
http://ideone.com/IwZvKM 何とか短くするアイデアない?
839 :
デフォルトの名無しさん :2013/12/07(土) 08:43:34.29
VSのマクロというのはExcelのマクロと同じで、IDEのマクロなんですよね。 GCC拡張のマクロという場合、cppあるいは言語規格を拡張しているわけですよね。 これはさすがに邪悪すぎないっすか? よく、M$の独自拡張が邪悪とか言われるわけなんですが、どうも尊師は言うことと やることに矛盾がある。 世界を救うために地下鉄サリン事件起こすとか。 普通にありえないっすから。
840 :
hoge :2013/12/07(土) 09:12:10.39
VSは別にC++専用のIDEじゃないから。
841 :
デフォルトの名無しさん :2013/12/07(土) 09:27:16.58
イデじゃないよね〜。
世界を救うとはつまり人類を死滅させるに等しい 彼はあまりにも非力だったが方向性は間違いではなかったといってもよいだろう
843 :
デフォルトの名無しさん :2013/12/07(土) 09:34:00.85
FSF代表取締役社長の尊師ですか。
スペースランナウェイ
>>834 変数名じゃねえか。
因みにC++はクラスオブジェクトが存在しないから、
オブジェクトにインスタンスオブジェクトとクラスオブジェクトの区別がない。
インスタンスと言えばテンプレートのインスタンスを指す。
>インスタンスオブジェクトとクラスオブジェクト はて、それぞれどの様な概念なのか 参考までに教えていただけないでしょうか
845の脳内定義 クラスオブジェクト=JAVA()のClassクラスのインスタンス インスタンスオブジェクト=普通のオブジェクト インスタンス=テンプレートクラスの実体化されたクラス定義 C++のスレでSmalltalkを語り出す池沼
C++はオブジェクトはオブジェクトだからな オブジェクトをインスタンスと呼ぶ風習は無いし(極一部いるが) オブジェクトをあえてインスタンスと呼ぶ意味も無い。
>>848 Javaのアレは単なるオブジェクトでクラスオブジェクトじゃないぞ。
クラスオブジェクトと違ってインスタンスオブジェクトと互換性がないからな。
因みにクラスオブジェクトってのは、
SmalltalkやPython、Rubyの言語仕様にも書かれてる割と一般的な用語。
C++のオブジェクトに対し言語仕様でも使われないインスタンスという
呼び方する方が、よっぽど脳内用語。
>言語仕様でも使われない 9ページ目から登場してるようだが An instance of each object with automatic storage duration
>>851 それオブジェクトのインスタンスを指してるわけでオブジェクトに対しインスタンスと言ってないだろ
C++で言うinstanceはtemplateのinstancesか単なる実体の意味合いだよ。 objectはobject。
852=853
どうでもいい言葉の定義の話になると伸びるねえこのスレ
規格書を完全に把握してないと議論なんてできないんだろうな 標準化委員会の連中が規格規格言ってるの見て頭おかしいと思ってるけど こういう流れ見てるとそれが必要なことだって感覚で理解できるわ
質問なんですが、class内の変数値を外部から書き換えたら、 class内の予め指定した関数が自動起動、って出来るんでしょうか?
できません
さすがにC++ですね
C#とかには変数書き換えたら「予め指定した関数が自動で呼び出される」なんて機能あるの? その為にプロパティという仕組みがあるんじゃないの?
ありません
日本人はカタカナ用語は専門用語で厳密な定義があると勘違いしてるけど、 インスタンスなんて一般的な言葉で厳密な定義はないから。 インスタンスを実体と読み替えてみるといい。
>>857 void Class::SetValue(int value){
m_value=value;
自動起動();
}
>>860 PleaseCallMeOnUpateW()
>>863 自動じゃねーじゃんw
自前で呼出してんじゃん
>>838 コピーコンストラクタをprivateにしてんじゃファンクタとして複数の箇所で使えないよ。
と思ってもう一度見てみたら直ってるw
>>862 主語なしならtemplateのinstanceだと思うな
>>857 書き換えのための関数を用意して、その関数を通してしか書き換えないようにさせておいて
その関数の中で、書き換え前後に別の関数を呼ぶようにすればいいのでは?
単にインスタンスって言われたらオブジェクトの事と受け止めるなあ俺は
テンプレートのインスタンスのことなら「テンプレートインスタンス」とか言ってもらわないと
>>867 お前は「主語」を何だと思ってるんだ?
>>865 ワロタ。そうだな。
C++はゆとり言語でないからコンストラクタ・デストラクタも
ちゃんと自前呼び出しないとだめだからな。
m_valueをリードオンリーのページに置いてページフォルトハンドラ設定すれば、 書き換えようとしたときに指定したハンドラを自動で呼び出すことが出来る
>>873 「ファンクタ」の要件次第
アルゴリズムに突っ込んだときにどうなるか
>>869 templateのinstanceだろC++でinstance化と言えばtemplateなんだから
>>869 C++でオブジェクトをインスタンスと呼ぶ意味があるのか?
インスタンスなんて口にされたらJava上がりの初心者って
印象を受ける。
>>876 instanceって言葉はC++が参考にしたSimulaの時代から使われているけど、Javaがどうかしたのかい?
>>876 OOな設計のプログラムをC++という言語で実装する
という場合には問題ないだろ
感覚が妥当であるかどうかと 正しいかどうかは同じとは限らないぞ
>>879 ooな設計ならクラスオブジェクトもインスタンスオブジェクトも
オブジェクトでしかないのでインスタンスなんていう必要はない
>>882 インスタンスという用語はOOとは関係ないよ
オブジェクトとインスタンスを同一視するのは知識不足を披露してるだけだよ
徒に抽象的な議論も必要ない インスタンスが〜 インスタンスは〜 いろんな文脈にあてはまりすぎだろ
用語ってw 「インスタンス」はいくらなんでも普通名詞過ぎるだろ
>>885 日常用語と法律用語の違いと同じ。普通名詞だからあらゆる文脈で同じ意味を持つとは限らない
そしてinstanceは計算機科学の論文では特定の意味を持った用語だ…
>>884 いっそカタカナ英語なんざ使わず、
実体が〜。
実体は〜。
といってもらった方が分かりやすい。
>>883 アナタの言うOOの定義は何ですか?
OOの議論ではインスタンスという言葉がよく使用されますが
関係ないとまで言い切る根拠が不明です
>>886 the instanceなんて殆ど無いよ。
実体と言い替えれば済むものばっかり。
クラスのインスタンスがオブジェクト。 テンプレートのインスタンスがテンプレートインスタンス。 単にインスタンスと言うだけではどちらの事を指しているのかは特定できない。
おっきいおっぱい
DBとか仮想機械関係とかカタカナ英語多すぎだろ あれ既存の日本語で充分なものばっかだ
>>888-889 sumimとかminekoaあたりの議論を見てみな。
彼らが引用してる論文にインスタンスの定義が載ってるから。
オブジェクト指向について語りたいならsumimのページを一通り目を通しておかなきゃ土俵にも立ててないぞー
論文に定義があるのは、それが一般的な言葉であって複数の意味に取れてしまうから、 その論文の中でインスタンスと言ったらこういう意味であると定義したまでのことで、 論文の外でもその定義が通ると主張しているわけではない。
>オブジェクト指向について語りたいならsumimのページを一通り目を通しておかなきゃ土俵にも立ててないぞー なるほど「sumin=OOの定義」と考えてしまうから 他人との意志疎通が図れないのですね
アメリカで仕事して自分自身最初に驚いたのがその表現の一貫性のなさだったから。 自分が専門用語だと思っていた言葉が一般名詞や動詞で、専門用語でなかったということの驚き。 専門用語でないから一定じゃないし、文脈によって意味が変わる。 だから「専門用語だからこう言えば確実に意味が通じる」と勘違いしないようにしないと話が通じない。
>>894 こうやって言葉遊びで自分のプライドを守ることに固執し始めるともうダメだね。そこで成長は止まる。
>>895 単にオブジェクト指向に関する論文が多く載ってるという意味で紹介しただけだが…w
そもそも二次ソースの個人ブログ主の意見を定義と勘違いするとかありえねーだろう
>>896 そうやって自分の成功体験に酔ってその経験を絶対的な価値基準に置いてる時点でお前はもう成長止まってるんだって。
どんな情報でも「アメリカでの自分の体験」という色眼鏡抜きでは評価できない。
結果として「アメリカでの体験」から一歩も前に進めない。後ろばかり振り返って過去の自分を愛でてるだけ。
オブジェクト指向という、C++の様に規格が明確でないもので 「これが正しい用語」と言いはる奴は馬鹿
オブジェクトというとクラスのインスタンスであると一意に決まると思うけど、 これも間違い。オブジェクトも一般的な言葉の1つでしかないから文脈を意識しないと意味が変わる。 インプリメンテーションもコーディングと同義だと勘違いしていたけど、通じなくて気付いた。 法律や条例、職場の内規やゲームのルールをインプリメントできるから、「何を」インプリメントするのか明確に言わないと通じない。
>オブジェクトというとクラスのインスタンス 900はISO/IEC 14882:2011を読み直せ
>>899 少なくともアラン・ケイのOOは明確だ
用語も開発史の中で記載されてる。
>>900 お前ぐらいだと思うぞ。普通実体みたいに直訳出来るような言葉を用語だとは思わないから。
どこかの開発史で記載されているアランケイの定義に反するものは誤りと盲信しているから 他人との意志疎通が図れないのですねふむふむ
>>904 アラン・ケイのOOで言えば当然間違いだろ
>>904 少なくともお前のオレオレ用語よりはマシだな
アランケイの信泰者を見分けるポイントは「JavaやC++はオブジェクト指向ではない」 「クラスはオブジェクト指向と関係ないただの言語機能」「インスタンスとオブジェクト指向は関係ない」 などの極端な主張に気を付けること。この手の主張をする奴は大抵アランケイの信泰者
なお、本論文中でπは円周率を表し、eは自然対数の底を表すものとする。
アラン・ケイ信者のみが「アラン・ケイでないものはOOにあらず」 という排他的な教義を信仰しているということですねふむふむ
>>908 一方数学者はその都度用語の意味を明らかにした、ってことかw
まぁinstanceが用語ってのは禿のOOにも無いしAlen C KeyのOOにも無い訳で、 オレオレ用語ってのはあってるわ
>>911 のようなアラン・ケイ信者のみが「アラン・ケイでないものはOOにあらず」
という排他的な教義を信仰しているのですね
訂正 objectをinstanceとも呼ぶって用語は禿のOOにも無いしAlen C KeyのOOにも無い訳で、 オレオレ用語ってのはあってるわ
インスタンスを「実体」と訳すのには抵抗あるなあ C++オブジェクトの実体はクラスだろ?
いいえ違います
クラスを実体化した物がオブジェクト
いいえ違います ○ クラスを実体化した物はオブジェクト × クラスを実体化した物がオブジェクト
「実体」という言葉は哲学・宗教論争になりがちだから避けるべきだと言ってるんだよ プラトニストやドイツ観念論者ならインスタンスは実体ではあり得ないと言うだろう もっと適切な言葉がある筈
「実体」の英訳で最初に出てくるのは「substance」なんだから
あくまでc++の文脈で言うなら decltypeの引数になりえるものがオブジェクト sizeofの引数になりえるものがインスタンス
最初に出てくるというのと 「実体」と「substance」にどう関係があるのだ?
>>920 少なくとも辞書的には「実体」はsubstanceなのであってinstanceではないということ
言葉に拘るなら少なくともこれくらいの認識は持ってほしい
そうじゃなければこういった議論は児戯の範疇でしかない
まあ、俺はこういったエレア派起源の実体概念には異を唱える者なんだけどね
>>923 お遊戯以外の何物だと思ってんの?
まさかここでしてる罵り合いが神聖な会議だとでも思ってたの?
>>922 引用ってw
オレの意見を表明しただけ
自分の考えってもの無いの?
オブジェクトが物体でインスタンスが実体なら、 物体は実体があるし実体があるものは物体だし、区別する必要があんまりないよーな。 ただ、「〜の実体」とは言うけど「〜の物体」だと微妙。
正しくはどうなのかは知らんが 俺が最初にC++覚えたサイトでインスタンスって書いてあったから インスタンスも許容してください。
928 :
デフォルトの名無しさん :2013/12/08(日) 02:39:27.83
>>925 出典と言いたかったんだろ
ボッキキャベツが貧困なんだよ彼は
英語圏に生まれていれば、こんなしょーもない論争で時間潰さなくて済むんだろうな 仕様書を読むにもいちいち翻訳が必要で、データとしても冗長な日本語とかいう糞 ITやるには最悪だわ
>>901 >>オブジェクトというとクラスのインスタンス
>900はISO/IEC 14882:2011を読み直せ
>>900 >オブジェクトというとクラスのインスタンスであると一意に決まると思うけど、
>これも間違い。
意味が逆になるような引用のしかたをするなよ。
間違いだって書いてあるのにそこを切り取って意味を逆にしてから批判。
>>920 kwsk
ちなみにsizeofは演算子であって関数ではないぞ
数学だってそうだろ。
πとか値の定義をするときは式をそのまま提示する。
概念を定義するときは「〜を満たすもの」という形で提示する。
C++限定で
decltypeの引数になりえるものがオブジェクト
sizeofの引数になりえるものがインスタンス
と定義してはどうか、それでうまくいくのではないか、って考えをいってみただけ。
>>920 「演算子の引数」って変?
なんでそんな珍妙な新解釈が必要なのか。
C++をOOの実現手段として見たときに C++の文法をOO的にどう解釈するかという話ならわかる。 単にC++の文法の話だったら死
>>838 うわあ
ソースを見た途端目がチカチカしたのは初めてだw
でもboostもこんな感じでマジキチなんだよな
939 :
838 :2013/12/08(日) 12:14:11.98
>>938 短く書く、ってのが達成できなかった。
できたのは「マクロがなし」くらいだ。
マクロがいっぱいあると追う気力が失せるから、それは良かったんだけどね。
メタプログラム書く時は自前のC++拡張言語からc++ソース吐かせるが 今時手書きなんてあるのか?
941 :
838 :2013/12/08(日) 12:35:27.15
>>940 kwsk
ところで親クラスのメソッドっていちいち 親クラス:: って装飾しなくても呼び出せるものじゃないんだっけ?
http://ideone.com/IwZvKM 50行目くらいからある func_signature_base の中でいちいち B:get1(): とか書かなきゃいけないのがウザい。
VCではなくても通るんだけど、ideon ではダメだったからこうしてる。
あと static long test(...); と static ILL return_t(...); も共通だから親クラスに置いときたいんだけど、それもダメ。なんで?
>941 > ところで親クラスのメソッドっていちいち 親クラス:: って装飾しなくても呼び出せるものじゃないんだっけ? type-dependent な基本クラスまで name lookup に行かない仕様だから。
>>941 C++はメソッドがないから呼び出すのは無理かな
>>942 どうもありがとう。
親クラスに(43行目の struct func_signature_base0)で大部分の仕事をするように変更しました。
親クラスは太ったけど各サブクラスがすっきりした。
嫌儲はもう掃き溜めしかいないん?
わしら百姓には関係ねえ話だべ
>>949 “本物のマクロ”ってこんなの?
template <typename T, bool b> struct less2 : std::less<T> {};
template <typename T> struct less2<T, false> : std::greater<T> {};
#define sort2(b, e, ope) std::sort(b, e, less2<decltype(*b), (1 ope 2)>())
int ar1[] = {8, 3, 2, 4, 9, 5, 1, 6, 7};
sort2(ar1, ar1 + 9, < ); //昇順ソート
int ar2[] = {8, 3, 2, 4, 9, 5, 1, 6, 7};
sort2(ar2, ar2 + 9, > ); //降順ソート
マクロ愛好家は老害
C++erって爺がほとんどでしょ
C++er←読めない
シープラプラサー
Eval< S< Car, S <Quote, shrot, int, long> > >::eval value; std::cerr << typeid( value ).name() << std::endl; 可変個引数templateとtemplate引数付きtypedefのお陰でますますtemplateによる 関数型プログラミングがしゃすくなった。
この最近よく見る排便レスはなんなの
vector<x<int > > こういうコードをよく見るんですが この>>って間をあけないといけないの?
960 :
デフォルトの名無しさん :2013/12/09(月) 18:19:05.62
C++でstd::exit使う馬鹿いないよね?
C++はMaximal-munch strategyの構文なのでトークン解析が右シフト演算子と判断しないために必要
>>958 馬鹿C++コンパイラーが多かったから
vector<x<int >> とすると">>"がシフトの">>"と誤認識された。
いまのコンパイラーはvector<x<int >>でも問題ないだろう
C++11だと通るよねたしかそれ
誤判定でなくC++の文法が見直されたから
>>949 python本体にschemeのコードを見た記憶がある
vector<x<int > >にしないといけなかって馬鹿すぎだよな
仕様を考えた奴が馬鹿
bindのプレースホルダでファンクタ自体を受けられるようにしてみた
int func1(int a, int b) { return a+b; }
struct func2 { int operator()(int a, int b) const { return a*b; } };
auto b = bind(_1, 8, _2);
int c = b(&func1, 7); //15
int d = b(func2(), 7); //56
http://ideone.com/IwZvKM これができることによって、
コンパイラが対応したとしても次はIDEが対応しなければ何の意味もない 戦いに終わりが訪れることは決してないのだ 賢者はふっと寂しげに笑い、> > とタイプし続けるのだった
bind何ソレうまいの?
もともと仕様検討不足だった点を訂正したのに 戦いに終わりはないと言って直そうとしないのは残念だな
しっかしラムダ式最強だな ほとんど組み込みの関数オブジェクトが不要になっちゃった
シンタックスが数ある言語の中で最も醜い 決めた奴ら100回死ねって感じ
仕様検討不足....hogeだろ
Pealよりマシ
酷い酷いとはよく聞くがだったらどうすればよかったのか?と聞くと誰も答えないんだよなあ
まずはstaticキーワードの意味の使い回しをやめるんだな
関数宣言とコンストラクター呼び出しの区別が付く文法にすべき。
{}で初期化できるようになったからそれはもう解決しただろ
983 :
デフォルトの名無しさん :2013/12/09(月) 21:18:03.39
struct hoge{}; enum hoge{}; ;がもういらない
それは今更どうにもできないだろう
>>979 はラムダの話だろ…
スレを1からとは言わんが30前ぐらいは読み返せよ
流れを切って申し訳ありません 2点相談させていただきたいのですが、 まずコンボボックスのイベントについて、 OnSelChangeで処理をするようにしてるのですが、直接入力する場合もあるので、 OnKillFocusでも同じ処理をしています。 しかし、コンボボックスをマウスで選択した後はフォーカスが残ったままになるので、 操作をするとOnKillFocusも呼ばれてしまい2度処理が走ってしまいます フォーカスはそのままで、処理を1度にするには何かいい方法はないでしょうか? 2点目はCOMについてなんですが、 CLIやC#だと using Microsoft.Office.Interop.Excel; として、簡単にExcelを使えるんですが、 C++でCOMを使うと.Netも必要になってくるんでしょうか? COMについてはほとんど知識がないもので見当違いかもしれませんがよろしくお願いします。
宣言と定義の基本的な仕様が場当たり的 というか いい加減だから文法が曖昧になってる気がする typename T::kuso_tとかやっつけ感が甚だしい T::template rebind<U>::otherとかマジきもい
>>983 で;をなくそうとした時の弊害ってなんかあるんだっけ
991 :
デフォルトの名無しさん :2013/12/09(月) 21:36:29.19
何でstruct hoge{}; などで最後;をつけるようにしたんだ?
>>992 型の導入と変数の宣言をひとつのsimple declarationに
押し込んだからじゃないでしょうか
struct t {} t;
この設計がおUNKO
>>993 ああ、それあったな。俺よく使っているのに、あほすぎだった,orz
void fun() { goto hell; 処理 hell: ; ←ここにセミコロン必要なのがキモいです… }
OnKillFocusを使うのが間違い
[[noreturn]] virtual inline auto fun() const volatile && throw() [[noreturn]] -> decltype(i) final override; こういう関数宣言の文法は覚えにくいです…
>>997 C++11の気合入り関数ってそんな感じに成るのか!
hogerじゃないとhoge++11は使えないのか
1000 :
デフォルトの名無しさん :2013/12/09(月) 22:16:39.96
とどめだ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。