【初心者歓迎】C/C++室 Ver.84【環境依存OK】
at TECH
[前50を表示]
100:デフォルトの名無しさん
13/05/11 19:52:49.13
>>99
ここはVisual C++スレではないので、Visual C++前提で
話をするのは止めて下さい
101:デフォルトの名無しさん
13/05/11 19:55:04.24
>>100
じゃあこのスレは何のコンパイラを使ってる人のスレなの?そこをはっきりさせてよ
>>1にも書いてないじゃん
102:デフォルトの名無しさん
13/05/11 19:56:03.55
環境依存おkなんだからどんなコンパイラだろうがいいだろ
103:デフォルトの名無しさん
13/05/11 19:57:30.47
>>102
そうかわかった
まあgccはEclipse CDT入れてるからいいけどさ
104:デフォルトの名無しさん
13/05/11 20:00:35.28
>>101
環境を述べた上であれば環境固有の話をしてもいいスレです。
Visual C++と説明した上でC90の話をすることは構いませんが
話の前提をVisual C++の低スペックに合わせる不自由を
他人に要求しないでください
105:デフォルトの名無しさん
13/05/11 20:03:23.82
VS2012が低スペックだと・・・?
106:デフォルトの名無しさん
13/05/11 20:03:48.04
もろちん
107:デフォルトの名無しさん
13/05/11 20:13:39.14
>>105
1990年仕様のままで
1999,2011の2回の改訂に
全く追従してないからな。
Cについては化石だろ?
108:デフォルトの名無しさん
13/05/11 20:19:31.69
msとしてはC++使えってスタンスだからな
しゃあない
109:デフォルトの名無しさん
13/05/11 20:20:21.64
gccとかclangの方がマシとは
110:デフォルトの名無しさん
13/05/11 20:38:59.38
ウンコVCにはハーブサッター氏も困っている
URLリンク(herbsutter.com)
111:デフォルトの名無しさん
13/05/11 20:44:37.15
でもMSってClangに興味を持って秘かに取り入れようとしてるんでしょ?SP2位で入れて来たりして
112:デフォルトの名無しさん
13/05/11 20:47:47.88
>>111
4月に出たうぷだて2には入っていませんでしたよ
113:デフォルトの名無しさん
13/05/11 20:53:30.93
>>111
半年の短期採用でどうにかなるもんじゃないだろ
114:デフォルトの名無しさん
13/05/11 20:56:43.58
という事は次期バージョンか、それとも有償プラグインかよ
115:デフォルトの名無しさん
13/05/11 21:04:25.96
>>99
いまやVC使っている奴よりGCCが圧倒的に多いだろ
VC捨ててGCCにする
116:デフォルトの名無しさん
13/05/11 21:06:19.35
>>115
winの仕事でgccって、オマエばかなの?
117:デフォルトの名無しさん
13/05/11 21:12:17.68
バカなんだろう
118:デフォルトの名無しさん
13/05/11 21:24:24.62
GPLで仕事か
羨ましい(笑)
119:デフォルトの名無しさん
13/05/11 21:31:12.46
でも、Visual C++ってC++11のサポートすら中途半端な低スペックだからな
低スペックな奴は低スペックなのが良いのかもな
120:デフォルトの名無しさん
13/05/11 21:46:58.52
企業が開発する有償のコンパイラが
2011年9月の規格を2012年に完全に
盛り込むのは難しいだろう。
VC6の時は規格制定から約3ヶ月後の
出荷だったし、不幸なコンパイラだな。
121:デフォルトの名無しさん
13/05/11 21:50:54.04
VC++は「みんな使ってるから安心」が最大のメリットなんだよ。
最新規格を追い求める向きはそういう製品をどうぞ。
122:デフォルトの名無しさん
13/05/11 21:57:47.19
>>120
細かいことだが前後が逆だぜ
Visual C++ 6.0: 1998年6月
C++第一版: 1998年9月
---おまけ
1999年 C改訂
2002年 Visual C++ .NETでスルー
2003年 Visual C++ .NET 2003もスルー
2005年 Visual C++ 2005もスルー
2008年 Visual C++ 2008もスルー
2010年 Visual C++ 2010もスルー
2011年 C改訂
2012年 Visual C++ 2012またもやスルー
123:デフォルトの名無しさん
13/05/11 22:01:04.11
vc糞過ぎる
124:デフォルトの名無しさん
13/05/11 22:23:51.36
みんなって言うか、少数民族がじゃない
125:デフォルトの名無しさん
13/05/11 22:27:03.20
>>124
仕事の話を趣味の話にすり替えないでください
126:デフォルトの名無しさん
13/05/11 23:43:30.87
趣味ならともかく仕事の話ってなると小数派になるんじゃない?
組み込み屋もC/C++使っているんだから
で、MSはいまやあんまりVCに力入れてないように感じるんだけど
127:デフォルトの名無しさん
13/05/11 23:45:28.77
まるで職業プログラマが全て組み込み屋みたいな言い方だね。
128:デフォルトの名無しさん
13/05/12 00:07:31.06
>>126
なんか明後日の方向には力入れてる。
C++/CLIとかC++/CXとかなんかもう訳分からんw
129:デフォルトの名無しさん
13/05/12 00:28:04.87
>>126
.NETの時代でしょー
SQL Server + .NETは超楽じゃん
130:デフォルトの名無しさん
13/05/12 00:56:56.72
仕様策定者がレファレンス実装を出さないのが悪い
131:デフォルトの名無しさん
13/05/12 01:01:02.49
>>128
C++の進化が亀過ぎで、自社で拡張しないといけないんだろう
MS的にはC++にしがみつくのは止めてねって感じかな
Win職業プログラマはMSの導きに従わないと、だんだん食いぱっくれるかも
132:デフォルトの名無しさん
13/05/12 09:41:38.56
>>130
参照実装と言えば、
C99のジェネリックって_Genericも無しに
どうやって実現すんだ?と思ってヘッダーを覗いたら
ウンコな実装で拍子抜けしたでござる
133:デフォルトの名無しさん
13/05/12 10:46:52.82
インターフェースがしっかりしててそれなりに動けばいいの
コンパイラ屋のモチベは下がるかも知れんけどw
134:デフォルトの名無しさん
13/05/12 11:31:36.35
C99の似非ジェネリックなんていらねーよ
C#のジェネリックの方がよほど使える
というかさすがにスレ違いか
135:デフォルトの名無しさん
13/05/12 11:37:31.51
そこでどうしてC++とかC11でなく
C#になったのた不思議。
第一、Cのジェネリックに対応するC#の仕様は
ジェネリクスでなくオーバーロード。
136:デフォルトの名無しさん
13/05/12 11:44:39.61
C#のジェネリックはC++のテンプレートとは全然違うんだぜという話をしようとしたが、
これはするとしたらC#スレで話するわ
137:デフォルトの名無しさん
13/05/13 21:28:49.53
むしろどう違うととらえてていたのか気になる
・C#では(クラス型は)物理的なインスタンスが一つ。
つまりオーバーロードの解決はコンパイル時
・そのためTが満たすべき条件をC#では基本クラスで指定
一方C++はコンセプトLite検討中?
・そのためC#は特殊化が原則無い
・でも倫理的なインスタンスの型情報(Tが何型か)は持っている
・C++は型以外の値そのものをパラメーターに指定可
使い勝手はあんまり変わらないような。
仕組み的にはC#は基本クラスの型を使って
実行時解決できるレベルの汎用化だけど
C++はコンパイル時に全てが決まるメタプログラミング
って点かな。。
138:デフォルトの名無しさん
13/05/13 22:44:27.60
今から勉強しようと思いますが
CよりC++を学んだ方が良いのでしょうか?
一通り使いこなせるようになるまで
それぞれどの程度かかりますか?
139:デフォルトの名無しさん
13/05/13 22:55:17.03
Javaでクラスとインタフェースを学んで
Cでどれほど危険なプログラムが組めるかを学んで
C++を学ぶのがいいと思うよ。
140:デフォルトの名無しさん
13/05/13 23:00:19.79
Javaを先にやると、Cのありがたみが
わからずに
「なんで何のチェックも無しに落ちるんだ」
「コンパイルエラーメッセージが意味不明」
「おまじない大杉」
などとクソ認定される恐れが大。
141:デフォルトの名無しさん
13/05/13 23:02:35.68
初学者は色々と不便な環境を経験しておいた方が
色々と気をつけるようになるのではないかと思う事はある
142:デフォルトの名無しさん
13/05/13 23:28:19.74
むしろ特定分野を狙うわけでもないのに
CやC++を勉強するのが無駄。
「ワシらは紙に穴をあけて…」と史実を
語られるレベル
143:デフォルトの名無しさん
13/05/13 23:41:26.11
ディップスイッチパチパチの人も
時々は思い出してあげて
144:デフォルトの名無しさん
13/05/13 23:53:03.96
よしじゃあCの前にまずPL/Iだな
145:デフォルトの名無しさん
13/05/14 07:55:35.04
PL/Mとどう違うの?
146:デフォルトの名無しさん
13/05/14 08:53:40.29
PL/Mは整数しか扱えんぞ
147:デフォルトの名無しさん
13/05/14 09:30:49.06
唐突なんだが、ヘッダファイルの拡張子はテンプレートクラスを含む時が.hppで、それ以外が.hだと
思ってたんだけど、先日C++のヘッダファイルは全部.hppにするのが業界標準だよって言われた。
業界が何を指してるのかイマイチよく分からなかったんだが(てか、サッパリ分からなかったんだがw)
実際どうなんですか?
148:デフォルトの名無しさん
13/05/14 12:02:03.60
Boost信者はhppを好む。
業界標準化と言われると微妙だな。
149:デフォルトの名無しさん
13/05/14 12:22:51.02
何処の業界かは知らないけど拡張子なんて飾りだよ
150:デフォルトの名無しさん
13/05/14 12:29:56.11
業界標準かどうかは知らないけど
Cコンパイラでコンパイルすることを(実際にできるできないにかかわらず)全く考慮してないならhppにする
また拡張子だけ見て強調や補間のモードを変更するエディタとかあるからhppにしといたほうが便利なときもある
151:デフォルトの名無しさん
13/05/14 19:44:39.78
.hppでも.hでもいいから混在はやめてほしい。
業界標準だよと言われたら「お前の中ではな」
と思っておけばいい。
152:デフォルトの名無しさん
13/05/15 12:29:19.47
派生クラスを複数生成したら
基底クラスも複数生成されるの?
基底クラスは1つ?
153:デフォルトの名無しさん
13/05/15 12:37:12.77
はい
154:デフォルトの名無しさん
13/05/15 12:59:43.87
いやどっちだよw
155:デフォルトの名無しさん
13/05/15 13:09:10.74
もう少し明確にしてくれ。クラスの定義の話かインスタンスの話か?
156:デフォルトの名無しさん
13/05/15 15:56:34.22
クラスの定義が複数生成されるとか嫌過ぎるわ…構文上の規約の問題とメモリの割り当ての理解がごっちゃになってる
hppってヘッダーにcppのコード突っ込んでリンカ解決やら楽しようぜ
h+cpp だから hpp だカッコいいだろう!!
みたいなイメージだ
157:デフォルトの名無しさん
13/05/15 17:58:27.63
>>152
クラスのインスタンスを人間にたとえると
基底クラスの顔と派生クラスの顔
つまり2つの顔を持つ人間が1人生まれる
158:デフォルトの名無しさん
13/05/15 17:58:48.01
「クラスを生成」はたいていの場合、
発言者は「クラスのインスタンスを
生成」のつもりであることが多い。なので
派生クラスのインスタンスを複数生成したら
それぞれに基底クラスのインスタンスが含まれる
159:デフォルトの名無しさん
13/05/15 18:04:20.08
自己顕示欲マンセー
160:デフォルトの名無しさん
13/05/15 18:17:38.64
複数の翻訳単位で派生クラス(テンプレートクラス)がインスタンスされた場合、
それぞれの翻訳単位で基底クラスが暗黙にインスタンス化される。
だがODRで一つと見なされるのでインスタンスの数を意識する必要はない。
コンパイル時間を短縮したいならexternでインスタンス化を抑制する
161:デフォルトの名無しさん
13/05/15 18:44:10.49
基底クラスだけテンプレートを
インスタンス化できる?
派生クラスのインスタンス化に
必要不可欠のような
162:デフォルトの名無しさん
13/05/15 19:49:38.87
基本クラスだけ?
逆?
163:デフォルトの名無しさん
13/05/15 20:00:26.86
最近hoge厨が静かになって
平穏がおとずれたようだ
164:デフォルトの名無しさん
13/05/15 20:03:42.01
自治スレか宿題スレに篭っているんでしょう平和が続くといいですね
165:デフォルトの名無しさん
13/05/15 20:10:12.64
hoge使いはUnixerに多い。
つまりUnixerは底辺。
msは底辺以下、
coolなguyはMacを選ぶね
166:デフォルトの名無しさん
13/05/15 20:28:03.36
Macは負け組
167:デフォルトの名無しさん
13/05/15 20:30:00.84
foo bar は?
168:デフォルトの名無しさん
13/05/15 20:33:57.17
Linux:キチガイ、変人が使う
MS:馬鹿が使う
林檎:自称かっこいい奴が使う
林檎は芸術家jobsの芸術作品だからな
169:デフォルトの名無しさん
13/05/15 20:35:44.05
どちらかというとマカーに基地外が多い
何でかわからないけどマカーの基地外率は異常
170:デフォルトの名無しさん
13/05/15 20:42:27.85
継承関係が A -> AA -> AAA の時にAAAのインスタンスを
生成するとAAとAのインスタンスも(見えないけど)生成される。
じゃないとスーパークラスのメソッドを呼び出せない。
171:デフォルトの名無しさん
13/05/15 20:42:53.09
>>169
馬鹿が自称かっこいい奴を見てキチガイいって思うのは
馬鹿だからしょうがない
172:デフォルトの名無しさん
13/05/15 20:47:16.94
>>152は多重継承の話をしてるんじゃないの?
173:デフォルトの名無しさん
13/05/15 20:55:25.05
Aを継承したB
Aを継承したC
BとCを継承したD
Dのインスタンス中に居るAのインスタンスは単一なのか
BにまつわるAのインスタンスと
CにまつわるAのインスタンスとの都合2つに分かれるのか
こういう話?
174:デフォルトの名無しさん
13/05/15 20:56:46.04
152の味噌汁
175:152
13/05/15 21:19:55.15
インスタンスを生成でお願いします
176:デフォルトの名無しさん
13/05/15 22:54:57.47
>>175
派生クラスのインスタンスの数に応じて基底クラスのインスタンスも複数生成される
struct X { int a; };
struct Y : X {};
Y y1;
Y y2;
のとき y1.a と y2.a は別物
177:デフォルトの名無しさん
13/05/15 23:02:17.63
つまんねっ
178:152
13/05/15 23:52:15.81
すいません書き直します
基底クラスAがあり、そのAの派生クラスBがあり
Bのインスタンスを何度も生成した場合
B1とB2の基底クラスインスタンスAは
A単体なのかA1、A2と増えていくのかどちらですか?
179:片山博文MZパンク ◆0lBZNi.Q7evd
13/05/16 00:00:10.27
>>178 後者
180:デフォルトの名無しさん
13/05/16 00:17:06.64
B1とB2はいったいどこから出てきたんだ
基底クラスインスタンスなんてわけわからん語を作るな
コードを書いて説明しろ
181:デフォルトの名無しさん
13/05/16 00:18:53.86
こういうのが説明力がないっていうんだよな
会社で煙たがられる存在
182:デフォルトの名無しさん
13/05/16 00:20:36.18
基底クラスインスタンスのメンバ変数を書き換えるようなメソッドを用意して実験したらいいんじゃないかな(エスパー)
183:デフォルトの名無しさん
13/05/16 01:01:07.62
インスタンスの数=newした数(Java風)
だから顔の数じゃなくてボディの数で数えろと
184:デフォルトの名無しさん
13/05/16 01:46:42.40
>>180
何度も生成するから
1、2、3、4、5…
と増えていくんだよ
185:デフォルトの名無しさん
13/05/16 07:19:43.02
単体なのか増えていくのか、
質問するより、自分でコード書いた方が早いだろ
186:デフォルトの名無しさん
13/05/16 09:52:49.32
こういうのは入門書でよくやる理解しやすいたとえ話でやるより
コード貼ってどうこうしたほうが…そもそも自作自演っぽく思えてきたけど
187:デフォルトの名無しさん
13/05/16 11:35:44.57
たしかにQZはC++の知識がないから
QZの自演ってことはありうる
188:デフォルトの名無しさん
13/05/16 12:25:09.68
>>178
結局何を聞きたいのかさっぱりだ
189:デフォルトの名無しさん
13/05/16 12:34:47.33
派生を生成するために
基底のインスタンスも増えていったらメモリの無駄じゃないの?
190:デフォルトの名無しさん
13/05/16 12:38:06.02
>>189
だったら派生せずに新しくクラスを作ればいいじゃん
191:デフォルトの名無しさん
13/05/16 12:38:42.93
>>189
派生のインスタンスの中に基底のインスタンスに相当する部分が含まれているのでは?
192:デフォルトの名無しさん
13/05/16 12:40:31.09
継承を一体何だと思ってんだか
193:デフォルトの名無しさん
13/05/16 12:46:03.41
派生を複数生成しても
基底は1つになる方法はない?
194:デフォルトの名無しさん
13/05/16 12:48:54.89
なんか意味を正しく理解してないのがいそうだからこの流れでは『インスタンス』禁止にしとけ
クラスTのインスタンス -> T型の変数 と言い換えとけ
195:デフォルトの名無しさん
13/05/16 13:19:11.46
>>193
継承を使わずに基底にあたる型をshared_ptrとかでメンバに持つクラスにしろ
196:デフォルトの名無しさん
13/05/16 13:25:38.02
>>193
virtual継承
197:デフォルトの名無しさん
13/05/16 13:38:48.28
>>193
is-aとhas-aの違いはわかる?
198:デフォルトの名無しさん
13/05/16 15:53:31.31
学生は人である
学生を増やしても人のインスタンスが一つになっている状況とは如何に
あれか、学生数の水増しかw
199:デフォルトの名無しさん
13/05/16 16:17:39.82
>>193の中では継承はどういうイメージになってるんだ?
200:デフォルトの名無しさん
13/05/16 17:01:59.23
>>193
派生を使わない。
基本クラスに持たせようとしていた情報は
グローバル変数で持つ。
派生クラスに持たせようとしていた情報は単独の
クラスにして
みんなでグローバル変数をみる
201:デフォルトの名無しさん
13/05/16 17:04:43.82
>>193
コンポジションを使うとか
どうしても継承が必要なのか、継承を使わなくてもいいのかはよく検討すべき
202:デフォルトの名無しさん
13/05/16 18:30:51.59
もうAとBとB1とB2を全部
グローバル変数にしようぜ
203:デフォルトの名無しさん
13/05/17 01:01:04.77
1.const char* a //*aがconst
2.char* const b //bがconst
3.char const* c //1.と同じ?2.と同じ?
4.const char& d //dがconst?
5.char& const e //どこがconst?
6.char const& f //ドカーン!
constが分からんとですorz
204:デフォルトの名無しさん
13/05/17 01:02:41.45
>>203
何故自分で試そうとしないのですか?
205:デフォルトの名無しさん
13/05/17 01:11:23.80
>>203
これ見てわからなかったらもう来るなよミジンコ
URLリンク(ideone.com)
206:デフォルトの名無しさん
13/05/17 01:41:05.07
くぎゅうぅぅ
207:デフォルトの名無しさん
13/05/17 01:47:27.57
>>203
とりあえずconstは(変数ではなく)型に付くと覚えましょう
1.const char* a //const char型へのポインタ(型)(の変数)a
2.char* const b //char型へのconstポインタ(型)(の変数)b
3.char const* c //1.と同じ
4.const char& d //const char型への参照(型)(の変数)d (※)
(※この形を『const参照』と呼びますがconst型への参照(型)の意味であって、型へのconst参照(型)の意味ではありません)
5.char& const e //エラー
6.char const& f //4.と同じ
208:デフォルトの名無しさん
13/05/17 02:03:39.74
constは左隣につく、左側がない場合のみ、例外として右側につく、と覚えてる
209:KUSO KOTE
13/05/17 02:15:00.69
昔「エキスパートCプログラミング 知られざるCの深層」
というおUNKOな本があって、
型宣言の説明だけは素晴らしかった。
その読解法によると
const char* a
a is a pointer to "const char"
char* const b
b is a const pointer to char
char const* c
c is a pointer to const char (=a)
const char& d
d is a reference to "const char"
char& const e
e is a const reference to char→エラー
char const& f
f is a reference to const char
210:デフォルトの名無しさん
13/05/17 07:20:10.83
>>203
1, 4 は例外的だし意味もあいまいだから「使わない」
211:デフォルトの名無しさん
13/05/17 07:40:06.86
>>210
それぞれ3と6を使うってこと? それならむしろ自分は逆だなあ。
212:デフォルトの名無しさん
13/05/17 08:52:28.92
char const* a は const *a だから、*a がコンスト
char* const a は const a だから、a がコンスト
って考えると、3, 6は確かに自然な気がする
でも、char const& a は const &a だから、&aがコンストかっていうと
何それイミフw
って考えると、全然自然じゃない気もする。
213:デフォルトの名無しさん
13/05/17 09:12:40.30
constは
・左側で一番近い
・型に付いて
修飾するというのが基本ルール
>>203の1,4はその基本ルールでは解釈できず>>208,210のいうように例外的に解釈しなければならないから不自然
>>212はconstが右側の、型ではない*aやaや&aに付いてる、という解釈の時点で最初から二重に間違ってる
214:デフォルトの名無しさん
13/05/17 10:15:43.42
なるほどなー。
自分は1,4を使う派だけど、constをどちらの目的で使うかによって、
型名とconstの位置が逆になるので、パッと見て分かりやすいかなー?と思っている。
215:デフォルトの名無しさん
13/05/17 10:49:49.41
>>213
なるほど、てことは const の左側に「が」を補って
char const* は char が const
char* const は char* が const
char const& は char が const
char& const は char& が constはイミフだからエラー
って考えると自然?
216:デフォルトの名無しさん
13/05/17 12:03:02.39
そんなかんじでいいんじゃない
217:デフォルトの名無しさん
13/05/17 12:43:38.38
左側にconstは記憶域指定子(static,extern,...)付きの宣言とぱっと見同じ読み方で解釈できて
const初見の人でも受け入れやすい形だから便宜的に導入された記法なのかな
int a; // int
static int a; // なにかついてるけどint
extern int a; // なにかついてるけどint
const int a; // なにかついてるけどint
int const a; // なにかついてるけどconst、・・・?
218:デフォルトの名無しさん
13/05/17 12:46:15.89
>・左側で一番近い
規格の該当個所はよ
219:KUSO KOTE
13/05/17 15:03:07.06
>>217
記憶域指定子は別に左でなくても良いのだけれど
URLリンク(ideone.com)
220:KUSO KOTE
13/05/17 15:12:14.57
URL間違えたoops
URLリンク(ideone.com)
221:デフォルトの名無しさん
13/05/17 15:19:59.33
URLリンク(msdn.microsoft.com)
stringを取得する関数ってこれみたいに参照渡ししてることが多いけど、stringをreturnで返したら駄目なの?
222:KUSO KOTE
13/05/17 15:31:43.27
>>221
昔は右辺値参照が無かったから
コピーのオーバーヘッドを避けるために
参照にしていたと思われる。
223:デフォルトの名無しさん
13/05/17 15:47:36.06
やはりマイクロソフトの設計思想かな
マイクロソフトは昔から関数を
inに対してoutを与えるものでなく
「正否のステータスを返せるサブルーチン」
ととらえているところがある。
だから戻り値は参照渡しで受け取る
224:デフォルトの名無しさん
13/05/17 15:50:21.95
>>221
C++の.NET拡張はスレ違い
225:デフォルトの名無しさん
13/05/17 16:13:49.70
>>224
221はただの例示で本題はstd::stringだからな?
226:デフォルトの名無しさん
13/05/17 16:22:45.99
C++の文字列はJavaみたいはimmutable
じゃないからねえ。
わざわざインスタンスを生成するより
使い回す方が自然。
227:デフォルトの名無しさん
13/05/17 19:52:53.57
今回のconstもだけど、テンプレートやポインタ等の型を
コンパイラはどのように構文解析して型を決めるんだ?
228:デフォルトの名無しさん
13/05/17 22:10:02.07
その状況で構文規則的にありえる構文候補を列挙してソースとマッチするものに絞り込んでいくんだがそういう話でなく?
229:デフォルトの名無しさん
13/05/17 22:14:50.72
*で区切られると覚えれば
別に左とか右とかそんなのどうでもいいんだよ
230:KUSO KOTE
13/05/17 22:20:16.28
>>227
1.明らかにシンボル名と思われる所を見つける
2-1.すぐ右に()があれば関数
2-2.すぐ右に[]があれば配列
2-3.すぐ左に&があれば参照
2-4.すぐ左に*または*constがあればポインターまたはconstなポインター
2-5.すぐ左に「型」または「型 const」または「const 型」があれば終わり
3.その 関数の戻り値/配列の要素/参照先/ポインターの差すものは…
→2-1に戻って解析を続ける
ただし途中に記憶指定子とか入るので適当にがんばる
231:デフォルトの名無しさん
13/05/17 22:29:30.64
くそみそ
232:デフォルトの名無しさん
13/05/17 22:58:32.42
"const"は型の前と後のどちらに置いたほうがよいですか
URLリンク(www.libjingu.jp)
233:デフォルトの名無しさん
13/05/17 23:02:15.59
日本語でも英語でも修飾子や形容詞は名詞の前にあったほうが読みやすいってことか
234:デフォルトの名無しさん
13/05/18 00:27:47.88
欧米人には>>209のC/C++表記だとすぐにそのように解釈できるのかな
同様にC/C++の型表記も自然な表記って感じるのか
俺的には、配列は int arr[10]じゃなく int[10] arrがいいだろって
初めのころは思っていたからな。
235:デフォルトの名無しさん
13/05/18 00:38:49.32
Cの文法がint[] a でなくint a[]なのは
使う時の書き方に似せるという
方針だったはず。
だがC++で参照&が登場した際に一貫性を失った。
ハゲは臭いものにフタをするタイプだから
整合性を考えなくて困る。
236:KUSO KOTE
13/05/18 01:15:59.31
>>235
宣言と使用の記述の統一ついては
ISO/IEC 9899:1990の時点で既に
宣言 void (*pf)() = f;
使用1 pf();
使用2 (********pf)();
とか怪しかったような。
237:デフォルトの名無しさん
13/05/18 01:31:31.65
そんなことよりC#でやろうぜ
文法キモイ言語はポイしなさいポイ
238:デフォルトの名無しさん
13/05/18 08:04:30.10
規格の何番の何ページという話は
規格オタ隔離スレでも作ってそこでやれ
初心者スレなんだよここは
239:デフォルトの名無しさん
13/05/18 09:20:03.56
>>238
いやそのりくつはおかしい
240:デフォルトの名無しさん
13/05/18 10:14:01.38
有識者が初心者に正しい使用を教える
ってよりは、
俺こんなに規格読み込んでるゼーっていう、
自己顕示欲旺盛な人たち同士の会話で、
初心者置いてけぼりなふいんきが
感じられる。
241:デフォルトの名無しさん
13/05/18 15:22:32.62
>>237
C#で済むプログラムしか作らないなら黙ってC#使えばいいんだよ
お前がこのスレに居ることが全くの無駄
242:デフォルトの名無しさん
13/05/18 15:32:38.93
>C#で済む
この言い回しが勘違いも甚だしい。
「CはC#よりすごいんだ!」的な
自分の中で自分の価値を高めようと
必死なのがよくわかる。
243:デフォルトの名無しさん
13/05/19 00:45:26.82
Cのが速いんだから当たり前
244:デフォルトの名無しさん
13/05/19 00:52:59.09
.NET FrameworkのJITコンパイラの質がどんどん向上してスピードが上がってるんだが
セキュリティの更新だけだと思ってるのか?
245:デフォルトの名無しさん
13/05/19 00:59:54.36
より低級な部分の処理には(ryですね、分かります
246:デフォルトの名無しさん
13/05/19 01:14:04.19
そのうちアセンブラを追い越す性能になるかもなw
247:デフォルトの名無しさん
13/05/19 01:17:53.99
>>246
アセンブラ直接弄ると、小数の丸め処理まで制御できるからな……
コンパイラがどこまで解釈できるかの勝負
248:デフォルトの名無しさん
13/05/19 01:41:00.42
>>244
それでもC/C++に比べりゃゴミみたいなもんだよ
249:デフォルトの名無しさん
13/05/19 02:06:25.95
書き手の技量次第でFAではあるが、平均的なプログラマを前提にすると
手書きアセンブラと今時のC/C++コンパイラってどっちが速いか微妙じゃね?
250:デフォルトの名無しさん
13/05/19 02:11:20.47
アセンブラにしたって速度が要求されるコアな部分だけ使うのが
本来の使い方だからね。
251:デフォルトの名無しさん
13/05/19 02:17:33.53
ぷっ
252:デフォルトの名無しさん
13/05/19 05:05:15.33
速度って言うけどさあ
細かい動的メモリ確保が
壊滅的におそいじゃんC/C++は。
そういうのを自前でメモリ管理すると
圧倒的に速くはなるんだが
VM系のnewの代替としては限界がある。
253:デフォルトの名無しさん
13/05/19 06:49:35.08
え?malloc freeやら new deleteがめちゃくちゃ遅いってこと?
そんな話聞いたことがないが
254:デフォルトの名無しさん
13/05/19 06:49:49.29
>>252
そういうのは自分でなんとかするものだ
255:デフォルトの名無しさん
13/05/19 07:39:02.23
>>253
mallocは明らかに遅いだろう
256:デフォルトの名無しさん
13/05/19 07:44:57.58
なにと比べて?
257:デフォルトの名無しさん
13/05/19 07:50:20.62
いや、普通の関数呼び出しとか
浮動小数点数演算とか
ポインターアクセスとか
自動変数のメモリ確保と比べて
258:デフォルトの名無しさん
13/05/19 07:51:08.31
中でリニアサーチを始めてると聞いた
259:デフォルトの名無しさん
13/05/19 07:52:19.07
当たり前だろう
ヒープを利用するのはそれだけのコストを払っても便利だからなのでは?
260:デフォルトの名無しさん
13/05/19 07:53:22.13
>>258
二分木にして適切にサーチする実装くらいあるだろう
261:デフォルトの名無しさん
13/05/19 07:53:54.40
>>259
多言語との比較の話を
Cのメモリ確保方法の話に
すり替えないでください
262:デフォルトの名無しさん
13/05/19 07:55:33.29
他の言語だと早いのか?
263:デフォルトの名無しさん
13/05/19 07:56:16.70
1秒間に100万回ループする所では
mallocの使用はためらわれるけど
Javaならまあ大きな問題はなかろう
264:KUSO KOTE
13/05/19 08:03:58.39
さすがに100満開はかなり厳しいぞよ。
でも体感でJava/C#のnewはC++のnewより100倍は高速かな。
後でまとめて別スレッドでGCするんだから
解放時間入れてもスループットは高いだろう。
スループットだけは。
265:デフォルトの名無しさん
13/05/19 08:06:31.49
でもOSのカーネルじゃ使い物にならないよね(プゲラ
266:デフォルトの名無しさん
13/05/19 08:09:02.71
コンテキストスイッチしようとしたら
ゴミがゴミ整理しようとして
5000マイクロ秒 待たされちゃいました。てへ
267:デフォルトの名無しさん
13/05/19 08:20:33.29
>>262
ガベコレ系の言語は
C/C++の自動変数の代わりに
newする設計なのでそれなりに速いよ
ただ適材適所というか、やっぱり
CPU演算メインな処理は
C系じゃなきゃね
268:デフォルトの名無しさん
13/05/19 08:39:56.90
たしかに、すべての変数がnewで確保されるのだから
Cのように100ナノ秒ちかくかかっていたら使いものに
なってないっていう
269:デフォルトの名無しさん
13/05/19 09:03:42.10
でもJava/C# は C/C++ に比べて何を省略したからスピードアップを図ることができたの?
GC があろうとなかろうとアロケーションという点では同じだとおもうんだけれど
270:デフォルトの名無しさん
13/05/19 09:11:39.60
コンパイル時になんでもかんでもしようとしないからじゃね
271:デフォルトの名無しさん
13/05/19 09:21:52.31
>>269
マイクロソフトのドキュメントには
「ガベコレ用スタックポインターをずらすだけなので高速です」
と書いてあったような。
つまり確保する領域の中に
「後でそれだけでガベコレできる情報」
を埋め込んでいることになる。詳細は不明
272:デフォルトの名無しさん
13/05/19 09:26:03.10
URLリンク(www.google.co.jp)
273:デフォルトの名無しさん
13/05/19 09:40:50.19
>new Byte[1024]
Cが速いという結果を得るための設定ですね?
しかもJava1.5って、Sunが.NETを参考に
GCを改良する前のやつ?
274:デフォルトの名無しさん
13/05/19 09:54:40.89
>>252
.NET のメモリ確保は0埋めするから壊滅的に重いじゃねーか
275:KUSO KOTE
13/05/19 10:16:56.51
>>274
実測して比較しようじゃないか
URLリンク(ideone.com)
276:KUSO KOTE
13/05/19 10:23:30.46
すまん間違えた
microseconds→milliseconds
C#あんま速くなかったわ
277:デフォルトの名無しさん
13/05/19 10:26:43.12
C#は配列確保がクソ重いからメモリプールしてるわ
278:KUSO KOTE
13/05/19 10:28:11.15
ちなみに俺の環境では
C++:150マイクロ秒
C#:0.15マイクロ秒
279:デフォルトの名無しさん
13/05/19 10:43:14.88
>>278
それ、 >>276 の間違いは直して出してるの?
280:デフォルトの名無しさん
13/05/19 10:50:21.93
コンパイラによっては内部実装がdlmallocになって、
昔よりかは高速になったって聞いたけど
281:KUSO KOTE
13/05/19 11:03:34.06
>>279
直してるつもりなんだけど
あんまりVC++2012が遅いので不安になってきた。。
できれば誰か他の人、試して ↓修正版
URLリンク(ideone.com)
282:デフォルトの名無しさん
13/05/19 11:06:57.53
そりゃそんな細かいメモリ確保したら遅いのは当たり前だわ
流石にそういうのは .NET に分があるのは間違いない
283:デフォルトの名無しさん
13/05/19 11:15:58.40
つまりC++の細かいメモリ確保は
Java/C#より千倍遅いとふむふむ
284:デフォルトの名無しさん
13/05/19 11:25:34.32
C++とC#でNが違うだろ>>281のソース
285:デフォルトの名無しさん
13/05/19 11:26:54.20
C++でもアロケータ自作で乗り切れるが
そもそもそんな細かいnewを何度も行うケースは稀だから
意味の無い比較だな
286:デフォルトの名無しさん
13/05/19 11:28:49.49
boost::poolをいろいろ使ってみるとか
種類があるから
287:デフォルトの名無しさん
13/05/19 11:30:52.81
最適化はやってるんだよね?
確かVCはデバッグ用だといろんな情報を埋め込んでて遅くなったと思うけど
288:デフォルトの名無しさん
13/05/19 11:33:49.10
>>284
平均する時に割ってるからいいじゃん
むしろ速すぎて100倍しないと
測れなかったんだろ(プ
>>287
最適化してなかったら死刑だなw
289:デフォルトの名無しさん
13/05/19 11:40:00.45
ideoneは最適化しなかったような
290:デフォルトの名無しさん
13/05/19 11:41:23.84
エクスプローラへのD&Dを試してみてるんだけど、何故か遅い
一回のドロップ操作完了までに、2〜3秒位掛かるんだけどこれ遅すぎだよな?
291:デフォルトの名無しさん
13/05/19 11:41:59.66
>>282
このプログラムのような細かいメモリ確保に対してC++では不可能で.NETが可能な最適化とは?
292:デフォルトの名無しさん
13/05/19 11:42:57.93
標準でミリ秒測定できるとはいい時代になったなー
GetTickCount()とか
gettimeofday()を使っていた頃が懐かしい
>>290
エロアニメの見すぎだろ
293:デフォルトの名無しさん
13/05/19 11:43:19.23
>>291
最適化の問題ではなく、
そもそもデバッグ用のメモリアロケータは
バッファオーバーフロー検知や初期化漏れ検知のために
色々と小細工してる
294:デフォルトの名無しさん
13/05/19 11:48:09.15
>>293
それがC++と.NETの違いだとは思わんのだが。
295:デフォルトの名無しさん
13/05/19 11:49:37.20
>>293
じゃあ君のパソコンで比較して
結果貼りつけてみなよ
俺はメンドイからやらん
そもそもメモリ管理の仕組みが
根本から違うんだっての
最適化の問題じゃない
C++使いがガベコレにnewで勝てると
思ってたなんて新発見だわ
296:デフォルトの名無しさん
13/05/19 11:49:50.38
>>294
小細工ってのは、特定の値で初期化することで、
初期化のコストが発生する
297:デフォルトの名無しさん
13/05/19 11:51:54.14
>>269
フリーリストを手繰る処理を省略して、その分の処理をGC時にやってるようなもんだろう。
総計算量はイコールとは限らんが。
298:デフォルトの名無しさん
13/05/19 11:53:20.57
>>295
勝ち負けで言ったら予測不能な
中断を受ける可能性が入るC#は
処理時間にシビアな世界では負けだな
役に立たない
299:デフォルトの名無しさん
13/05/19 11:55:21.04
C/C++を使う理由は速度とかじゃない気がする。
.NETは十分速いもん
体感的には.NETが遅いので、C/C++を使うじゃないかとー
300:デフォルトの名無しさん
13/05/19 11:55:29.30
C++のほうは個別のdelete終了ごとにアロケータの内部整合性を保たないといけないけど、
GCなら一括でいろいろできるね。
301:デフォルトの名無しさん
13/05/19 11:56:19.37
>>299 .NETはPC上でしか動かないからな。組み込み.NETランタイムとか開発されれば別だが。
302:デフォルトの名無しさん
13/05/19 11:58:53.09
速度だよ
似たようなアルゴリズムを .NET で実行と明らかに遅い
303:デフォルトの名無しさん
13/05/19 12:04:51.96
標準、dlmalloc、tlsf、固定プールとか
いろいろ比較してみたいけど、なんか環境用意するのが面倒だな…
304:デフォルトの名無しさん
13/05/19 12:08:21.19
>>302
比較コードはよ
305:デフォルトの名無しさん
13/05/19 13:00:24.45
あいかわらず無意味な比較してるなあ
.NETのコア部分はC++で書かれてるのに
306:デフォルトの名無しさん
13/05/19 13:06:32.79
何かが成功するかタイムアウトするまでループって処理で
for (int i = 0; i < 5000; i += s){
nanika = suru();
if (nanika == seikou) break;
sleep(s);
}
みたいのが繰り返し出てくるんだけど、何か上手い書き方ないですか?
optional r = seikou_or_timeout(5000, [](){ return optional(...); });
こんな感じで書けたら素敵なんですが・・・・・・
307:デフォルトの名無しさん
13/05/19 13:08:47.13
WaitForSingleObjectで別スレッドで動かすとか
308:デフォルトの名無しさん
13/05/19 13:09:50.63
そこまで書けるのなら書けば良いじゃん
309:デフォルトの名無しさん
13/05/19 13:10:13.45
>>305
>>253の疑問を晴らすには
そんなにおかしな比較とは思えんが、
いつかの空ループベンチよりはマシだ
>.NETのコア部分はC++で書かれてるのに
惨めwww
310:269 ◆QZaw55cn4c
13/05/19 13:12:31.15
>>297
>総計算量
アロケーションからリリース(GC込みこみ)までトータルでみてどっちのほうが速いかというのが気になります。
C/C++ の場合は cmalloc() させるとしても、それでも C/C++ の方が速いと、どーしても思うのですが
311:デフォルトの名無しさん
13/05/19 13:14:51.55
>>306
win32api ならイベントオブジェクトを好んでいるんですけれども‥‥posix 系はどうしているのだろう?
312:デフォルトの名無しさん
13/05/19 13:22:24.52
>>308
ラムダ式が何を返すにしろとにかくoptional的な何かに突っ込んで返すってとこがどう書けばいいのか
よく分からないのと、もしかしたらループ以外に何か上手い方法か、そういうライブラリが既にあったり
するのかな?という期待も込めて・・・・・・
313:デフォルトの名無しさん
13/05/19 13:23:08.79
>>307 >>311
イベント、ちょっと調べてきます。
314:290
13/05/19 13:37:52.62
OLE D&D動作の確認だから、ドロップしたファイルのサイズは1kb程度
これだけで、2〜3秒はやっぱり遅い(Windows XP)。
んで、他のOSで(Windows7)確認してみたら一瞬、OS依存か
315:デフォルトの名無しさん
13/05/19 14:06:21.42
>>311
POSIXには条件変数というクソな同期の仕組みがある。
そのクソ仕様はそのままC++11に取り込まれたけどな。
316:デフォルトの名無しさん
13/05/19 14:37:12.62
>>310
>>281のC#はGCを含んでるだろ
317:規制外板にてレス代行依頼中
13/05/19 15:13:13.94
すいません。
dup2の動きについて教えてください。
dup2(oldfd,newfd);
でoldfdとnewfdが同じ値の場合、dup2() は何もせず、newfd を返す。
というのが正しい処理だと思います。
そこで質問なのですが、昔の環境だと、
この処理はどのようになっていたのでしょうか?
URLリンク(www.freebsd.org)
に、(もし、指定された番号の記述子が使用中の場合、 dup2 は、まずその記述子を閉じたのち、 再割り当てします)。
とありますが、
昔の環境だと、dup2(oldfd,newfd)で同じファイルディスクリプタを
指定した場合、どのように動作していたのでしょうか?
318:デフォルトの名無しさん
13/05/19 15:38:02.15
>同じ値の場合、dup2() は何もせず、newfd を返す。
>というのが正しい処理だと思います
その根拠は?
319:規制外板にてレス代行依頼中
13/05/19 15:51:35.67
>>318
manに書いてあったためです。
URLリンク(linuxjm.sourceforge.jp)
URLリンク(www.jp.freebsd.org)
では逆に教えてください。
oldfdが有効である。
dup2の引数のoldfdとnewfdが同じ値である。
この場合に、dup2の戻り値がoldfdと違う場合は、どのような条件が
考えられるのでしょうか?
320:デフォルトの名無しさん
13/05/19 16:01:03.13
>>319
そのLinuxの方はエラーが無い限りoldを
返すと書いてあるので、エラーが起きたかバグがあるか
BSDの方はエラーがある場合は同様だけれど
エラーが無い場合について言及されていないので
何が返っても文句は言えない
それ以上のことはリンク先のISO/IEC 9945-1:1990
とやらを読まないとなんとも
321:デフォルトの名無しさん
13/05/19 18:17:05.12
>>306
C++11ならasyncとfuture::wait_for使うところかな
322:デフォルトの名無しさん
13/05/19 18:30:11.24
中断が必要なものにfutureねぇ。
メイン側に待つ以外のやることもないし。
ループ構造なんだから、ループ開始前に
取得した
時刻からの経過時間に閾値を設けて
タイムアウトさせる所じゃないの?
323:デフォルトの名無しさん
13/05/19 23:10:03.14
>>315
条件変数ってcondition variableのこと?
それならwin apiにもあったような
324:デフォルトの名無しさん
13/05/19 23:32:23.75
for ( auto i = 0; i < 3; i++ )
const int N = 10 * 1000;
for ( auto i = 0; i < N; i++ )
これらの場合の、iの型の推論はどう行われるの
上のiは0以上3未満だからunsigned
下のiはconst int Nとの比較するからint
って感じ?
325:デフォルトの名無しさん
13/05/19 23:36:31.46
0はintなのでintです
終了
326:デフォルトの名無しさん
13/05/20 03:08:47.68
autoで宣言する意味はないぞ。
327:デフォルトの名無しさん
13/05/20 03:20:55.82
ゼロオーバーヘッドさん現る
328:デフォルトの名無しさん
13/05/20 07:21:26.05
数値リテラルは型が分かりにくいのでautoにしない方がいい
329:デフォルトの名無しさん
13/05/20 11:08:50.04
イテレータはautoが有効活用される場面の1つだし、
>324くらいならautoでもいいんじゃね? と思ったりする
330:デフォルトの名無しさん
13/05/20 11:15:54.75
URLリンク(www32.ocn.ne.jp)
こういう例はautoで書いた方がいいだろう
331:デフォルトの名無しさん
13/05/20 18:39:16.79
サイズを指定するような定数や
ループインデックスに厳密な型の
意識が必要か?
むしろautoでお茶を濁したいところ。
実数だけ区別ついてれば構わん。
332:デフォルトの名無しさん
13/05/20 18:49:03.43
>>324のNがintじゃなかったら型の不一致でバグのもとだ
autoよりもdecltype(N)のほうがいいだろう
333:デフォルトの名無しさん
13/05/21 01:09:20.63
autoなんてゆとり機能使うの止めて
334:デフォルトの名無しさん
13/05/21 01:26:57.88
>>333
じゃあ>>330みたいなのをautoなしで書いてみてよ
335:デフォルトの名無しさん
13/05/21 01:38:22.92
プログラムなんてゆとり機能を使わずに
紙と鉛筆で何でも処理すべきだな
336:デフォルトの名無しさん
13/05/21 06:38:06.80
IT屋はみんなしねばいい
お前らがシステム構築して作業効率あげるから
ノルマが増えたり仕事を追われる人がたくさん出てくる
社会を破壊してるクズという自覚をもて
337:デフォルトの名無しさん
13/05/21 07:25:52.21
出たよ逆恨み
338:デフォルトの名無しさん
13/05/21 07:29:31.14
事実だな
うちも馬鹿が自慢のツール()作るのが生きがいにしてて
仕事を自動化するからノルマが増えてクソだるい
一度やるとツール使えない現場でも同じ仕事量もとめられんだよカスが
339:デフォルトの名無しさん
13/05/21 07:44:34.90
ざまあ
340:デフォルトの名無しさん
13/05/21 15:07:06.00
事実だな
馬鹿どもが平日毎日会社いくから俺まd
まあ誰も何もしないで他の会社や国だけ効率あがってったら
最終的に全員仕事追われるとは思うがな
341:デフォルトの名無しさん
13/05/21 21:12:51.25
visualc++ 2010 express でSendMessage使いたいんだけど
spy++がないからどういうメッセージか調べられないけど
どうすればいいかな?
342:片山博文MZパンク ◆0lBZNi.Q7evd
13/05/21 21:14:51.06
>>341
winspector spy
spyguru
343:デフォルトの名無しさん
13/05/21 21:18:12.48
>>341
>spy++がないからどういうメッセージか調べられないけど
まず、何をしたいのかよくわからない
344:デフォルトの名無しさん
13/05/21 21:37:54.75
>>341
Professional版買うのがいいと思うよ
無償版のC++でGUIアプリとか無理ゲー
345:デフォルトの名無しさん
13/05/21 21:40:02.19
インターフェイスなんか♯でいいだろ
346:デフォルトの名無しさん
13/05/21 22:40:29.69
VS2010でC++は確かプラットフォームSDK入れないと
ネイティブコンパイルできないんじゃなかったっけ。
347:デフォルトの名無しさん
13/05/21 22:41:39.68
ちなみにVSでProが必要なのは仕事でチーム開発する人とか
だけだと思うよ。基本機能はExpressで全部そろってる。
SDKとか追加で入れる手間はあるけど無料だし。
348:デフォルトの名無しさん
13/05/21 23:00:36.68
>>342-344 VC6ではWM_〜をそのままコピペで使えたけど実力不足で
2010でSendMessageは難しそうです。レスありがとうございました。
349:デフォルトの名無しさん
13/05/21 23:42:22.88
>>347
仕事でもVSS使ってるとこなんてごく少数だろ。
それよりもMFC/ATLが必要でPro買ってるのがほとんどじゃねーか?
350:デフォルトの名無しさん
13/05/22 00:06:53.16
TFSは2012でExpressが出たでー
351:デフォルトの名無しさん
13/05/22 00:22:58.84
visualassistがないとコーディング時のストレスがやばいからpro買ってる
352:デフォルトの名無しさん
13/05/22 00:47:20.01
>>349
Proの評価版を入れてspy++を使えば良いんじゃ
評価版のspy++をexpressにコピペすればspy++が使えるんじゃないのか
評価期間終了したらコピペspy++を消せば良い
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4056日前に更新/71 KB
担当:undef