C++相談室 part84
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/09/18(土) 00:09:47C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part83
http://hibari.2ch.net/test/read.cgi/tech/1280914463/
0002デフォルトの名無しさん
2010/09/18(土) 00:10:03[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://www.cppreference.com/ (英語)
http://www.cppreference.com/wiki/jp/ (↑の日本語訳だけどまだ未完)
[禿 Stroustrup]
http://www.research.att.com/~bs/
[C++ International Standard]
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
[JIS X3014]
http://www.jisc.go.jp/app/pager?id=15868
ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。
0003デフォルトの名無しさん
2010/09/18(土) 00:10:09[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
SGI-STL http://www.sgi.com/tech/stl/
STLport http://stlport.sourceforge.net/
GNU libstdc++ http://gcc.gnu.org/libstdc++/
Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
http://sourceforge.net/projects/loki-lib/
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0004デフォルトの名無しさん
2010/09/18(土) 00:10:16amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
http://www.amazon.com/exec/obidos/ASIN/0201760428/
0005デフォルトの名無しさん
2010/09/18(土) 00:10:26Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
http://www.amazon.com/exec/obidos/ASIN/0321227255/
■長いソースを貼るときはここへ。■
http://codepad.org/
0006デフォルトの名無しさん
2010/09/18(土) 00:10:34環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0007デフォルトの名無しさん
2010/09/18(土) 00:10:410008デフォルトの名無しさん
2010/09/18(土) 00:46:090009デフォルトの名無しさん
2010/09/18(土) 01:00:11{
cout << *it << endl;
}
こういうインターフェースのほうがシンプルでいいと思うんだけど
ポインタ互換性が無いけどいまどき生配列でループ回す人なんかいないでしょ
どうしてもポインタ使いたいならit = iterator(ptr, ptr + N);とかでイテレーター作ればいいし
標準化の人たちはほんとセンスないよね
0010デフォルトの名無しさん
2010/09/18(土) 01:11:44- 部分レンジをイテレータで表現できなくなる(例えばどうやって std::partial_sort の引数を渡すんだ?)
- operator bool は論外(暗黙の変換のせいでおかしな式がいろいろコンパイル通るようになる)
0011デフォルトの名無しさん
2010/09/18(土) 01:20:13別にpartial_sortには矛盾しないでしょ
partial_sort(c.iterator(), c.iterator() + n, c.iterator() + c.size());
operator boolでループの打ち切りを判断できるだけで別に終了条件をいつもの比較にしてもなんら問題は無い拡張だからね
あとsafebolはここでは本質ではないからその話を持ち出すお前のほうがはるかにセンスないよ
0012デフォルトの名無しさん
2010/09/18(土) 01:25:06でええやん。
0013デフォルトの名無しさん
2010/09/18(土) 01:28:36普通は
for_each( c.begin(), c.end(), cout << *it << endl );
と、書きたいでしょうに。
0014デフォルトの名無しさん
2010/09/18(土) 01:35:160015デフォルトの名無しさん
2010/09/18(土) 01:38:13それだと、始点と終点がコントロールできない。
つか、別にオーバーロードすればいいだけじゃんか。
0016デフォルトの名無しさん
2010/09/18(土) 01:42:09オーバーロードで両ほうできるようにすればいいさ
0017デフォルトの名無しさん
2010/09/18(土) 01:50:12ovenやRangeExみたいな感じだな
>>9,>>11はちょっと意味わからない。それってシンプル?
0018デフォルトの名無しさん
2010/09/18(土) 02:08:340019デフォルトの名無しさん
2010/09/18(土) 02:25:370020デフォルトの名無しさん
2010/09/18(土) 12:10:050021デフォルトの名無しさん
2010/09/18(土) 12:41:560022デフォルトの名無しさん
2010/09/18(土) 12:43:500023デフォルトの名無しさん
2010/09/18(土) 15:48:06ランダムアクセスできないイテレータのときはどーするの?
std::listとかの
0024デフォルトの名無しさん
2010/09/18(土) 15:49:56tcharやwcharをcharに変換してつかってことなのかな??
0025デフォルトの名無しさん
2010/09/18(土) 15:55:27それはそれとして、random_access_iterator 以外はit + n とかできないけど 9,11 はどうする気なのだろう
0026デフォルトの名無しさん
2010/09/18(土) 16:27:310027デフォルトの名無しさん
2010/09/18(土) 16:33:10std::wstring
0028デフォルトの名無しさん
2010/09/18(土) 16:56:55advance
0029デフォルトの名無しさん
2010/09/18(土) 17:26:49どもです、こちらをつかってみますね。
0030デフォルトの名無しさん
2010/09/18(土) 18:29:48template <class X> class Hoge { ・・・; }
Hoge_int.cpp
template class Hoge<int>
これってコンパイル体感できるぐらい早くなる?
0031デフォルトの名無しさん
2010/09/18(土) 19:59:360032デフォルトの名無しさん
2010/09/18(土) 20:12:150033デフォルトの名無しさん
2010/09/18(土) 20:14:310xスレにいけよ。ここはC++総合スレじゃないんだからよ。
0034デフォルトの名無しさん
2010/09/18(土) 20:37:220035デフォルトの名無しさん
2010/09/18(土) 21:37:23実務的にはまだそうでないコンパイラが主流だし。
0036デフォルトの名無しさん
2010/09/18(土) 22:00:22あれは 9,11の案との相性とか効率とかが悪いと思うんだけど、
どう考えてるの?
でことなんだが
0037デフォルトの名無しさん
2010/09/18(土) 22:11:43知らないネタはスルーしてるし。
0038デフォルトの名無しさん
2010/09/18(土) 22:12:460039デフォルトの名無しさん
2010/09/18(土) 22:14:17何のためって、そりゃあ0x専門の話したい人のためだろう
0040デフォルトの名無しさん
2010/09/18(土) 22:16:360041デフォルトの名無しさん
2010/09/18(土) 22:21:050042デフォルトの名無しさん
2010/09/18(土) 22:21:34その話一切禁止なんてことないだろう。
0043デフォルトの名無しさん
2010/09/18(土) 22:22:17そうなっていない以上制限する必要もないな。
0044デフォルトの名無しさん
2010/09/18(土) 22:22:330xの話を出すのはオレは許容できるけど
現行の規格に則ったアドバイスをしてる所に、
「そんなやり方は古くなるから教えるな、0xでは〜」というのはやめてほしい
相談者にとっては現行のやり方を知ることも大切だろう
新しい規格が定まっても従来のコードを読む必要があったりするかもしれないし
0045デフォルトの名無しさん
2010/09/18(土) 22:23:420046デフォルトの名無しさん
2010/09/18(土) 22:44:25C++0xTopics g_C++0xTopic;
int C++Thread(){
g_Topic.discussion();
}
-----------------------------------
void C++SpecialThread( C++Topics &tp );
int C++Thread(){
C++0xTopics C++0xTopic;
C++SpecialThread( C++0xTopic );
}
void C++SpecialThread( const C++Topics &tp ){
tp.discussion();
}
0047デフォルトの名無しさん
2010/09/18(土) 23:16:25見えない敵と戦うのも大変だな
0048デフォルトの名無しさん
2010/09/19(日) 06:58:54で、ファイルのオープンチェックに
if (ofstr) { ... } と if (ofstr.is_open()) { ... }
とするのでは意味が違うのでしょうか?いつも前者でチェックしていたのですが、ひょっとして間違い!?
0049デフォルトの名無しさん
2010/09/19(日) 16:29:160050デフォルトの名無しさん
2010/09/19(日) 16:37:58operator void *() が定義されているから前者で良い
0051デフォルトの名無しさん
2010/09/19(日) 16:49:230052デフォルトの名無しさん
2010/09/19(日) 16:50:19class A{ .... }; class B: public A{.......}; class C: public A{.......};
A* a;
a = new B;
a = new C;
みたいに使いたい時のdeleteの仕方が分かりません。
delete (B*)a;
とやらないとBのデストラクタが呼ばれないみたいなんですが、
newする前にこうやってdeleteしていくんでしょうか?
005351
2010/09/19(日) 16:50:22試したら私が間違ってました
0054デフォルトの名無しさん
2010/09/19(日) 16:51:22仮想関数ぐらい勉強しろハゲ
005552
2010/09/19(日) 17:06:07ありがとうございます。
0056デフォルトの名無しさん
2010/09/19(日) 17:32:04もつようにしたいんだけど、効率のいい探索方法ってどんなのがありますか?
例えば
class A{
int x;
int y;
A *Near;
};
で、Aが1000個ぐらいあって、各一番距離が近いAを求めたい。
1つ1つ残り999個との距離を求めて探すのは効率悪すぎるしいい方法教えてください
0057デフォルトの名無しさん
2010/09/19(日) 17:37:300058デフォルトの名無しさん
2010/09/19(日) 17:42:000059デフォルトの名無しさん
2010/09/19(日) 17:42:32初歩から始めるにあたってよいサイト・参考書を教えてください
0060デフォルトの名無しさん
2010/09/19(日) 17:42:540061デフォルトの名無しさん
2010/09/19(日) 17:51:52まぁ色々挙げられたから後は質問者が調べて実験すりゃいいか
0062デフォルトの名無しさん
2010/09/19(日) 18:09:20座標の配列とは別に4本木を作るの?
0063デフォルトの名無しさん
2010/09/19(日) 18:11:36それらをキーワードに勉強してきます。
0064デフォルトの名無しさん
2010/09/19(日) 20:53:15自分は、いつも一つのファイルに書き続けて、もうこの関数は書き換えることはないってなってから
ファイル作成してコピペで移動してるんだけど、もう書き始めからファイル作成してそっちに
関数作り始める人の方が多いよね。何故ですか?
一つのファイルでずっと書いていた方が、見やすいし修正とか便利だと思うんだけど。
いちいちファイル間移動して書くの面倒すぎる
0065デフォルトの名無しさん
2010/09/19(日) 20:55:330066デフォルトの名無しさん
2010/09/19(日) 21:00:47逆に長ければ長いほど一つのファイルにまとめておいたほうが便利じゃない?
0067デフォルトの名無しさん
2010/09/19(日) 21:01:180068デフォルトの名無しさん
2010/09/19(日) 21:04:210069デフォルトの名無しさん
2010/09/19(日) 21:10:01メモ帳か?
0070デフォルトの名無しさん
2010/09/19(日) 21:20:53大多数がそうするってことは、何か利点があるのかなと思って
>>68
へぇ初めて知った。今度から積極的に分けるようにする。完成してからだけど
>>69
eclipseかVisualStudioです。
メモ帳の場合だとファイル分けて書いていったほうが便利なのは分かる。
プログラミング用の関数参照とかの機能無いから長いと探しにくいし
0071デフォルトの名無しさん
2010/09/19(日) 21:54:36> メモ帳の場合だとファイル分けて書いていったほうが便利なのは分かる。
普通逆だと思うけどな
プログラミング用の関数参照とかの機能無いから、別のファイルにまたがると参照が大変だし。
だからメモ帳の場合は単一ファイルか、数ファイルにする。
統合開発環境なら別ファイルにまたがっても参照や検索が楽だろ。
0072デフォルトの名無しさん
2010/09/19(日) 22:34:59> へぇ初めて知った。今度から積極的に分けるようにする。完成してからだけど
これも逆だ
0073デフォルトの名無しさん
2010/09/19(日) 22:40:31理由:pgupとかhomeとかで関連外に出ることがないということが保証されるから
0074デフォルトの名無しさん
2010/09/19(日) 22:45:491000行くらいの1000ファイルに分けて1行更新してビルドしたら
分けた方が速いとおもう
0075デフォルトの名無しさん
2010/09/19(日) 22:53:350076デフォルトの名無しさん
2010/09/19(日) 23:11:040077デフォルトの名無しさん
2010/09/19(日) 23:11:59そのファイルとそのファイルを参照してるファイルを再コンパイルすることになる
ってことは理解してるんだろうか
0079デフォルトの名無しさん
2010/09/19(日) 23:22:460080デフォルトの名無しさん
2010/09/20(月) 19:04:20いけるのなら読み込みサイズをどう指定するか教えてほしい。sizeof(map<string, int>)とかでいける?
0081デフォルトの名無しさん
2010/09/20(月) 19:21:250082デフォルトの名無しさん
2010/09/20(月) 19:32:47>シリアル化なしでいける?
意味不明すぎる、シリアル化をなんだと思ってるんだ
シリアル化せずにファイル保存っておい
map全体をmemcpyでchar 文字列にコピーするようなノリでできるのか聞いてるなら無理だよ
0083デフォルトの名無しさん
2010/09/20(月) 19:43:390084デフォルトの名無しさん
2010/09/20(月) 19:45:040085デフォルトの名無しさん
2010/09/20(月) 19:54:590086デフォルトの名無しさん
2010/09/20(月) 20:39:46問題箇所は気づいたときにマークしとかないと忘れるからな
0087デフォルトの名無しさん
2010/09/20(月) 21:32:47何を言っているのか意味不明です。
0088デフォルトの名無しさん
2010/09/20(月) 21:43:52プログラムが終了したあとでも内容を確かめる事ができる機能が
あるんだ。
0089デフォルトの名無しさん
2010/09/20(月) 21:50:010090デフォルトの名無しさん
2010/09/21(火) 01:11:300091デフォルトの名無しさん
2010/09/21(火) 03:02:04いいんだよ頭が禿げ上がるまで使わせてやれば
0092デフォルトの名無しさん
2010/09/21(火) 10:38:53原理的にはそうだけど、実際 core dump なんて解析してる?
俺は本格的に debug する時もせいぜい breakpoint 入れてデータ見たり程度だけど。
まわりでも最近 core なんか解析したという話はあまり聞かんなぁ…
1年前くらいに業務用のコードでやってたかな
0093デフォルトの名無しさん
2010/09/21(火) 11:52:330094デフォルトの名無しさん
2010/09/21(火) 14:28:34マカーは大変だなw
0095デフォルトの名無しさん
2010/09/21(火) 14:43:030096デフォルトの名無しさん
2010/09/21(火) 14:51:53MicrosoftはC++に独自の規格をつくることで
それを標準にしてC++のシェアを独占しようとしている。
Visual C++をつかうということはその企みの手助けをすることになって
将来C++を使うにはmicrosoftの高い製品を買わなければ使えなくなるということが
おこり得る可能性は否定できない。
よってgccを使うことをオススメする。
0097デフォルトの名無しさん
2010/09/21(火) 14:57:550098デフォルトの名無しさん
2010/09/21(火) 14:58:13GUI 付きアプリを作るなら Visual C++(最近は Visual Studioというかな)
の方が向いてるのでは
CUI で良いのなら Eclipse の方がどこでも使える利点がある
0099デフォルトの名無しさん
2010/09/21(火) 15:14:310100デフォルトの名無しさん
2010/09/21(火) 15:16:09犬糞に引きこもってろカス
0101デフォルトの名無しさん
2010/09/21(火) 15:24:04そのときにあった物を使えば良いんだよ。
VC++が完全有料化されてたら、別のが流行するだろ。
そしたら勉強すればいいだろ。
PHP Ruby バイソンとか元々知らなくても必要な使えるようにするだろ。
0102デフォルトの名無しさん
2010/09/21(火) 15:25:430103デフォルトの名無しさん
2010/09/21(火) 15:30:480104デフォルトの名無しさん
2010/09/21(火) 15:39:12PHP Ruby Perl と並ぶ奴。スクリプト言語。Pで始まる奴。
0105デフォルトの名無しさん
2010/09/21(火) 15:41:36Python - Wikipedia
Python(パイソン)は、オランダ人のグイド・ヴァンロッサムが作った
オープンソースのプログラミング言語。
オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で広く普及している。
イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン』にちなんで名付けられた。
Pythonは英語で爬虫類のニシキヘビの意味で、
Python言語のマスコットやアイコンとして使われることがある。
0106デフォルトの名無しさん
2010/09/21(火) 15:47:020107デフォルトの名無しさん
2010/09/21(火) 15:49:530108デフォルトの名無しさん
2010/09/21(火) 15:50:300109デフォルトの名無しさん
2010/09/21(火) 15:53:30もっさりだろ
0110デフォルトの名無しさん
2010/09/21(火) 16:12:280111デフォルトの名無しさん
2010/09/21(火) 16:29:39Javaは完全に仮想マシン方式じゃん
重さが違うよ
0112デフォルトの名無しさん
2010/09/21(火) 16:39:30C#も仮想マシン(とは呼ばないが同じもの)の上で動いてるぞ
仮想マシンがJITコンパイルしちゃいけない決まりはない
0113デフォルトの名無しさん
2010/09/21(火) 16:44:49ネイティブに変換するんだろ。
以前にしてあればキャッシュ読み込むだろ。
0114デフォルトの名無しさん
2010/09/21(火) 16:45:12こんなのがム板に居るわけがない
0115デフォルトの名無しさん
2010/09/21(火) 16:57:28プログラミング言語から見て仮想化された環境というだけの意味で
特に具体的なインタプリタなどの実装を指してるわけじゃないぞ
0116デフォルトの名無しさん
2010/09/21(火) 17:17:12確かにngenは.NETの売りだろうけど起動しっぱなしのアプリじゃ大して意味ないんじゃね。
.NETのGUIはアンマネージド使いまくってるというのはあるが、eclipseに関して言えばSWTだし。
0117デフォルトの名無しさん
2010/09/21(火) 17:19:040118デフォルトの名無しさん
2010/09/21(火) 17:31:23それが最大の違い
0119デフォルトの名無しさん
2010/09/21(火) 17:42:12VSの方が非もっさり。.NET4ならもう少し非もっさり。
もっさり許容範囲は人それぞれ。
0120デフォルトの名無しさん
2010/09/21(火) 18:25:01QtCreator 使いやすい
ターゲットがずっと Windowsだけなら VS でしょ
0121デフォルトの名無しさん
2010/09/21(火) 18:25:42それはJava Serverの話
普通のPCにインストールされているJava ClientはJITコンパイルしてない
0122デフォルトの名無しさん
2010/09/21(火) 19:51:360123デフォルトの名無しさん
2010/09/21(火) 20:18:19> アンマネージコード使い放題
絶対ずるいよな。
0124デフォルトの名無しさん
2010/09/21(火) 20:23:55程度の次元でしかない
0125デフォルトの名無しさん
2010/09/21(火) 22:21:520126デフォルトの名無しさん
2010/09/22(水) 00:16:06コアダンプはろくにデバッガが使えないようなときに大変重宝しますよ。
デバッガがあってもそれなりに重宝します。
0127デフォルトの名無しさん
2010/09/22(水) 02:53:40intにキャストすると 2 になるのですが、
これは、double変数が極めて3に近い2.????・・・というという値で、
近似したから3になった
という解釈で良いのでしょうか?
0128デフォルトの名無しさん
2010/09/22(水) 03:17:36setprecisionマニピュレータで有効桁数を増やしてみな
多分3じゃない
それとscientificも忘れずに
0129デフォルトの名無しさん
2010/09/22(水) 04:31:28#include <iomanip>
int main()
{
double d = 2.99999999999999;
std::cout << d << std::endl;
std::cout << std::setprecision(15) << std::scientific << d << std::endl;
}
>>127
まあこういう事だと思うよ
絶対に後者で表示されるのは3じゃないはず
0130デフォルトの名無しさん
2010/09/22(水) 06:13:180131デフォルトの名無しさん
2010/09/22(水) 17:09:44なんだっけそれ?
0132デフォルトの名無しさん
2010/09/22(水) 21:55:250133デフォルトの名無しさん
2010/09/22(水) 23:22:11{
int a;
boost::array<char,4> b;
};
これは問題ないですか?
0134デフォルトの名無しさん
2010/09/23(木) 01:23:30C++03では問題有り(どうあがいてもエラーになる)
C++0xでは一部制限有りだがOK(この場合、代入ができなくなる)
もし代入させたかったら、自前でunionの代入演算子を定義する必要がある。
いまどちらのメンバーを使っているか分からないため、どうやって定義するかは悩ましいところだが。
その他の型、たとえばstd::stringとかをメンバーに持ちたかったら、
明示的にunionのデフォルトコンストラクターやデストラクターなどを定義する必要がある。
0135デフォルトの名無しさん
2010/09/23(木) 02:17:36> C++03では問題有り(どうあがいてもエラーになる)
ならないよ。
0136デフォルトの名無しさん
2010/09/23(木) 02:27:04だから
struct B { char c[4]; };
union Foo{ int a; B b; };
が通るのと同じようにarraytも通る
charが違う型になるとダメな場合もある
0137デフォルトの名無しさん
2010/09/23(木) 09:36:510138デフォルトの名無しさん
2010/09/23(木) 09:40:21http://hibari.2ch.net/test/read.cgi/tech/1284477697/503
スレを勃てるまでもないC/C++の質問はここで 17
http://hibari.2ch.net/test/read.cgi/tech/1285115590/25
0139デフォルトの名無しさん
2010/09/23(木) 09:48:31どっちにし
0140デフォルトの名無しさん
2010/09/23(木) 09:51:230141デフォルトの名無しさん
2010/09/23(木) 10:53:18string s;
適当な処理
s = "";
適当な処理
0142デフォルトの名無しさん
2010/09/23(木) 10:57:020143デフォルトの名無しさん
2010/09/23(木) 10:58:440144デフォルトの名無しさん
2010/09/23(木) 10:59:20transmittionってソフトのguiの書き方なんですけどね
0145デフォルトの名無しさん
2010/09/23(木) 11:01:39じゃあどうやって書く?
0146デフォルトの名無しさん
2010/09/23(木) 11:07:13string s;
some_code;
}
{
string s;
some_code;
}
0147デフォルトの名無しさん
2010/09/23(木) 11:14:450148デフォルトの名無しさん
2010/09/23(木) 11:15:48中でスコープ切ったりしなくていい程度に関数の長さを抑える方を優先するべき
0149デフォルトの名無しさん
2010/09/23(木) 11:20:34const int ret = ProcessA();
assert( ret == 0 );
}
{
const int ret = ProcessB();
assert( ret == 0 );
}
{
const int ret = ProcessC();
assert( ret == 0 );
}
こんな感じでブロック分けたりするけど。
A,B,Cで別々の関数に分けるのも意味ないし。
0150デフォルトの名無しさん
2010/09/23(木) 11:25:030151デフォルトの名無しさん
2010/09/23(木) 11:30:15そんなことはない。
0152デフォルトの名無しさん
2010/09/23(木) 11:46:010153デフォルトの名無しさん
2010/09/23(木) 12:00:090154デフォルトの名無しさん
2010/09/23(木) 12:01:06100行超えた辺りからゲンナリして、1000行超えてるとこいつ天才かと思う(悪い意味で
0155デフォルトの名無しさん
2010/09/23(木) 12:05:120156デフォルトの名無しさん
2010/09/23(木) 12:11:26#include ""
0157デフォルトの名無しさん
2010/09/23(木) 12:17:3220行の関数5個より、100行の関数一個のほうがバグが少ない。
コードコンプリートに載ってた。
0158デフォルトの名無しさん
2010/09/23(木) 12:20:350159デフォルトの名無しさん
2010/09/23(木) 12:29:36状態を維持するために一回しか使われないクラスが増えるだけなんだよな。
0160デフォルトの名無しさん
2010/09/23(木) 12:34:26自分、C,C++で数値計算していたのですが
そのソースやヘッダを利用してGUIを組みたいと考えています。
これまでのヘッダやソースをインクルードして
GUIを出来ればヴィジュアルエディタのようなもので
生成されたコード中で、同じように使いたいのですが
どのようなライブラリを使えばそれが可能でしょうか?
優先順位としては
これまでの資産の利用>GUIの開発のしやすさ
です。
ご教示お願いします
0161デフォルトの名無しさん
2010/09/23(木) 12:35:570162デフォルトの名無しさん
2010/09/23(木) 12:38:170163デフォルトの名無しさん
2010/09/23(木) 12:54:380164デフォルトの名無しさん
2010/09/23(木) 12:58:390165デフォルトの名無しさん
2010/09/23(木) 13:00:110166デフォルトの名無しさん
2010/09/23(木) 13:04:090167デフォルトの名無しさん
2010/09/23(木) 13:07:25何も無しでstd::swap(a,b)を使うとstd::swapしかよばれないけど
using std; swap(a,b)をつかうと引数で検索されますが
using namespace std;を使ってswap(a,b);を使うのと
using; swap(a.b);を使うのとの違いはなんですか?
それとusing std;を使わずにusing namespace std;のみで
swap(a,b);を使うとどうなりますか?
よろしくお願いします。
0168デフォルトの名無しさん
2010/09/23(木) 13:28:34長くなってきたら、その仕事が単一になってない兆候ではある
0169デフォルトの名無しさん
2010/09/23(木) 13:44:00そうでない場合はクラス化関数化が下手くそな証拠
0170デフォルトの名無しさん
2010/09/23(木) 13:48:49単に関数間の依存関係の切り方が下手くそなだけじゃないのかね
0171デフォルトの名無しさん
2010/09/23(木) 13:58:44ちょっと間違ってるところあるけど整理すると
1 using namespace std; で swap
2 using std::swap; で swap
3 using を使わず std::swap(a,b) と使う
の3つの使い方があると思う
1 だと std の namespace のものを全て持ち込むので意図せず
使ってしまうものがあるかも知れない
2 std の namespace swap だけ意図的に持ち込む
3 std を一切持ち込まず常に指定して使う
現実的な問題だと、簡単なコードや自分だけなら1でも良いと思う。
1が一番楽(トラブル無ければ)。
プロの環境だと安全性重視で2,3が推奨(必須?)。
ただ 3 はかったるいんで 2 で普通良いと思うが、
この辺はポリシーや好みの問題も大きい。
常に絶対どうしても3じゃなきゃダメダメダメという人もいるから
そういう場合は文句を言わない。
読んだのだいぶ前で忘れたけど本にもこういうこと書いてあるはずだけど…
0172デフォルトの名無しさん
2010/09/23(木) 14:03:37std::ってタイプさせたら俺の右に出る物はいない
0173デフォルトの名無しさん
2010/09/23(木) 14:04:560174デフォルトの名無しさん
2010/09/23(木) 14:38:35すまん。
boost::arrayには、コピー代入演算子が定義されていると勘違いしていた。
今見たら、メンバーテンプレート関数だった。
0175デフォルトの名無しさん
2010/09/23(木) 15:24:20これ聞きあきた
0176デフォルトの名無しさん
2010/09/23(木) 15:58:28常識的に考えてADLが必要な時に2でそれ以外は3だろ。
0177デフォルトの名無しさん
2010/09/23(木) 16:55:21これだけで書いてあるコードがあったんですが
これじゃ無名名前空間と同じ気がするのですが、何かメリットはあるのですか?
0178デフォルトの名無しさん
2010/09/23(木) 16:57:52出来ないことができるからプロを名乗れる。
5000行越えだってOK
0179デフォルトの名無しさん
2010/09/23(木) 16:58:110181デフォルトの名無しさん
2010/09/23(木) 17:04:33staticの代わり
0182デフォルトの名無しさん
2010/09/23(木) 17:13:04よくバグを出さないもんだと感心半分呆れ半分
0183デフォルトの名無しさん
2010/09/23(木) 17:14:220184デフォルトの名無しさん
2010/09/23(木) 17:16:39大きくても問題なくね?
0185デフォルトの名無しさん
2010/09/23(木) 17:38:531関数10000行ですね
0186デフォルトの名無しさん
2010/09/23(木) 17:46:32むかしのアセンブラではよくあったねw
0187デフォルトの名無しさん
2010/09/23(木) 18:01:160189デフォルトの名無しさん
2010/09/23(木) 20:39:37そのような感じのクラスが5つ
1万行超えているクラスが24
コメントはほとんど無し(きちんと書かれている場合は2000行前後のクラスのみ)
クラス数が全部で300ほど・・・・
そのアプリのVersionアップ作業。
そして恐怖は他にdllと外部実行ファイルが20程・・・・
0190デフォルトの名無しさん
2010/09/23(木) 22:32:40wwwwww
ちょっと直して再コンパイルするのもめんどくさそうだ。
0191デフォルトの名無しさん
2010/09/23(木) 22:34:370192デフォルトの名無しさん
2010/09/23(木) 22:35:45うちも似たようなもんだな
巨大なシステムだとある程度は仕方が無い
0193デフォルトの名無しさん
2010/09/23(木) 22:47:590194デフォルトの名無しさん
2010/09/23(木) 22:51:46boost形式で管理してるけどこれはこれで依存性があっちこっち飛んで混乱する
0195デフォルトの名無しさん
2010/09/23(木) 22:55:140196デフォルトの名無しさん
2010/09/23(木) 23:27:38素性がバレそうなので書けないw
printf()を1行追加してコンパイルかけたら半日つぶれたのは良い思い出
0197デフォルトの名無しさん
2010/09/23(木) 23:31:380198デフォルトの名無しさん
2010/09/23(木) 23:32:330199デフォルトの名無しさん
2010/09/23(木) 23:55:37ん、もしかして知り合い?
0200デフォルトの名無しさん
2010/09/24(金) 06:31:18その程度ならマ板で結構見たぞw
0201デフォルトの名無しさん
2010/09/24(金) 07:16:210202デフォルトの名無しさん
2010/09/24(金) 09:44:18ルート
ヘッダー
ソース
サブフォルダ
複数のヘッダー(ソースなし)
こんな感じの構成かな
ルートにあるヘッダはサブフォルダの薄いラッパーかtypedefのみのことが多い
コンパイル防壁はルートのソースが引き受ける
オーバーヘッドが少し気になるけどスッキリするから無理やり気にしない
0203デフォルトの名無しさん
2010/09/24(金) 20:57:120204デフォルトの名無しさん
2010/09/24(金) 21:10:57http://codepad.org/ZUGkKE63
コンパイルエラーが出でいますが、テンプレート引数をString1からextern付きの
String2に変えるとコンパイルが通ります。
なぜなんでしょ?
0205デフォルトの名無しさん
2010/09/24(金) 21:26:01String1のconstを取る
0206204
2010/09/24(金) 21:48:38なるほど、それでも通りますね。
もしやと思ってString1を乱数で書き換えるようにしたら、コンパイルが通っちゃいました。
http://codepad.org/s10YT1b8
テンプレートは必ずしもコンパイル時に解決されるわけじゃないんですね。
0207デフォルトの名無しさん
2010/09/24(金) 22:20:390208デフォルトの名無しさん
2010/09/24(金) 22:23:38コンパイル時に解決してるんじゃね?
0209デフォルトの名無しさん
2010/09/25(土) 00:11:53誰か説明してくれんか
0210デフォルトの名無しさん
2010/09/25(土) 00:37:510211デフォルトの名無しさん
2010/09/25(土) 01:36:050212デフォルトの名無しさん
2010/09/25(土) 01:41:42あっそうなんだ
最適化が絡んでるのかな?
0213デフォルトの名無しさん
2010/09/25(土) 01:43:18それだと今度は別のエラーがでるんじゃね?
0214デフォルトの名無しさん
2010/09/25(土) 07:51:06どっちかっていうと ODR の方じゃないかな。
0215デフォルトの名無しさん
2010/09/25(土) 11:58:39"定義は一つ"規則。
プログラム中で、一つの関数は同じただ一つの定義しか持ってはいけない。 一つのクラスは同じただ一つの定義しか持ってはいけない、という規則。 ファイル1で
struct X { int x; }; と書いてファイル2で
struct X { char x; }; と書いていたら、構造体Xに関するODR違反になります。 一見物凄く当たり前なんですが、template の(部分)特殊化版を使った トリッキーなコードだと、人間の気付かぬ間にODR違反に突入する恐れがあるので、 ちょびっと注意が必要です。
0216デフォルトの名無しさん
2010/09/25(土) 13:41:38なるほど。
テンプレートが実体化されたものはリンク時にまとめられるんだから、
アドレスをテンプレート引数にする場合は外部リンケージを持った変数名
じゃなきゃダメだわ。
0217デフォルトの名無しさん
2010/09/25(土) 13:50:510218デフォルトの名無しさん
2010/09/25(土) 13:53:540219167
2010/09/25(土) 14:46:003行目1文字目 誤:using std 正:using std::swap
6行目1文字目 誤:using std 正:using std::swap
0220デフォルトの名無しさん
2010/09/25(土) 15:02:14PersonImplを変更しても
Personを使う翻訳単位が再コンパイルをしないのは
Personクラスのサイズが変わらないからということですか?
Personを使う翻訳単位が再コンパイルをするかを決めるのは、
Personクラスのヘッダーファイルだけに関係するんですか?
Personクラスのクラスの関数の内容を変えても
クラスのサイズは変わらないから再コンパイルされませんか?
0221デフォルトの名無しさん
2010/09/25(土) 15:15:03される訳がない。
もう一度Excelのマクロを勉強することをオススメする
0222デフォルトの名無しさん
2010/09/25(土) 15:19:57不完全型とか不透明ポインタってものがあってまぁそのあたりを調べればなんか納得がいくんじゃないだろうか
0223デフォルトの名無しさん
2010/09/25(土) 16:03:29使うクラスのヘッダーファイルをみて
ポインターじゃないデータのサイズが変わっていたら
再コンパイルする。
関数の定義が変わっているのは再コンパイルしない
関数が増えていたら再コンパイルする
という理解であってますか?
0224デフォルトの名無しさん
2010/09/25(土) 16:11:44ヘッダファイルは見にいかない。
再コンパイルn基準は内部最適化コードの差異でしか判断しない。
よって再コンパイルはされる訳がない。
まずはコンパイルn仕様から勉強しないと話にならないよ
0225デフォルトの名無しさん
2010/09/25(土) 16:16:02定義が変わってようが変わってなかろうが何か修正したらアウト
ヘッダーファイルを修正しさえしなければいい
Personの定義はヘッダーファイルに書くので修正したら影響するが
PersonImplの定義はヘッダーファイルに書かないので修正しても影響ないという理屈
0226デフォルトの名無しさん
2010/09/25(土) 16:19:12「いや、その理屈はおかしい。」
,. -──- 、
/ /⌒ i'⌒iヽ、
/ ,.-'ゝ__,.・・_ノ-、ヽ
i ‐'''ナ''ー-- ● =''''''リ _,....:-‐‐‐-.、
l -‐i''''~ニ-‐,.... !....、ー`ナ `r'=、-、、:::::::ヽr_
!. t´ r''"´、_,::、::::} ノ` ,.i'・ ,!_`,!::::::::::::ヽ
ゝゝ、,,ニ=====ニ/r'⌒; rー`ー' ,! リ::::::::::::ノ
i`''''y--- (,iテ‐,'i~´ゝ''´  ̄ ̄ヽ` :::::::::::ノ>>225
| '、,............, i }'´ 、ー_',,...`::::ィ'
●、_!,ヽ-r⌒i-、ノ-''‐、 ゝ`ーt---''ヽ'''''''|`ーt-'つ
( `ーイ ゙i 丿 ;'-,' ,ノー''''{`' !゙ヽノ ,ヽ,
`ー--' --'` ̄ `ー't,´`ヽ;;;、,,,,,,___,) ヽ'-゙'"
(`ー':;;;;;;;;;;;;;;;ノ
``''''''``'''''´
0227デフォルトの名無しさん
2010/09/25(土) 16:24:31と
IDEなりmakeなりの動作
がごっちゃになりつつある気がするぜ
0228デフォルトの名無しさん
2010/09/25(土) 16:29:57翻訳単位は#include Person.hのところに
Person.hの内容を書いたのと同じだから、
翻訳単位に書かれている事が変化したかどうか
のみで再コンパイルするか決めるという理解であってますか?
0229デフォルトの名無しさん
2010/09/25(土) 16:37:48なにを言ってるか意味不明
ヘッダファイルに差異があるからコンパイルされるというのは間違いだよ
0230デフォルトの名無しさん
2010/09/25(土) 16:41:17そんなに大仰なものじゃないよ?
main.cppというファイルがあって、コンパイルしました。
で、その中で、#include Person.hとかかれているのであれば、
Person.hが変更されなければ、main.cppが再コンパイルされる
ことはないよ。
(もちろん、main.cppを書き換えたらコンパイルするけどさ)
PersonImplが変更されたらmain.cppがコンパイルされるかどうかは、
PersonImplがどこに書かれているかによる。
Person.hの中にかかれていれば、コンパイルされるし、
Person.cppとかに書いてあれば、それは関係ない。
ついでにいえば、PersonImplの実装が、hennna.cppとかで
あろうと構わないし、同様なのね。
main.cppがコンパイルされるかどうかは、Person.hが変更されたか
どうか、というその一点にだけかかっている。
0231デフォルトの名無しさん
2010/09/25(土) 16:53:16C++はC#とかVBみたいな位置にあるのでしょうか?
0232デフォルトの名無しさん
2010/09/25(土) 16:55:28そのブログのことは忘れろ
0233デフォルトの名無しさん
2010/09/25(土) 16:57:06ちゃんとC++を解ってれば大したオーバーヘッドはない
逆にC++の機能(templateや継承、ポリモーフィズム)をCで模倣しようとすると手間もコストもC++でやるより増える
0234デフォルトの名無しさん
2010/09/25(土) 16:58:070235デフォルトの名無しさん
2010/09/25(土) 16:58:20C++はCとほぼ同じ。
無駄のあるコードを書けばメモリ食うだけ。
C++の方が多くの材料がそろっているから使う奴によっては無駄なことをしやすい。
0236デフォルトの名無しさん
2010/09/25(土) 17:09:11嘘乙
C++の現場にいるけど、C言語しか知らない人は使い物にならないよ。
逆にVBを10年やってましたの人の方がC++のアーキテクチャ詳しかったりするし、
C言語だけ知らない人はコボラー扱い
0237デフォルトの名無しさん
2010/09/25(土) 17:11:180238デフォルトの名無しさん
2010/09/25(土) 17:11:42まあ、メモリを食うとか食わないとかって観点からの話だろ。
0239デフォルトの名無しさん
2010/09/25(土) 17:13:06C#やJavaから入ったほうが楽かもね。
0240デフォルトの名無しさん
2010/09/25(土) 17:20:27はあ?
そりゃVB10年やってたって他の言語にも詳しいやつだって中にはいるだろうが、
そんな特殊な例あげて、嘘とかって罵るってばかげてるだろ。
C/C++とC#,VBは全く別物。
C/C++はネイティブコンパイラ、後者はマネージドコードという中間言語
のようなものに翻訳する
で、CとC++なら、やっぱりメモリもスピードもCの方が有利。
これはもう言語が面倒みる範囲が全然違うので、しょうがない。
ただし、C++で簡単にできるようなことをCでやろうとするのは、
確かにかなり手間がかかる。
0241デフォルトの名無しさん
2010/09/25(土) 17:24:420242デフォルトの名無しさん
2010/09/25(土) 17:27:45stdとか
あとFlashFLVみたいなストリーミングをネイティブCだけで実装すると
手間がかかるかも知れない。
ポインタの制御だって、C++はかなり楽だけどC言語で行くと地獄を見る
0243デフォルトの名無しさん
2010/09/25(土) 17:32:09例えば、文字列、配列の扱い一つとってもそうでしょ。
C++なら、std:stringだけでも、連結したり、伸ばしたりするのは、
ライブラリが面倒みてくれるし、配列もそう。
これだけだってCで自分で実装すればかなり面倒だろ。
0244デフォルトの名無しさん
2010/09/25(土) 17:32:48STLの実装やコンパイラのせい。質が悪いだけ。
完璧な品質であれば(が作れれば)、大差はないだろ。
0245デフォルトの名無しさん
2010/09/25(土) 17:36:45あるときから考えが変わった。
ソフトウェアの動作速度より俺らの給料と休日の方が圧倒的に大事だろう、と。
それ以来 苦情が出るまで高速化に着手しないことにした。
0246デフォルトの名無しさん
2010/09/25(土) 17:36:52だから昔からC++なんかよりVBの方がよっぽど優秀って言われてきたんだろ?
STLが悪者と逃げる>>244はなんちゃってC++技術者なんだなww
0247デフォルトの名無しさん
2010/09/25(土) 17:37:58いやあ、そうでもないよ。
やっぱり、C++は言語仕様が安全性などのためにいろいろ要求するからね。
どうしても、生成コードは増えざるを得ないし、それらを実行する負荷ってのは
どうしても発生する。
オブジェクトサイズみても一目瞭然じゃない。
そりゃ人間がみりゃ不要なコードも当然あるから、完璧な最適化が可能であれば、
最終的にCとC++がニアイコールになるけれど、そんなないものねだりしたって
しょうがないでしょ。
0248デフォルトの名無しさん
2010/09/25(土) 17:40:310249デフォルトの名無しさん
2010/09/25(土) 17:45:53つまりは、そういうことですねw
0250デフォルトの名無しさん
2010/09/25(土) 17:46:44なるほど
専門卒=C
国立大卒=C++
ね
0251デフォルトの名無しさん
2010/09/25(土) 17:47:12このへんの高速化はCには真似できないし場合によってはC++のほうが早いんじゃねーの?
0252デフォルトの名無しさん
2010/09/25(土) 17:50:38日大卒の俺の友人がC++とか言ってるんだけど彼にC++が使える気がしないw
C++はクソみたいな落とし穴が一杯だから、俺sugeeモードになれる人じゃないと結構苦しんではないかと。
俺?俺は旧帝出身の別の職業に就いている。
ただの趣味グラマだからレベルは高くないけどそんな俺より彼が正直C++を使えるとは思えない。
ってチラシの裏に書けば良いのにここに書いてみる
0253デフォルトの名無しさん
2010/09/25(土) 17:51:050254デフォルトの名無しさん
2010/09/25(土) 17:51:32> だから昔からC++なんかよりVBの方がよっぽど優秀
俺は初耳だぞw
VBは中途半端じゃないか。
0255デフォルトの名無しさん
2010/09/25(土) 17:53:12LinusはC++だけが嫌いなんじゃなくて、
C++をバカが使うのがいやなんだろうと思っている。
まあ結局 彼自身は頭良いからC言語で十分高度なプログラミングができる、
だからそもそもC++が存在するのがいけねぇんだって
結論になるからC++も嫌いなんだろうけど。
0256デフォルトの名無しさん
2010/09/25(土) 17:55:20「VBは生産性高い、C++は高度なことができる、使い分けが肝心」みたいな
話になってたけど、VBが生産性高いのは単にVBプログラマがVBしか使えないから
だよな。
0257デフォルトの名無しさん
2010/09/25(土) 18:00:06よくね?
0258デフォルトの名無しさん
2010/09/25(土) 18:03:210259デフォルトの名無しさん
2010/09/25(土) 18:06:00だってカーネルプログラミングで使えない物を外すとC99だもの
0260デフォルトの名無しさん
2010/09/25(土) 18:19:250261デフォルトの名無しさん
2010/09/25(土) 18:33:570262デフォルトの名無しさん
2010/09/25(土) 18:40:12いや、VB6がよく使われてた業務用のシステムとか、ダイアログに
グレープシティーのコンポーネント貼ったようなのばっかりだったから
VCでも大差なかっただろうし、内部のロジックとかC++のほうが
圧倒的に簡単に書けるでしょ。
VBが生産性高いって、VBしか使えない連中の思い込みだよ。
0263デフォルトの名無しさん
2010/09/25(土) 18:43:2110年前くらいだろうけど、当時はネット環境や書籍も貧弱な中で
C++の文法、Win32API、MFCの三重苦だったからな
VBやJavaに流れがいっても仕方なかった
0264デフォルトの名無しさん
2010/09/25(土) 18:43:260265デフォルトの名無しさん
2010/09/25(土) 18:56:19VB6 の頃はだいぶましになってたけど、VB4 あたりでは VC と VB で
生産性はかなり違ったよ。
だから別に VC に移行する必要のない案件は VB のまま継続してただ
けだろ。
0266デフォルトの名無しさん
2010/09/25(土) 19:08:080267デフォルトの名無しさん
2010/09/25(土) 19:34:31と突っ込んでみるw
0268デフォルトの名無しさん
2010/09/25(土) 19:48:580269デフォルトの名無しさん
2010/09/25(土) 19:51:30必要性のない言語は消えていく
0270デフォルトの名無しさん
2010/09/25(土) 19:57:220271デフォルトの名無しさん
2010/09/25(土) 19:58:11俺達が乗り換えないから。
あと、仕様がさだまらないから一度作ったライブラリすら
無効になることが普通にあるらしく、そんなんやってられないじゃん。
0272デフォルトの名無しさん
2010/09/25(土) 20:02:220273デフォルトの名無しさん
2010/09/25(土) 21:31:210274デフォルトの名無しさん
2010/09/25(土) 21:32:340275デフォルトの名無しさん
2010/09/25(土) 21:43:52蛇足ばっかりでムカデのような状況だと思う
B に型を導入してコンパイラ化するところまでで「成長」はほとんど止まってるだろ
プロトタイプや const については
変な話だが C++ スレなのでやめておく
0276デフォルトの名無しさん
2010/09/25(土) 21:53:020277デフォルトの名無しさん
2010/09/25(土) 21:54:28UNIXのシェルスクリプトくらいかね?
awkも完成っていっていいかも。
0278デフォルトの名無しさん
2010/09/25(土) 21:56:34正式リリースされたのかどうかって意味だ
0279デフォルトの名無しさん
2010/09/25(土) 22:17:06社会で通用しないタイプだな
0280デフォルトの名無しさん
2010/09/25(土) 22:20:37VB6は部品を全部自前で用意しているからWindowsの標準的な部品を使おうとすると却って使えない。
VB.netはC#の方言でしかないからVBしかやってこなかった連中が乗り換えやすいと言う宣伝文句以上の意義がない。
要は、VB6までは素人乗りで生産性が上がった気がしている連中の玩具でVB.netはC#を使えない連中の縋る石。
って、スレ違いの話ばかりではなんなのでC/C++についても少々。
実際に既存プログラムの高速化を行なっているが、処理時間の一番のネックになる重要な演算部分は
とどのつまりはSSEや並列化を考慮してぎりぎりまで最適化する関係でC/C++の差の出ないコードになる。
その周辺部分はC++で保守性と見通しをよくするか、Cのまま放置するかしばしば悩むことになる。
少なくとも、充分な最適化能力のあるコンパイラを使う限りC/C++で処理時間に大きな差は出ない。
0281デフォルトの名無しさん
2010/09/25(土) 22:27:45知ってるから「VB6」って書いてるんじゃないの? > VBどういう言ってる連中
0282デフォルトの名無しさん
2010/09/25(土) 22:34:12プログラムの大半を書くのが楽なRubyを使って、
効率の必要な場所だけCのコードを呼び出すと。
0283デフォルトの名無しさん
2010/09/25(土) 22:38:37何を持って「完成」というかだな
ループカウンタも shell script だけでは回せなくて「完成」というわけだからな
0284デフォルトの名無しさん
2010/09/25(土) 22:39:31そのレスはどれに対するレスなんだい?
0285デフォルトの名無しさん
2010/09/25(土) 22:42:09実にくだらない
0286デフォルトの名無しさん
2010/09/25(土) 22:50:220287デフォルトの名無しさん
2010/09/25(土) 22:57:44PHPがさんざんやりまくって今更感満点ですが、やりたいのでしたら歓迎します。
0288デフォルトの名無しさん
2010/09/25(土) 23:53:250289デフォルトの名無しさん
2010/09/26(日) 04:31:010290デフォルトの名無しさん
2010/09/26(日) 05:24:050291デフォルトの名無しさん
2010/09/26(日) 05:30:17つまり、君は、C++なんて使いたくない、と。
少なくともプログラミング言語C++第2版レベルのC++でないといやだと?w
STLとかジェネリックプログラミングなんてとんでもないよな?
静的型チェックなんてないもんな。
0292デフォルトの名無しさん
2010/09/26(日) 08:14:020293デフォルトの名無しさん
2010/09/26(日) 08:27:370294デフォルトの名無しさん
2010/09/26(日) 08:30:410295デフォルトの名無しさん
2010/09/26(日) 09:35:11これもきもい
0296デフォルトの名無しさん
2010/09/26(日) 10:18:32テンプレートと動的型の区別が付いてないやつは初めて見た。
0297デフォルトの名無しさん
2010/09/26(日) 10:29:390298デフォルトの名無しさん
2010/09/26(日) 10:49:11ベースクラスのポインタやvoid *が。
0299デフォルトの名無しさん
2010/09/26(日) 10:50:49C++っつーか手続き型言語はもうダメだ。飽きたよ。最適化いい加減でとろいし。
0300デフォルトの名無しさん
2010/09/26(日) 10:53:530301デフォルトの名無しさん
2010/09/26(日) 10:54:520302デフォルトの名無しさん
2010/09/26(日) 10:55:50だいたい「テンプレートは動的ですね」に「いやそうじゃないだろ」って
反論されて「void*とかあるだろ」って言い返すのって、無理やりすぎる。
0303デフォルトの名無しさん
2010/09/26(日) 11:04:200304デフォルトの名無しさん
2010/09/26(日) 11:05:470305デフォルトの名無しさん
2010/09/26(日) 11:12:54まったくムリはありません。
0306デフォルトの名無しさん
2010/09/26(日) 11:13:55じゃあ俺にもない
0307デフォルトの名無しさん
2010/09/26(日) 11:17:370308デフォルトの名無しさん
2010/09/26(日) 11:18:03いえ
「テンプレートは動的だ」
↓
「動的じゃないだろ」
↓
「ぼ、void*があるから動的です」
すごいムリがある。
0310デフォルトの名無しさん
2010/09/26(日) 11:25:07C++を馬鹿がさわるのを禁止しよう
選ばれた人間だけが使うべき言語だ
0311デフォルトの名無しさん
2010/09/26(日) 11:25:150312デフォルトの名無しさん
2010/09/26(日) 11:25:180313デフォルトの名無しさん
2010/09/26(日) 11:25:550314デフォルトの名無しさん
2010/09/26(日) 11:27:400315デフォルトの名無しさん
2010/09/26(日) 11:28:260316デフォルトの名無しさん
2010/09/26(日) 11:30:160317デフォルトの名無しさん
2010/09/26(日) 11:33:25誰か何とかして
0318デフォルトの名無しさん
2010/09/26(日) 11:34:500320デフォルトの名無しさん
2010/09/26(日) 11:38:21そんなものでどうにかなるんだろうか…
0321デフォルトの名無しさん
2010/09/26(日) 11:39:52ぜんぜん違う
0322デフォルトの名無しさん
2010/09/26(日) 11:42:430323デフォルトの名無しさん
2010/09/26(日) 11:48:06慣れれば速攻特定できる
つまり俺はそれだけエラーを書いてきたってことですよ
0324デフォルトの名無しさん
2010/09/26(日) 11:48:440325デフォルトの名無しさん
2010/09/26(日) 11:56:28いや
「動的型は大規模開発には向いていない」
↓
「C++も、ぼ、void*があるからだめだね」
でもムリがありすぎだろ
0326デフォルトの名無しさん
2010/09/26(日) 12:05:120327デフォルトの名無しさん
2010/09/26(日) 12:05:18「で、でもムリありすぎだろ」って。
0328デフォルトの名無しさん
2010/09/26(日) 12:06:27ちゃんとした考えが身につく前に使えちゃうからどんどん勘違いする。
0329デフォルトの名無しさん
2010/09/26(日) 12:08:500330デフォルトの名無しさん
2010/09/26(日) 12:09:01生産性が30倍になりました
0331デフォルトの名無しさん
2010/09/26(日) 12:10:11何でも良いんならそりゃスクリプトに行くでしょうよ
いざC++やらにゃとなった時の話だよ
0332デフォルトの名無しさん
2010/09/26(日) 12:10:220333デフォルトの名無しさん
2010/09/26(日) 12:14:400334デフォルトの名無しさん
2010/09/26(日) 12:18:04C++はあれだけど、動的型の言語は信者が言うほど生産性高くないと思ってる。
静的型の言語+IDEがいい。
0335デフォルトの名無しさん
2010/09/26(日) 12:18:220336デフォルトの名無しさん
2010/09/26(日) 12:19:47IDEとか言っている時点でド素人臭しかしない
vimだろうそれでも漢かよ
0337デフォルトの名無しさん
2010/09/26(日) 12:21:10動的型だからとかじゃなくてPythonだから生産性が高いんだよ
0338デフォルトの名無しさん
2010/09/26(日) 12:23:22常識になってると思うけど、そろそろIDEくらい使わないと
恥ずかしいってのも常識化してもいいころだよな。
0339デフォルトの名無しさん
2010/09/26(日) 12:23:480340デフォルトの名無しさん
2010/09/26(日) 12:25:450341デフォルトの名無しさん
2010/09/26(日) 12:26:20このへんをきっちり抑えた概念的な入門書とか無いのかな
0342デフォルトの名無しさん
2010/09/26(日) 12:27:01ただ、入り組んだものはC++の方が安心感ある
ディフェンシブにコーディングしやすいからかな
その人次第なんだろうけど
0343デフォルトの名無しさん
2010/09/26(日) 12:28:02そんな特殊なプラットフォーム挙げてもらってもね〜。
0344デフォルトの名無しさん
2010/09/26(日) 12:28:37これで統一した
0345デフォルトの名無しさん
2010/09/26(日) 12:29:500346デフォルトの名無しさん
2010/09/26(日) 12:31:39糞長いコンパイルが無いからってのが重要だろ
0347デフォルトの名無しさん
2010/09/26(日) 12:37:090348デフォルトの名無しさん
2010/09/26(日) 12:42:33boostが標準で初心者に簡単に扱えるなら生産性はぐっと上がると思う。
0349デフォルトの名無しさん
2010/09/26(日) 12:43:59おれゆき
0350デフォルトの名無しさん
2010/09/26(日) 12:44:13Boost.Exceptionとかあるぐらいだし巷で言われるようなただの糞ってわけでもないと思うんだけど
ちょっと調べただけじゃなんか例外はうんことかばっかで「使うな」以外の結論がでてこない
0351デフォルトの名無しさん
2010/09/26(日) 12:46:000352デフォルトの名無しさん
2010/09/26(日) 12:48:29そうだboostの前にSTLがあった orz
0353デフォルトの名無しさん
2010/09/26(日) 12:49:00もっとこうBoost.Exceptionとか徐々にコンパイラ拡張で入っているC++0xの特性を使った
新しいやり方の例外処理についてのネタとか知りたいと思うわけで
0354デフォルトの名無しさん
2010/09/26(日) 13:36:26全分野で統一した規約ってのはなかなか難しいのかもね。
0355デフォルトの名無しさん
2010/09/26(日) 14:28:14「C++の使用を禁止する」というものだ
嘘みたいだけど本当なんだぜ
0356デフォルトの名無しさん
2010/09/26(日) 14:28:310357デフォルトの名無しさん
2010/09/26(日) 15:06:10一番良いのはプログラムを書かないこと
0358デフォルトの名無しさん
2010/09/26(日) 15:08:05自分は就かないってのが一番いいんじゃないかな。
0359デフォルトの名無しさん
2010/09/26(日) 15:08:43コードの書き方の流儀が複数でてきていいと思うんだけどな。
0360デフォルトの名無しさん
2010/09/26(日) 15:09:310361デフォルトの名無しさん
2010/09/26(日) 15:13:570362デフォルトの名無しさん
2010/09/26(日) 15:31:04マより辛い仕事なんて世間には山ほどある。
0363デフォルトの名無しさん
2010/09/26(日) 15:36:22プロアルピニストくらいやばそう
0364デフォルトの名無しさん
2010/09/26(日) 15:48:32山ほどあるならとりあえず10個ぐらい挙げてみてよ
0365デフォルトの名無しさん
2010/09/26(日) 16:00:350366デフォルトの名無しさん
2010/09/26(日) 16:07:27> 職業がクソなんじゃなくてお前が腐ってるだけだよ。
いや俺はマなんて仕事についてないし。
もっともうけの良い職業についている。
どちらかというとマに書かせる方。
0367デフォルトの名無しさん
2010/09/26(日) 16:11:240368デフォルトの名無しさん
2010/09/26(日) 16:23:32reinterpret_cast<int&>(a[0]) = 0x11223344;
これは何か危険性があったりしますか?
0369デフォルトの名無しさん
2010/09/26(日) 16:32:070370デフォルトの名無しさん
2010/09/26(日) 16:48:57やです
0371デフォルトの名無しさん
2010/09/26(日) 19:37:370372デフォルトの名無しさん
2010/09/26(日) 19:46:480373デフォルトの名無しさん
2010/09/26(日) 19:56:56sizeof(char) == 1
はC++をまともに実装している環境では絶対に成り立つが、
(sizeof(char)*4 == sizeof(int))が成り立つとは限らないのは確かである。
ではコンパイル時分岐させるなどして
(sizeof(char)*4 == sizeof(int))が成り立つ環境においてのみに
話を限定する時、
>>368は本当にだめだと言い切れるの?
0374デフォルトの名無しさん
2010/09/26(日) 19:58:250375デフォルトの名無しさん
2010/09/26(日) 20:22:170376デフォルトの名無しさん
2010/09/26(日) 20:28:51参考
http://hpcgi3.nifty.com/mmgames/patio/patio.cgi?mode=view&no=1738
0377デフォルトの名無しさん
2010/09/26(日) 20:35:47なぜclassに参加させないのですか
0378デフォルトの名無しさん
2010/09/26(日) 20:38:00クラスにメンバを書き換えないことを保証できる。
0380デフォルトの名無しさん
2010/09/26(日) 20:39:25非メンバを禁止すればオブジェクト指向になるというのは妄想。
0381デフォルトの名無しさん
2010/09/26(日) 20:40:09int n;
char a[sizeof(int)];
};
こうすればいいのか。まんどくさいな。
0382デフォルトの名無しさん
2010/09/26(日) 20:41:09静的メンバ変数を宣言した場合
その実体の定義をクラス定義の外側に記述しなくちゃいけないとか
そういうことをいってるのじゃなくて?
0383デフォルトの名無しさん
2010/09/26(日) 20:50:52変換のために使うならエンディアンを考慮すればだけど
0384デフォルトの名無しさん
2010/09/26(日) 22:26:08なんで例外使わないなんて結論になるの?
そんなんじゃ new も使えないの?
コンストラクタの失敗どうすんの?
0385デフォルトの名無しさん
2010/09/26(日) 22:29:58そんなことしても結果に移植性が無いことに変わりは無いよ。
期待してる動作を素直にビット演算で実装するべき。
0386デフォルトの名無しさん
2010/09/26(日) 22:31:19普通はすべてのnewの失敗例外をハンドリングしてるものなの?
0387デフォルトの名無しさん
2010/09/26(日) 22:41:47エラー処理しても続行できる気がしないよな。
0388デフォルトの名無しさん
2010/09/26(日) 22:44:36同意してもらったことがない。
0389デフォルトの名無しさん
2010/09/26(日) 22:47:22mallocは戻りをチェックする必要がある。
newは例外を投げるので戻りをチェックする必要は無い。例外をキャッチするかは用途に合わせてご自由に。
0390デフォルトの名無しさん
2010/09/26(日) 22:48:02メモリが足りませんってエラー出した方が 「よく分からんエラーが出たぞ!!どうにかしろ!!」 って怒られる現実
0391デフォルトの名無しさん
2010/09/26(日) 22:49:03まず全量の資源を確保して
話はそれからだな
0392デフォルトの名無しさん
2010/09/26(日) 22:51:01mainで例外をキャッチすれば済むね
0393デフォルトの名無しさん
2010/09/26(日) 22:55:39全量の資源が確保できなかったら失敗じゃん
0394デフォルトの名無しさん
2010/09/26(日) 22:58:26失敗しないnewは無理だろう。
0395デフォルトの名無しさん
2010/09/26(日) 22:59:390396デフォルトの名無しさん
2010/09/26(日) 23:03:510397デフォルトの名無しさん
2010/09/26(日) 23:06:14仕事を受けてしまってから「ダメでした」というのと
始めから「無理です」というのは違うぞ
0398デフォルトの名無しさん
2010/09/26(日) 23:08:29newが例外出すってのは知ってる。
new失敗するような状況でまともなリカバリムリでしょって話の流れで。
0399デフォルトの名無しさん
2010/09/26(日) 23:10:40確保に失敗したか成功したか分からんって話もあるな。
0400デフォルトの名無しさん
2010/09/26(日) 23:15:40チェックした結果のエラー通知に例外を使うべきかどうかという話じゃなかったのか?
0401デフォルトの名無しさん
2010/09/26(日) 23:20:38失敗する確率増やしてどうすんの
0402デフォルトの名無しさん
2010/09/26(日) 23:22:370403デフォルトの名無しさん
2010/09/26(日) 23:27:59いや、newに失敗するような状況で、どうせまともなリカバリできないでしょって話。
0404デフォルトの名無しさん
2010/09/26(日) 23:28:06最初にメモリ確保できないような環境はサポート外とすれば何も問題ない。
0405デフォルトの名無しさん
2010/09/26(日) 23:29:56戻したい状態に戻せるリソース量と速度の兼ね合いで決まる。
0406デフォルトの名無しさん
2010/09/26(日) 23:30:000407デフォルトの名無しさん
2010/09/26(日) 23:33:150408デフォルトの名無しさん
2010/09/26(日) 23:35:51実測
0409デフォルトの名無しさん
2010/09/26(日) 23:38:35自前のアロケータ使ったりするの?
0410デフォルトの名無しさん
2010/09/26(日) 23:48:17とくに32bitだったら特殊な管理しないとできなくない?AWEだかPAEだか3文字のなんか。
仮想メモリ使い切るようなロジックを考えるなら最大メモリも計算できないようなロジックを選択
すべきではないと思うけど…
0411デフォルトの名無しさん
2010/09/26(日) 23:54:14本当は、それの標準化が欲しいところなんだが
メタボ化ばかりにお盛んで(ry
0412デフォルトの名無しさん
2010/09/27(月) 00:03:22可変長コンテナとかいちいち最大値を定数で持たせて、
すべてのコンテナが最大値をとったと仮定してメモリを取るの?
でもこれだとすごい量が必要になりそうだよね
0413デフォルトの名無しさん
2010/09/27(月) 00:06:38小さいやつなら何だっていいじゃん別に。
0414デフォルトの名無しさん
2010/09/27(月) 00:16:03家庭用ゲーム機などでは本来はすべて上限を設定すべきだけど。
しかし最近の希望的観測プログラマーはやってないことも。
0415デフォルトの名無しさん
2010/09/27(月) 00:21:55想定するハードウェアスペックからスワップしない程度のメモリ使用量を決めてその範囲内で動くように設計するけどな。
0416デフォルトの名無しさん
2010/09/27(月) 00:22:24普通にその.cpp以外のファイル.cppで使って欲しくないってんじゃない?
ファイルスコープに限定されているって話だよね?
0417373
2010/09/27(月) 00:24:56何がなんだか分からな…
いやつまりは
> chBuf[2]のアドレスが奇数に配置されていた
こういうことがあり得るのが問題だ!ってことですか?
0418デフォルトの名無しさん
2010/09/27(月) 00:33:07最近のCPUは知らないけどアラインメントに気をつけないとバスエラーになるのは
インテル以外では結構普通だった。
0419373
2010/09/27(月) 00:43:30//////////////////////////
コンパイル時分岐させるなどして
(sizeof(char)*4 == sizeof(int))が成り立つ環境においてのみに
話を限定する時、
char * a = new char[4];
*(reinterpret_cast<int*>(a)) = 0x11223344;
これは危険性は「newが失敗しない限りは絶対にない」と言いきって良いんでしょうか?
参考コード: ttp://codepad.org/Ebt5gKHu
0420デフォルトの名無しさん
2010/09/27(月) 00:46:290421デフォルトの名無しさん
2010/09/27(月) 00:48:30すみません!
もうreinterpret_castっていつ使うために存在しているんですかね。
0422デフォルトの名無しさん
2010/09/27(月) 00:52:050423デフォルトの名無しさん
2010/09/27(月) 00:54:370424デフォルトの名無しさん
2010/09/27(月) 01:01:03operator newなら確実なんだけど…
0425デフォルトの名無しさん
2010/09/27(月) 01:01:41メモリの遅延割り当ての話?
mallocの時点では実際には確保されずに
メモリに書き込んだ時点で確保するんだっけ。
0427デフォルトの名無しさん
2010/09/27(月) 01:41:27メモリが欲しいっつってmalloc/newしてんのに
迷惑な話だよな、それ
いつも思うけど
0428デフォルトの名無しさん
2010/09/27(月) 01:47:27仮想記憶では普通だとおもう。
物理メモリに割り当ては随時だろうけど、予約だけはされてるんじゃないのかなとか思う?
0429デフォルトの名無しさん
2010/09/27(月) 01:59:53普通というわけでもないような
0430デフォルトの名無しさん
2010/09/27(月) 02:01:53何そのクソ仕様
0431デフォルトの名無しさん
2010/09/27(月) 02:04:450432デフォルトの名無しさん
2010/09/27(月) 02:07:560433デフォルトの名無しさん
2010/09/27(月) 02:08:310434デフォルトの名無しさん
2010/09/27(月) 02:10:26そんなことは起きない。mallocがVirtualAllocを使って実装されてたとすると、物理メモリはアクセスされるまで割り当てられないが、領域は仮想領域に予約されているのでメモリ不足にはならない。
0435デフォルトの名無しさん
2010/09/27(月) 02:10:30mallocでちゃんとNULLが返るはず
0436431
2010/09/27(月) 02:15:47mallocってCの標準関数でシステムコールじゃないしkernel関係ないんじゃないの?よく知らないけど
>>434
予約するだけじゃプロセスの仮想アドレスが割り当てられるだけで実体はなく、アクセスした際に
仮想メモリ全体の空間がなくなれば同様に落ちるんじゃ…
>>435
それならいいんだけど。
0437デフォルトの名無しさん
2010/09/27(月) 02:19:510438デフォルトの名無しさん
2010/09/27(月) 02:24:29どのタイミングで走るんだろう。
大きすぎるmalloc要求?それとも遅延割り当てされた領域へのアクセス?
mallocの時点でメモリ不足だとわかるなら
割り当てを失敗させればいいだけだから後者なんじゃないかな。
0439デフォルトの名無しさん
2010/09/27(月) 02:28:200440デフォルトの名無しさん
2010/09/27(月) 02:30:16うーん、よくわからない。ページファイルと二重に確保してるってこと?
>>438
なぜだーー前者じゃないの?
>>439
コミット付きなら分かる。予約って言ってたからそれだけだと思った。
0441440
2010/09/27(月) 02:42:28Windowsでは実際に仮想メモリの実体まで確保しているってことだよね。
それならmallocでOOM時NULLを返せると思う。
0442440
2010/09/27(月) 02:54:02言っている意味がようやくなんとなく分かった。つまり予約しただけの空間に実体を割り当てたときに
プロセスを落とすケースはいつかって話だったのか。mallocのときはエラー返すだけで済むから
後者だけってことだね。
0443デフォルトの名無しさん
2010/09/27(月) 03:25:21Linuxだけどちょっと試してみた。
メモリ1GB。スワップなしのLinux上で
mallocがNULLを返すまで1MBずつ割り当て続けたら
実メモリを越える2.8GBあたりまで割り当てられた。
その後0埋めしていったら、
855MBほど書き込んだところでOOM killerにkillられた。
callocでも試してみたけど、どういうわけか同じ動作。
0444431
2010/09/27(月) 03:44:28おお、Linuxで実際に試してくれたんだ。ありがとう。
mallocについては想定どおりの結果だね。プロセスの仮想アドレスの内
ユーザー空間目一杯まで予約できて(32bitですよね?)、仮想メモリの実体の
限界までアクセスできて(確保できて)足りなくなったら落とされる、と。
callocについては知らない。個人的に同じ動作に違和感はないけど。
0445デフォルトの名無しさん
2010/09/27(月) 04:02:140446440
2010/09/27(月) 04:08:32これの意味もようやくなんとなく分かった。プロセスの仮想アドレスの予約だけでなく、
ページファイルにも確保でなく予約をしているのではないか?ってことか。実際に実体が
必要になったときに物理メモリを確保できればするが、できなければ予約したページ
ファイルの領域を使用すると。サイズ的には確保しているのと同じだけど処理は速く
なって、デメリットもない。WindowsのVirtualAllocが予約の際にそこまでしてくれて
ればmallocでコミットまでしなくてもいいのか。
>>445
初めて知って意味を把握しました。 orz
0447デフォルトの名無しさん
2010/09/27(月) 04:11:270448デフォルトの名無しさん
2010/09/27(月) 04:39:220449デフォルトの名無しさん
2010/09/27(月) 04:40:390450デフォルトの名無しさん
2010/09/27(月) 05:01:130451デフォルトの名無しさん
2010/09/27(月) 08:40:56完成=言語として枯れている状態
削除される機能もなければ追加される機能もない状態
0452デフォルトの名無しさん
2010/09/27(月) 10:30:18その時点でどのくらいまでメモリを割り当てていいかがわかる。
その値に応じてsetrlimitとかで仮想メモリの量を自主規制すれば
mallocがちゃんとNULLを返してくれるようになり、
>>443のみたいな無茶な割り当てはせずに済む。
0453デフォルトの名無しさん
2010/09/27(月) 11:50:270454デフォルトの名無しさん
2010/09/27(月) 14:56:43> 完成=言語として枯れている状態
それは短絡的すぎないか。
0455デフォルトの名無しさん
2010/09/27(月) 15:27:280456デフォルトの名無しさん
2010/09/27(月) 19:24:23見放されたことも完成というのか
0457デフォルトの名無しさん
2010/09/27(月) 22:20:15{
char* const byte = reinterpret_cast<char*>( &val );
std::reverse( byte, byte + sizeof( val ) );
return val;
}
エンディアンを入れ替えるのはこんな感じでいいですか
0458デフォルトの名無しさん
2010/09/27(月) 22:22:390459デフォルトの名無しさん
2010/09/27(月) 23:04:47何て最高なんだ
0460デフォルトの名無しさん
2010/09/28(火) 12:46:280461デフォルトの名無しさん
2010/09/28(火) 13:05:35囲碁とか将棋には詰め碁とあるじゃないですか?
そこで詰めC++を作りたいので
ルールがわかりません。
おしえてください。
0462デフォルトの名無しさん
2010/09/28(火) 13:46:38>そこで詰めC++を作りたいのでルールがわかりません。
「作りたい」からですよ。「作りたい」と思うのをやめればきっと判ります。
0463デフォルトの名無しさん
2010/09/28(火) 15:42:19例
使用できる変数 a b c 使用できる構文のfor3回 while4回
使用できる演算子=3回 +2回を使って
3*24+5を計算しなさい
こんな感じでいいでしょうか?
解きたいのでどなたか問題だしてみませんか?
0464デフォルトの名無しさん
2010/09/28(火) 15:46:010465デフォルトの名無しさん
2010/09/28(火) 15:46:49要素を代入するだけじゃん
0466デフォルトの名無しさん
2010/09/28(火) 17:18:10だよね。連続してるわけじゃないし。
0467デフォルトの名無しさん
2010/09/28(火) 17:19:24普通std::copy
0468デフォルトの名無しさん
2010/09/28(火) 17:25:360469デフォルトの名無しさん
2010/09/28(火) 17:32:070470デフォルトの名無しさん
2010/09/28(火) 17:53:00static const int a[3]={1,2,3};
とか書いてもエラーになります。
どうやって初期化すればいいですか?
環境はvisual studio2008です。
0471デフォルトの名無しさん
2010/09/28(火) 17:59:20public:
static const int a[3];
};
const int X::a[3] = {10,};
こーゆー感じ
0472デフォルトの名無しさん
2010/09/28(火) 18:31:37出来ました。
ありがとうございます。
0473デフォルトの名無しさん
2010/09/28(火) 18:46:280474デフォルトの名無しさん
2010/09/28(火) 19:36:56class Foo
{
int x = 0 ;
int a[3] = { 1, 2, 3 } ;
Foo() { } // メンバーはデフォルトの初期化子で初期化される
Foo( int x ) : x(x), a{ 1, 2, 3 } { } // コンストラクターのメンバー初期化子で初期化される
} ;
0475デフォルトの名無しさん
2010/09/28(火) 19:40:33wininet.dll のバージョン6.0を指定して使いたいと思い、
InternetExplorerのバージョン6.0のマシンから拾ってきました。
動的リンクによって、使用しようとしていますが、
関数の指定の仕方がわかりません。
GetProcAddressの型変換に問題があるのだとは思っていますが、
どうすればよいのでしょうか。
HMODULE dll = LoadLibrary("./wininet.dll");
int (*proc)(int) = (int (*)(int))GetProcAddress(dll, "FtpPutFileW");
hFtp = m_lpclFtpConnection->operator HINTERNET();
ret = proc(hFtp, pszLocalFile, pszRemoteFile, INTERNET_FLAG_TRANSFER_ASCII, 0);
FreeLibrary(dll);//開放
0476デフォルトの名無しさん
2010/09/28(火) 19:44:25callocで同じなのは、多分初めて使う時に0クリアされるってことなんだろうな
0477デフォルトの名無しさん
2010/09/28(火) 19:46:18納得。
0478デフォルトの名無しさん
2010/09/28(火) 20:00:09__stdcall
0479デフォルトの名無しさん
2010/09/28(火) 20:00:370480デフォルトの名無しさん
2010/09/28(火) 20:08:390481デフォルトの名無しさん
2010/09/28(火) 20:14:490482デフォルトの名無しさん
2010/09/28(火) 20:21:360483デフォルトの名無しさん
2010/09/28(火) 20:23:540484475
2010/09/28(火) 20:38:14system32に存在する wininet.dll を使用した場合に、
下記の記述でFTP転送ができていたので、
ハンドルは正常に取得できているはずです。
hFtp = m_lpclFtpConnection->operator HINTERNET();
ret = ::FtpPutFile(hFtp, pszLocalFile, pszRemoteFile, INTERNET_FLAG_TRANSFER_ASCII, 0);
>>477
受け渡す情報をポインタで作成まではしてみました。
関数ポインタへポインタで引数を渡せばいいのでしょうか。
>>482
FtpPutFileW は、変換関数なのですか。
FtpPutFile でいいのでしょうか。
>>478,479
__stdcall については、調べている最中です。
0485デフォルトの名無しさん
2010/09/28(火) 20:55:19> 使用できる変数 a b c 使用できる構文のfor3回 while4回
> 使用できる演算子=3回 +2回を使って
あのな
詰めxxxにはこういう条件は不要だ
最短手順以外は正解ではないのだ
0486デフォルトの名無しさん
2010/09/28(火) 21:02:36すみません、これでいいんですか?
std::map<int, std::string> test;
std::map<int, std::string>::iterator it = test.find(1);
test.insert(std::pair<int, std::string>(4, it->second)); // 4番目に移動
test.erase(it);
0487475
2010/09/28(火) 21:04:25GetProcAddressにカーソルを合わせたら int *_cdecl と出るけれども、
型に合わせて変換したら、void型...
これだと、呼び出せないのは当たり前なのですが・・・
error C2197: 'int (__stdcall *)(void)' : 実引数が多すぎます。
私、正解に近づいてます・・・?
int (__stdcall *proc)(void) = GetProcAddress(dll, "FtpPutFile");
// FTP接続が開始されているとき
if(NULL != m_lpclFtpConnection)
{
// ファイルをアップロードする。
hFtp = m_lpclFtpConnection->operator HINTERNET();
T_FtpPutFileW *t_FtpPutFile = new T_FtpPutFileW;
t_FtpPutFile->hConnect = hFtp;
t_FtpPutFile->lpszLocalFile = (const WCHAR*)pszLocalFile;
t_FtpPutFile->lpszNewRemoteFile = (const WCHAR*)pszRemoteFile;
t_FtpPutFile->dwFlags = INTERNET_FLAG_TRANSFER_ASCII;
t_FtpPutFile->dwContext = 0;
ret = proc(t_FtpPutFile);
0488デフォルトの名無しさん
2010/09/28(火) 21:14:32WinInet以前の問題すぎる。
0489デフォルトの名無しさん
2010/09/28(火) 21:14:39関数ポインタを勉強し直せ
0490475
2010/09/28(火) 21:17:41ありがとうございました。
0491デフォルトの名無しさん
2010/09/28(火) 21:23:27CHAR *を無理矢理WCHAR *にキャストしてるっぽいわ、
なんの説明もないm_lpclFtpConnectionだのT_FtpPutFileWだの持ち出してるわ、
おかしくない行見つける方が難しいだろ
0492デフォルトの名無しさん
2010/09/28(火) 21:29:08教えてください
0493デフォルトの名無しさん
2010/09/28(火) 21:46:57一歩進んで二歩下がる
0494デフォルトの名無しさん
2010/09/28(火) 22:32:17進んでいるところなんてあるのか?w
0495デフォルトの名無しさん
2010/09/28(火) 23:54:59他は全部退化した気がするが。
0496デフォルトの名無しさん
2010/09/29(水) 06:13:22私は std::string& を返す方が良いのではないかと感じてしまいます。
これは、もし私がオリジナルのstring型を作るなら、
string型の値を加工した結果をstring型とすることで
文字処理中に別の型のchar型を意識する必要を無く(減ら)そうとする
設計にするだろうと考えたからです。
しかし、std::stringがそうなっていないのは、
上記の私の考え方が間違っているからだと思うのですが
問題点はどのようなものなのでしょうか?
0497デフォルトの名無しさん
2010/09/29(水) 06:28:360498デフォルトの名無しさん
2010/09/29(水) 07:36:18わざわざオブジェクトを動的に確保しなければならないのか?
static変数や一時変数では無理だからな。
で、誰が解放するんだ?
0499デフォルトの名無しさん
2010/09/29(水) 10:07:21[]でそれを更新して自分をリターン
代入もオーバーロードして…
まあできてもやらんわこんな糞仕様
0500デフォルトの名無しさん
2010/09/29(水) 10:27:46s[2] = "world";
cout << s[2];
ってやると何が出るんだろうなそれ
0501デフォルトの名無しさん
2010/09/29(水) 10:58:47CStringを見習え。
0502デフォルトの名無しさん
2010/09/29(水) 12:20:530503デフォルトの名無しさん
2010/09/29(水) 13:05:24s[2] = "***"; // s == "he***lo"
s.range(2,5) = "[world]"; // s == "he[world]lo"
みたいな
0504デフォルトの名無しさん
2010/09/29(水) 13:34:360505デフォルトの名無しさん
2010/09/29(水) 14:53:20もう重症患者だよな
0506デフォルトの名無しさん
2010/09/29(水) 14:54:00それ便利だな。
是非そのクラスをboostライセンスで公開してくれ。
0507デフォルトの名無しさん
2010/09/29(水) 17:52:06void Hoge(int* array, int num);
void Hoge(int array[], int num);
どっちが推奨なんでしょうか?
0508デフォルトの名無しさん
2010/09/29(水) 17:54:540509475
2010/09/29(水) 18:07:13解決することができました。
ありがとうございました。
0510デフォルトの名無しさん
2010/09/29(水) 18:10:08特定クラスのnewとdeleteのオーバーライトはしっているが、
デフォルトのnewとdeleteのオーバーライトはどうすりゃいいんだ。
おしえてエライ人!!!
0511デフォルトの名無しさん
2010/09/29(水) 18:14:190512デフォルトの名無しさん
2010/09/29(水) 18:17:27だまされないぞw
0513デフォルトの名無しさん
2010/09/29(水) 18:22:25{
・・・
};
これでいいよ
0514デフォルトの名無しさん
2010/09/29(水) 18:55:14どっちも意味は全く同じ
下のほうが「配列の先頭アドレスを渡す」という意図がはっきりする程度
0515デフォルトの名無しさん
2010/09/29(水) 19:02:11てことは自前のアロケーターを使いたい場合はこれを書いたヘッダでもインクルードしてやればいいってことか。
0516デフォルトの名無しさん
2010/09/29(水) 19:39:40のOreStrって本気で実装する気になったら
どうするのがいいんだろうね。
特にOreStrでoperator =(const char *)をどう定義するかと
operator[]をどう定義するか。
0517デフォルトの名無しさん
2010/09/29(水) 19:40:28これは簡単そうだが実は�Bで後述する問題がある。
�A> s[2] = "***"; // s == "he***lo"
これは難しい。
まず直感的に言ってs[2]で返って欲しいのはchar型の変数だ。
しかしそうするとchar型への代入演算子はもう新たに定義できない。
そこで自前のクラスを返すことを考えるしか策がないわけだが、
ただそうするだけだとvoid foo(char c);とかいう関数に渡せないことになり、
operator overloadingとしては大分 気持ち悪い。
回避策として
s[2]で返すのをOreCharとかいうクラスにして、
char型への暗黙の型変換を定義しておけば
void foo(char c);とかいう関数に渡す分にはまるでchar型の
変数が返っているのと同じように振る舞える。
ということで擬似的に解決可能だけど、
そうだとしても
s[2] = "***";
これが元のsに反映される様なoperator=なんて定義できるんだろうか。
�B> s.range(2,5) = "[world]"; // s == "he[world]lo"
これは更に難しい。
sがOreStr型ならs.range(2,5)だってOreStr型を返して欲しいが、
それだとOreStrのoperator=(const char*)をどう定義するんだよ!
�@を満たしつつ�Bをも満たすって相当苦しいよな…。
0518デフォルトの名無しさん
2010/09/29(水) 19:44:46std::array<int, 5> b;
// 離れた場所で
static_assert(a.size() == b.size());
のようなことをやりたいのですが、a, b は定数式ではないのでコンパイルできませんよね。
size()なんてテンプレート引数をそのまま返すだけなんだから定数扱いしてくれてもいいのに。
0519デフォルトの名無しさん
2010/09/29(水) 19:45:12>そうだとしても
> s[2] = "***";
>これが元のsに反映される様なoperator=なんて定義できるんだろうか。
OreCharがOreStrへの参照と位置を持っていればいいのでは?
0520デフォルトの名無しさん
2010/09/29(水) 20:00:450521デフォルトの名無しさん
2010/09/29(水) 21:33:07> OreCharがOreStrへの参照と位置を持っていればいいのでは?
確かに−。
そしてそのメンバを読んであげればいいのか。
ありがとう。
>>520
すみません
趣味グラマなもので。
そうなると、�Aは行けるから、�@と�Bを両立させる方法だけが残った問題か・・・。
0522デフォルトの名無しさん
2010/09/29(水) 21:35:000523デフォルトの名無しさん
2010/09/29(水) 21:46:26こんな感じで
ttp://codepad.org/74OOjF7m
0524デフォルトの名無しさん
2010/09/29(水) 21:49:190525デフォルトの名無しさん
2010/09/29(水) 22:03:210526デフォルトの名無しさん
2010/09/29(水) 22:04:25N3126では
constexpr size_type size();
となってるのでコンパイルできると思う
0527デフォルトの名無しさん
2010/09/29(水) 22:28:580528デフォルトの名無しさん
2010/09/29(水) 22:38:440529デフォルトの名無しさん
2010/09/29(水) 22:43:350530デフォルトの名無しさん
2010/09/29(水) 22:52:53>アロケーターというのはSTLの要求を満たしたクラスのことだぞ。
>>529
「要求」ならば、英語ではrequirementとかconceptなどと言うんだが、
英語でも結局、これらの名詞に対して、「満たす」に該当する動詞を使うわけで、一言で言い表す言葉はないんじゃないか。
その「要求」に対して、アロケーターとかイテレーターとかコンテナーとか名前をつけておいて、
「ある型Tはアロケーターである」などとは言えるだろうけど。
0531デフォルトの名無しさん
2010/09/29(水) 23:43:340532デフォルトの名無しさん
2010/09/29(水) 23:44:340533デフォルトの名無しさん
2010/09/29(水) 23:47:590534デフォルトの名無しさん
2010/09/29(水) 23:51:380535デフォルトの名無しさん
2010/09/29(水) 23:52:120536デフォルトの名無しさん
2010/09/29(水) 23:53:250537デフォルトの名無しさん
2010/09/29(水) 23:54:410538デフォルトの名無しさん
2010/09/29(水) 23:55:190539デフォルトの名無しさん
2010/09/29(水) 23:56:06標準ライブラリ全部 (printfとかiostreamとか全部) の名前空間だ
0540デフォルトの名無しさん
2010/09/29(水) 23:57:140541デフォルトの名無しさん
2010/09/29(水) 23:57:440542デフォルトの名無しさん
2010/09/30(木) 00:03:180543デフォルトの名無しさん
2010/09/30(木) 00:05:27C++ならstd::wstring使おうぜ
0544デフォルトの名無しさん
2010/09/30(木) 00:07:56charとその文字列をクラス化(typedef)したstd::stringならともかく、
ワイド文字を扱いたかったら各環境独自が用意している文字列クラスを
使った方が結局の所移植性が出て来るという
本末転倒な事態が多い。
0545デフォルトの名無しさん
2010/09/30(木) 00:09:11この方が綺麗だったような気もする。
だが、考えようによっては
std名前空間内は標準以外もう誰も入れないのだから、
名前の衝突などを恐れなくていいから
むしろ無駄にタイプ量を増やす結果になるな。
0546デフォルトの名無しさん
2010/09/30(木) 00:15:060547デフォルトの名無しさん
2010/09/30(木) 00:16:40結局、wchar_tってのは、規格上で、
「wchar_tは、ひとつのオブジェクトで、その環境で表現可能な任意の一文字を表すことができる」
なんて非現実的な定義がされてるから問題なんだよ。
机上の空論というか、現実を見ていなかったというか。
そんな文字コードの規格、当時はおろか、現代ですら存在しないのに。
0548デフォルトの名無しさん
2010/09/30(木) 00:24:47#include <vector>
using ::std::vector;}
0549デフォルトの名無しさん
2010/09/30(木) 03:54:520550デフォルトの名無しさん
2010/09/30(木) 07:37:49やりたいのはどれ?
- 引数を追加した ::operator new のオーバーロードを定義する。
- 特定のクラスとその派生クラスで使われる operator new を定義する。
- デフォルトの ::operator new を再定義して置き換える。
0551デフォルトの名無しさん
2010/09/30(木) 07:41:26あぁ >>550 の最後の奴でいいのか。
グローバル名前空間に void* operator new (std::size_t) を定義すればいいよ。
必要なら対応する void operator delete (void*) throw() もね。
0552デフォルトの名無しさん
2010/09/30(木) 12:55:58思ってたけど、結合文字とかあるからどうしても一文字が
可変長になってしまう。
C#みたいな新しい言語は、length()みたいな長さを返すメソッドは、
物理的な長さじゃなくて文字数を返すようにして、char型は
廃止して、length() == 1の文字列を一文字にすればよかったのに。
現状stringとstringinfoを組み合わせないと、文字列操作が正しく
処理できないとか、中途半端すぎる。
IOのときにはどうせencode, decodeをかますわけだし。
0553デフォルトの名無しさん
2010/09/30(木) 13:16:14>物理的な長さじゃなくて文字数を返すようにして、
メモリアロケーション、どうする気?擬似コードだけど
memory_alloc( length( string_data) )
みたいにしたいでしょ?
0554デフォルトの名無しさん
2010/09/30(木) 13:40:320555デフォルトの名無しさん
2010/09/30(木) 14:15:190556デフォルトの名無しさん
2010/09/30(木) 14:20:20byteLength(), charLength(), codePointLength(), graphemeClusterLength() にしようぜ
0557デフォルトの名無しさん
2010/09/30(木) 14:25:090558デフォルトの名無しさん
2010/09/30(木) 17:46:04文字の操作がstring内で完結してれば物理的な長さを意識する
必要なないのでは。
クラスの内部ではもちろん、物理的な長さと両方もってる必要あるけど。
>>556
文字列クラスにはbyteLength()みたいのはいらないのが幸せだと思う。
IOのときはC#みたいにエンコード、デコードで
string←→バイト列 の変換をかますようにして。
0559デフォルトの名無しさん
2010/09/30(木) 17:58:45length: 要素数
size: バイト数(ブロックサイズ?)
常識的にこうなってるってこと?
少なくともC++の常識ではないな。STLとかsizeで要素数だし
別の言語ならそうなっていても不思議ではない
0560デフォルトの名無しさん
2010/09/30(木) 19:04:150561デフォルトの名無しさん
2010/09/30(木) 19:12:570562デフォルトの名無しさん
2010/09/30(木) 19:33:540563デフォルトの名無しさん
2010/09/30(木) 22:33:02脳内で勝手に常識が形成されたんだろうね。
0564デフォルトの名無しさん
2010/10/01(金) 19:18:55クラスの関数が今後追加する可能性が高い場合
ファイルを分けて記述する(コンパイル時の)有用性は落ちるという考えであってますか
(可読性が落ちるというような話は無しで)
0565デフォルトの名無しさん
2010/10/01(金) 19:25:170566デフォルトの名無しさん
2010/10/01(金) 19:50:43まだ有用性がどうのという段階ではない実験なら原則1ファイルがやりやすいと思う
0567デフォルトの名無しさん
2010/10/01(金) 19:52:42書いても問題ないよ。
0568デフォルトの名無しさん
2010/10/01(金) 22:47:08初めから考えておいた方が良いと思うけどね
0569デフォルトの名無しさん
2010/10/01(金) 23:12:45俺が過去のコードを再利用する時は
継承とかテンプレートとかみたいな美しい方法じゃなくて
コピペが多いんだけど、みんなもそんな感じ??
0570デフォルトの名無しさん
2010/10/01(金) 23:13:440571デフォルトの名無しさん
2010/10/01(金) 23:14:370572デフォルトの名無しさん
2010/10/01(金) 23:43:28お前もやってるだろう。
0573デフォルトの名無しさん
2010/10/01(金) 23:48:41ライブラリに分類して、そのフォルダーを参照させて使うようにしてる。
0575デフォルトの名無しさん
2010/10/02(土) 02:37:13小さくて独立してない部分なら俺もコピペする時あるよ
ある程度まとまった単位になると(大きさだけじゃないけど)
まとまってなければ、まとめることを考える
0576デフォルトの名無しさん
2010/10/02(土) 11:23:500577デフォルトの名無しさん
2010/10/02(土) 14:25:590578デフォルトの名無しさん
2010/10/02(土) 14:28:19そんなことしてると、何のためにあるのか不明瞭な関数やクラスが量産される
0579デフォルトの名無しさん
2010/10/02(土) 14:55:490580デフォルトの名無しさん
2010/10/02(土) 16:49:030581デフォルトの名無しさん
2010/10/02(土) 17:03:47依存してるもの全ソフトを更新とか無理だし、互換性なんて維持できないし
0582デフォルトの名無しさん
2010/10/02(土) 18:06:04でも、そういうライブラリが用意しなない特定用途向けの小物は自分でライブラリ化する。
俺ライブラリ化しておけば後に採用したライブラリへの移行時にも役に立つし
0583デフォルトの名無しさん
2010/10/02(土) 18:12:50結局ライブラリにはしないでソースファイル単位で取り込んじゃう。
0584デフォルトの名無しさん
2010/10/02(土) 18:15:02ダイナミックライブラリーじゃなくても
ソースファイルで取り込むのもライブラリーというよ。
0585デフォルトの名無しさん
2010/10/02(土) 18:18:110586デフォルトの名無しさん
2010/10/02(土) 18:31:480587デフォルトの名無しさん
2010/10/02(土) 18:33:100588デフォルトの名無しさん
2010/10/02(土) 18:41:430589デフォルトの名無しさん
2010/10/02(土) 18:45:180590デフォルトの名無しさん
2010/10/02(土) 19:04:320591デフォルトの名無しさん
2010/10/02(土) 19:08:340592デフォルトの名無しさん
2010/10/02(土) 20:46:100593デフォルトの名無しさん
2010/10/04(月) 01:02:070594デフォルトの名無しさん
2010/10/04(月) 01:03:320595デフォルトの名無しさん
2010/10/04(月) 01:06:200596デフォルトの名無しさん
2010/10/04(月) 01:11:05いる
0597デフォルトの名無しさん
2010/10/04(月) 01:31:17複数の人間からアクセスするにはちょっと怖い使い方だけど、どうせ自宅でアクセスするのは俺だけだし手軽だし
0598デフォルトの名無しさん
2010/10/04(月) 01:39:130599デフォルトの名無しさん
2010/10/04(月) 01:40:22入れてるよ
ある程度コード書くなら必要だよ
ファイル単位の rcs 位でもいいから
0600デフォルトの名無しさん
2010/10/04(月) 01:43:05ブランチで細かくコミットして、区切りでマージ、ブランチ削除で問題ない。
個人でもバージョン管理入れとくと便利だし、コミットなんて負担にならないし
0601デフォルトの名無しさん
2010/10/04(月) 02:01:51それリポジトリのルートでsvn logすると思いっきり全部見えるよね。
そういうの一切残したくなかったりすと延々とコミットしなくなって無意味状態に。
後からでもコミットを改竄し放題のgitの方が向いてるんだろうけどWindowsだといろいろとアレだし。
0602デフォルトの名無しさん
2010/10/04(月) 02:09:180603デフォルトの名無しさん
2010/10/04(月) 02:15:030604デフォルトの名無しさん
2010/10/04(月) 02:25:480605デフォルトの名無しさん
2010/10/04(月) 02:27:030606デフォルトの名無しさん
2010/10/04(月) 02:30:290607デフォルトの名無しさん
2010/10/04(月) 06:59:540608デフォルトの名無しさん
2010/10/04(月) 07:15:150609デフォルトの名無しさん
2010/10/04(月) 10:43:540610デフォルトの名無しさん
2010/10/04(月) 10:49:540611デフォルトの名無しさん
2010/10/04(月) 10:50:41書けるようになるわけじゃないからね
0612デフォルトの名無しさん
2010/10/04(月) 15:20:39PODかそうでないかにしなかったんですか?
0613デフォルトの名無しさん
2010/10/04(月) 16:18:450614デフォルトの名無しさん
2010/10/04(月) 16:25:48D&E 76ページ。
禿は複数のコンセプトを作りたくなかったとのこと。
曰く、(実際はだいぶ違うから原書読め)
もし、structが「Cとの互換性のため」であり、classが「C++の新機能」であったならば、
プログラマは二分して宗教戦争を始めてただろう
ひとつのコンセプトであれば、伝統的なCスタイルのプログラミングから、
C++スタイルのプログラミングに、容易に移行できる。
0615デフォルトの名無しさん
2010/10/04(月) 16:34:130616デフォルトの名無しさん
2010/10/04(月) 16:36:260617デフォルトの名無しさん
2010/10/04(月) 16:44:49memsetのことだろうか
0618デフォルトの名無しさん
2010/10/04(月) 16:52:42既存のCのコードはstructを使っている筈で、これはPOD。
新しいコードで非PODならclassを使うのなら対立しようがないが。
0619デフォルトの名無しさん
2010/10/04(月) 17:00:14writebackを殺すところから始めないとな
0620デフォルトの名無しさん
2010/10/04(月) 17:09:03むり
0621デフォルトの名無しさん
2010/10/04(月) 17:24:57Linux限定でiowrite32_repとか。
0622デフォルトの名無しさん
2010/10/04(月) 17:33:220623デフォルトの名無しさん
2010/10/04(月) 22:13:10vectorのassign
0624デフォルトの名無しさん
2010/10/04(月) 22:49:34ただのデータの塊はstruct、抽象を提供するのがclass
0625デフォルトの名無しさん
2010/10/04(月) 22:57:33最初はデーターか否かで分けてたけど、今はもうどうでも良くなって
最初の継承かメンバがpublicかprivateかどうかしか見てないわ
0626デフォルトの名無しさん
2010/10/04(月) 23:03:460627デフォルトの名無しさん
2010/10/04(月) 23:20:360628デフォルトの名無しさん
2010/10/04(月) 23:25:080629デフォルトの名無しさん
2010/10/04(月) 23:27:240630デフォルトの名無しさん
2010/10/04(月) 23:29:510631デフォルトの名無しさん
2010/10/04(月) 23:31:58だからstructのほうが平均タイプ量で得する
0632デフォルトの名無しさん
2010/10/04(月) 23:33:520633デフォルトの名無しさん
2010/10/04(月) 23:38:160634デフォルトの名無しさん
2010/10/04(月) 23:39:370635デフォルトの名無しさん
2010/10/04(月) 23:42:45#define class struct
#define private public
#define protected public
の3文を入れるのがタイプ量軽減に最強だな。
0636デフォルトの名無しさん
2010/10/04(月) 23:44:32でも template は <typename T> じゃなきゃ嫌だ。
0637デフォルトの名無しさん
2010/10/04(月) 23:46:290638デフォルトの名無しさん
2010/10/05(火) 00:09:280639デフォルトの名無しさん
2010/10/05(火) 00:13:080640デフォルトの名無しさん
2010/10/05(火) 00:19:37こういうギリギリPGが寄ってたかって味方してくれる訳か。
0641368
2010/10/05(火) 00:22:37> There is no semantic difference between class and typename in a template-parameter.
わざわざ「意味の違いはないよ」と書いてある。
なんで2つ必要なんだ? どこぞのコンパイラが作った既成事実を追認でもしたのか?
0642デフォルトの名無しさん
2010/10/05(火) 00:30:51違うかもしれないって聞いたけど大丈夫?
0643デフォルトの名無しさん
2010/10/05(火) 00:33:00テンプレート引数に出てくるtypenameとclassは同じ意味だけど、
受け取った型から内部の型を取り出すときのキーワードとしては違いがあるみたい。
struct A{typedef int I;};
struct B{typedef B I;};
template<typename T>
struct C
{
typedef typename T::I J;
// typedef class T::I J; // NG for A, OK for B
};
0644デフォルトの名無しさん
2010/10/05(火) 00:42:59違うかもしれないというより、同じかもしれないという仮定自体が間違い。
0645デフォルトの名無しさん
2010/10/05(火) 01:20:35そこは typename じゃなきゃコンパイルできないじゃん。
0646デフォルトの名無しさん
2010/10/05(火) 07:16:16TがBならclassでもコンパイルは通る。
0647デフォルトの名無しさん
2010/10/05(火) 09:37:00なるほど。でもそこであえてclassにする意義ってなんだろう?
C#みたいに型引数に大きな制約をかけられるってんならわかるが、
組み込み型のみ拒否できる意義とは?
0648デフォルトの名無しさん
2010/10/05(火) 13:00:530649デフォルトの名無しさん
2010/10/05(火) 13:32:17http://profiles.yahoo.co.jp/-/profile/?sp=oGT3BCg1eqGiCHsyTN79KJdc
yakultbrainのプロフィール。
http://profiles.yahoo.co.jp/-/profile/?sp=yfT90WEoeq3TUI5IptgFJu2hBw--
0650デフォルトの名無しさん
2010/10/05(火) 13:49:590651デフォルトの名無しさん
2010/10/05(火) 15:25:120652デフォルトの名無しさん
2010/10/05(火) 15:42:210653デフォルトの名無しさん
2010/10/05(火) 15:55:030654デフォルトの名無しさん
2010/10/05(火) 16:18:10private:
int size;
public:
int size() { return size; }
};
Javaだと通るんだけど…
"再定義; 以前の定義は 'データ メンバー' でした。"というエラーが出るんだけどC++の仕様?
回避するには、ユニークな名前にしないと、ダメ?
0655デフォルトの名無しさん
2010/10/05(火) 16:34:190656デフォルトの名無しさん
2010/10/05(火) 16:37:22> Javaだと通るんだけど…
C++は異世界です。
名前の勉強をしてください。
0657デフォルトの名無しさん
2010/10/05(火) 16:41:000658デフォルトの名無しさん
2010/10/05(火) 16:49:07class A {
private:
int size;
public:
void setSize(int size) { this->size = size; }
int getSize() { return size; }
};
みたいにしなければならないんですね。
とりあえず、元のソース書いた人間を恨みます。
0659デフォルトの名無しさん
2010/10/05(火) 16:55:560660デフォルトの名無しさん
2010/10/05(火) 17:01:57という解決策を作るとはびっくりだ。
0661デフォルトの名無しさん
2010/10/05(火) 17:04:09とか言い出す輩が登場
0662デフォルトの名無しさん
2010/10/05(火) 17:05:240663デフォルトの名無しさん
2010/10/05(火) 17:05:44そういえばアクセッサうんぬん厨はいたね。
0664デフォルトの名無しさん
2010/10/05(火) 17:09:38とりあえず、
int getSize() const {return size;}
の方がいい
0665デフォルトの名無しさん
2010/10/05(火) 17:14:40constつけると、呼んだときに副作用がないことを保障するんだっけか?
0666デフォルトの名無しさん
2010/10/05(火) 17:16:26ついでにメンバ変数名とは違う名前にしといた方が安全。
void setSize(const int value) { size = value; }
さあ皆さん、宗教論争の始まりです。
0667デフォルトの名無しさん
2010/10/05(火) 17:22:54遮蔽や継承するので、アクセサメソッド経由にしたいんです。
C++のリファレンスのような書き方知らないんで…
Java臭くなってしまって、ごめんなさい。
0668デフォルトの名無しさん
2010/10/05(火) 17:23:09少なくとも素直にsizeに代入しただけで終わるはずはないと思う
0669デフォルトの名無しさん
2010/10/05(火) 17:26:00>>666さん
一応、intel C/C++ コンパイラ / MSVC / GCCで確認したのですが、
そのへんの変数のスコープは、大丈夫みたいでしたよ。
0670デフォルトの名無しさん
2010/10/05(火) 17:35:08まあそうなんだけど、アクセサを拡張するときに間違いのもとになる。
おそらく、何かのサイズを変更する関数が単なるメンバ変数の書き換えで
済みはしないだろ。機能を追加することになるはずだ。
そのときのための保険をコストなしでかけられるんだから、かけといて
損はないだろ?
0671デフォルトの名無しさん
2010/10/05(火) 17:53:22出来る場合、
const int& test();
って感じでいいんですか?
急いでいます。お願いします。
0672デフォルトの名無しさん
2010/10/05(火) 17:54:59今調べるから2時間ほど待ってて
0673デフォルトの名無しさん
2010/10/05(火) 17:56:240674デフォルトの名無しさん
2010/10/05(火) 18:05:41良いけど、
メリットデメリットくらいちゃんと勉強しろ。
特に無効な参照になってないよな?
まさかと思うけどメンバ関数じゃなくて普通の関数でローカル変数への
参照を返しているとかいうバカじゃないよな?
0675671
2010/10/05(火) 18:10:33STLのmapのfindでデータを見つけて、そのイテレータを使って値を返そうと
したときにconst参照で返したいなと思っただけです。
mapにデータはあるので、ローカル変数扱いじゃないでしょうから、
消滅してる可能性はないと思ったのでね。
偉そうなこと言って間違ってたらすみません。
0676671
2010/10/05(火) 18:12:090677デフォルトの名無しさん
2010/10/05(火) 18:16:13> STLのmapのfindでデータを見つけて、そのイテレータを使って値を返そうと
> したときにconst参照で返したいなと思っただけです。
なんでそう思ったのかよく分からん。
まさかイテレータをコピー渡ししたくないなんてバカじゃないよな?
0678デフォルトの名無しさん
2010/10/05(火) 18:22:030679デフォルトの名無しさん
2010/10/05(火) 18:24:10それはさすがに勉強不足すぎだろう
いや別にお前の会社が傾くだけだから好きにしてくれていいんだけど。
0680671
2010/10/05(火) 18:25:20いや、テンプレートを使ったmapのクラスを作ってるんです。
このクラスは色んなクラスで使って、こいつはそのクラスのメンバとして持たせるつもりです。
その際に、mapに登録したデータを取り出したかったんです。
イテレータがpだとしたら
*pを返り値にしてあげて、そのデータを受け取った側も一応データを変更できないように
constをつけておこうと思った次第であります。
0681デフォルトの名無しさん
2010/10/05(火) 18:25:500682671
2010/10/05(火) 18:26:57すみません。
0684デフォルトの名無しさん
2010/10/05(火) 18:32:460685デフォルトの名無しさん
2010/10/05(火) 18:34:00俺だけじゃあるまい
0688デフォルトの名無しさん
2010/10/05(火) 18:35:46. ! i | |
! r¬| h
i `TY´ !
i { 丿
i j /|
! _ _ _ / l!」
! /.::.::.::.::.::.`ヽ、 ハ ノ
i /.::.::.::.::.::.::.::.::.::i:.:〉/ 〉
i i.::.;:.::.::.::.::.::.:::i::.:ト'/ /
!|:.::i.::.::.::.::.::.::lリ:::j/ / 釣れたー!!
!l::::l:::.:::.:::.:::;:;ルイ /
|'V:トNlVル'´ノ 丶 /
L乂^〈、__/ 〈
{いゝ、 ' ヽ
ト「`ヽハ. ヽ ! 丿
ト! : : Vヘ 广´
,ハl : : 人∧、 /
. / ハ/ (尢)、{
入_,ル' -─−:八ヽl、
r─‐'´ / {.: : : : : : : : ;ハ、 〉
´ ̄`ゾ ヽ、: : : : :/ l`|
! ` ーイ ヽl
`、 │ |
ヽ_」、__」
ヽ::::l:::::::::::::|
0689671
2010/10/05(火) 18:36:480690デフォルトの名無しさん
2010/10/05(火) 18:57:240691デフォルトの名無しさん
2010/10/05(火) 18:59:320692デフォルトの名無しさん
2010/10/05(火) 19:25:50☆ チン マチクタビレタ〜
マチクタビレタ〜
☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・) < 値が必要なのにイテレータを戻すメリットまだ〜?
\_/⊂ ⊂_ ) \_____________
/ ̄ ̄ ̄ ̄ ̄ ̄ /|
| ̄ ̄ ̄ ̄ ̄ ̄ ̄| |
| 愛媛みかん |/
0693671
2010/10/05(火) 19:43:26const_iteratorの存在をすっかり忘れてました。すみません。
でもconst_iteratorにした場合って、返り値の部分はどうかけばいいんですか?
pがconst_iteratorだとして
int& test()
{
return *p;
}
と値を返した場合、この関数を使用して値を受け取った側はこの値を書きかえれない
ようになっているのでしょうか?
constなしでも書きかえれないようになっているということですかね?
0694デフォルトの名無しさん
2010/10/05(火) 19:51:370695671
2010/10/05(火) 19:58:57すいません。これウイルスだと思ってました。
私がやりたいのはイテレータを返すのではなく、値が変更できないように
const状態で値を返したいんです。
添字でのアクセスじゃなくて、イテレータで(*p)とかで値を返す場合は、
そのイテレータはconst_iteratorだろうが、iteratorだろうが、
かならず戻り値の表記としては、
const int& test()のようにconstは必要なんですか?
それとも、const_iteratorの場合は戻り値にconstという表記はいらないのですか?
0696デフォルトの名無しさん
2010/10/05(火) 20:07:27値を返し、かつmapを書き換えられないようにしたいなら、普通に値戻しすればいい。
int test()
{
p->second;
}
という具合。さらに戻した値の変更まで禁止したければconstを付けてもいい。
いずれにしても、関数が戻すのは値のコピーだから、mapは書き換えられない。
0697671
2010/10/05(火) 20:11:37ありがとうございます。
すいません。マップなのでp->secondですね。ボケてました。
実は値戻しすると結構大きい構造体を返すときにオーバーヘッドが発生するので
参照を使いたいなーと思ってたんです。
なので参照をつかった場合はどうなるのかと思って質問しています。
よろしくお願いします。
0698デフォルトの名無しさん
2010/10/05(火) 20:13:380700デフォルトの名無しさん
2010/10/05(火) 20:43:32フォーカスが行っているかを調べたいと思っています。
エディットボックスを選んでいるかどうかなら
CEdit *e = dynamic_cast<CEdit *>(GetFocus());
って感じで、後はeがNULLかどうか調べれば・・・と考えていたんですが、
どうやら常にキャストが失敗しているようなんです(フォーカスがエディットボックスにあっても失敗します)。
原因は何故でしょうか?こういう形でオブジェクトの型を判別するのは不可能なんでしょうか?
0701デフォルトの名無しさん
2010/10/05(火) 20:48:27MFC相談室に行った方がいいと思う。
0702デフォルトの名無しさん
2010/10/05(火) 20:58:340703デフォルトの名無しさん
2010/10/05(火) 21:26:44バカなの?
0704デフォルトの名無しさん
2010/10/05(火) 21:29:120705デフォルトの名無しさん
2010/10/05(火) 21:29:540706デフォルトの名無しさん
2010/10/05(火) 21:33:290707デフォルトの名無しさん
2010/10/05(火) 21:34:17おいそれウイルスだぞ。
0708デフォルトの名無しさん
2010/10/05(火) 21:38:50そんなマクロがあったとは知りませんでした、ありがとう!無事に判別できました。
ここにdynamic_castではダメな理由が書いてありますね。
http://www.codeguru.com/forum/archive/index.php/t-198308.html
0709デフォルトの名無しさん
2010/10/05(火) 22:09:39その手のMFC実装のお陰でC++を間違って理解しかけた初心者の頃の俺を思い出す
0710デフォルトの名無しさん
2010/10/05(火) 22:15:56CEdit *e = (CEdit*)GetFocus();
だけで普通に動いちゃうと思うぞ
0711デフォルトの名無しさん
2010/10/05(火) 22:29:100712デフォルトの名無しさん
2010/10/05(火) 22:43:250713デフォルトの名無しさん
2010/10/05(火) 22:44:230714デフォルトの名無しさん
2010/10/05(火) 22:54:37結構安いと思うんだけど?
お前ら的にはあり?
IS01 1円スタート 即決有
http://page9.auctions.yahoo.co.jp/jp/auction/k134019945
http://page8.auctions.yahoo.co.jp/jp/auction/h145981541
http://page11.auctions.yahoo.co.jp/jp/auction/n91104112
http://page10.auctions.yahoo.co.jp/jp/auction/m77370908
http://page2.auctions.yahoo.co.jp/jp/auction/b113651808
IS02 1円スタート 即決有
http://page11.auctions.yahoo.co.jp/jp/auction/n93102178
http://page2.auctions.yahoo.co.jp/jp/auction/b113622828
http://page11.auctions.yahoo.co.jp/jp/auction/n92987886
0715デフォルトの名無しさん
2010/10/05(火) 22:55:000716デフォルトの名無しさん
2010/10/05(火) 22:58:29MFC以外は保障されてないの?
型が分かってればそういうダウンキャストも平気かと思ってたけど。
0717デフォルトの名無しさん
2010/10/05(火) 22:59:01VC6?
0718デフォルトの名無しさん
2010/10/05(火) 23:07:05未来へ行くなら、IS03を待て。
0719デフォルトの名無しさん
2010/10/05(火) 23:12:000720702
2010/10/05(火) 23:12:30CWnd* pWnd = GetDlgItem(IDC_EDIT1);
BOOL bIsEdit = pWnd->IsKindOf(RUNTIME_CLASS(CEdit));
この場合もbIsEditは0になるみたいですね。あくまでGetDlgItem()が返すのは
CWnd型のポインタであって、CEditじゃないから、ダウンキャストは常に失敗すると
いうことであってますかね?
>>717
2008です。
0722デフォルトの名無しさん
2010/10/05(火) 23:16:520723デフォルトの名無しさん
2010/10/05(火) 23:34:02IDC_EDIT1に対応するCEdit型のコントロール変数を追加してみろ。
GetDlgItemの戻り値が変わる。
何を言ってるのか わからねーと思うが(ry
0724デフォルトの名無しさん
2010/10/06(水) 00:19:05http://msdn.microsoft.com/ja-jp/library/t91eb9y9%28v=VS.80%29.aspx
このサンプルを見る限りそうじゃないよね
>>723の言う通りにすれば出来ると思う
0725デフォルトの名無しさん
2010/10/06(水) 07:11:170726700
2010/10/06(水) 10:36:53やってみました。頭がどうにかなりそうだった・・・
DDXってどういう仕組みになってんですかね。
さっきDYNAMIC_DOWNCASTで成功したと思ったのはこのことだったようですね。
その後DDX_Control()を置き換えてDDX_Text()にしたので失敗したようです。
>>724
>>720のソースはここから持ってきました。試してはいませんが
http://www.microsoft.com/msj/1297/c1297.aspx
0727デフォルトの名無しさん
2010/10/06(水) 11:59:140728デフォルトの名無しさん
2010/10/06(水) 12:11:33インスタンスオブジェクト情報は不要な関数や変数に適用します。
0729デフォルトの名無しさん
2010/10/06(水) 12:13:410730デフォルトの名無しさん
2010/10/06(水) 12:15:400731デフォルトの名無しさん
2010/10/06(水) 12:17:340732デフォルトの名無しさん
2010/10/06(水) 12:21:47インスタンス化しないで使えるっていうのはこういうことでしょうか?
class TEST{
public:
static void tesutodayo()
{
cout<<"あほ!";
}
というクラスがあったとして、このヘッダをインクルードしたファイルがあったら、
TEST Test;
Test.tesutodayo();
ってしなくても
TEST::tesutodayo();
って感じで呼ぶことができるってことでしょうか?
0733デフォルトの名無しさん
2010/10/06(水) 12:23:57俺はあほじゃねーよばか!
0734デフォルトの名無しさん
2010/10/06(水) 12:24:12それなら>>731で合ってる
スコープがクラス内になってるだけで
0735デフォルトの名無しさん
2010/10/06(水) 12:26:03static 変数みたいなもんって解釈であってる
0736デフォルトの名無しさん
2010/10/06(水) 12:30:18ローカル変数にstaticつけて、静的変数にするのと同じって意味ですか?
それともグローバルな変数にstaticつけて、局所的に使用するのと同じってことですか?
あと、インスタンス化しないで使えるっていうのは>>732みたいなことで
いいのでしょうか?
0737デフォルトの名無しさん
2010/10/06(水) 12:32:44その変換はできるけど、それは保障されていないだろう。
ボタンにフォーカスがあるときにそれを実行したらどうなる?
0738デフォルトの名無しさん
2010/10/06(水) 12:48:43HWND e = GetFocus();
0739デフォルトの名無しさん
2010/10/06(水) 12:50:32どっちでもいいよ
0740デフォルトの名無しさん
2010/10/06(水) 12:58:27答えになってません。
0741デフォルトの名無しさん
2010/10/06(水) 13:05:450742デフォルトの名無しさん
2010/10/06(水) 17:25:46このfunctionの使い方について、詳しく説明してるサイトがあったら教えて下さい。
0743デフォルトの名無しさん
2010/10/06(水) 17:41:00http://boost.org/libs/function/
名前空間は違うが使い方は同じだ
std::functionは0x環境で使える
0744デフォルトの名無しさん
2010/10/06(水) 17:45:39う、英語ですか。日本語のページがあると嬉しいんですが。
ちなみに0x環境って何ですか?
簡単な説明と使い方を教えてくれてもいいです。
0745デフォルトの名無しさん
2010/10/06(水) 18:13:17その型をユーザ定義型(構造体)などを型にした場合、その型特有の処理をさせることってできますか?
たとえば、
template <typename A> class TEST{
typename vector<A> test;
};
こういうクラスがあったとして、
このテンプレート引数をある構造体にしたいんです。
このクラスで下のような関数を作って、値を返したいんです。
でもテンプレートクラスを実体化するまで型が決まってないので、
こんな書き方してもコンパイルエラーがでます。
何かいい方法はないでしょうか。
int TEST::call()
{
return test[0].data
}
0746デフォルトの名無しさん
2010/10/06(水) 18:39:28分割するとだめみたいだな
クラスの定義部分にメンバ関数本体を書けば通る
template <typename A>
class TEST {
typename std::vector<A> test;
public:
TEST(A a) { test.push_back(a); }
A call() {
return test[0];
}
};
int main()
{
TEST<double> td(1.0);
std::cout << td.call() << std::endl;
}
0747デフォルトの名無しさん
2010/10/06(水) 19:00:01質問の趣旨であろう「その型特有の処理」の意味がわからん
テンプレートの特殊化のことか?
それとコンパイルエラーは関係ない
× int TEST::call()
○ template<typename A> int TEST<A>::call()
0748デフォルトの名無しさん
2010/10/06(水) 19:20:23template <class A, class B>
class TEST {
std::vector<A> test;
public:
TEST(A a) { test.push_back(a); }
B call();
};
template <class A, int>
int TEST<A, int>::call() // エラー
{
return test[0].d;
}
0749デフォルトの名無しさん
2010/10/06(水) 19:27:14struct SS {
double d;
int i;
};
template <class A, class B>
class TEST {
std::vector<A> test;
public:
TEST(A a) { test.push_back(a); }
B call();
};
template <class A, class B>
B TEST<A, B>::call()
{
return test[0].d;
}
template <class A, class B>
B TEST<A, B>::call() // エラー
{
return test[0].i;
}
0750デフォルトの名無しさん
2010/10/06(水) 19:40:44わかりにくくてすいません。
言い方が悪かったです。その型のメンバを呼び出すが正しいです。
例えば
strucct ABC{
int width;
int height;
};
っていう構造体があるとして、こいつをさっきのクラステンプレートに渡します。
まあ、ここまではうまくいくんですけど、
>>749の方がやっていただいてる通り、インスタンス化するまでは、
まだ型が決まってないので、このテンプレートクラスの関数には
下記のようにそのメンバのwidthとかが書けないんです。
まだ型が確定してないからだと思います。
template <class A, class B>
B TEST<A, B>::call() // エラー
{
return test[0].width;
}
int型とかだと、そのまま書けば値は一つしかないのでできますが、
構造体になると、構造体の型によってそのメンバって変わってきますよね?
これをクリアする方法をお伺いしたかったのです。
無理でしょうか?
0751デフォルトの名無しさん
2010/10/06(水) 19:53:57{
int x;
};
template <class T> struct X
{
A a;
int func(void) const { return a.x; }
};
普通に呼べるよ
0752デフォルトの名無しさん
2010/10/06(水) 20:00:17struct B { int y; };
int & Get(A & a) { return a.x; }
int & Get(B & b) { return b.y; }
template <class T> class C
{
T obj;
public:
int func(void) { return Get(obj); }
};
0753デフォルトの名無しさん
2010/10/06(水) 20:19:04boost::functionでぐぐれば日本語も見つかるからそれで頑張れ、ものすごいおおざっぱに言うと関数ポインタみたいなもんだ
0xはc++0xでぐぐればいい、これもすごいおおざっぱにいうとvs2010で使える機能みたいなもんだ
0754デフォルトの名無しさん
2010/10/06(水) 20:35:04こんな感じ?
template <typename A> class TEST {
std::vector<A> test;
int call();
};
struct HOGE { int data; };
struct ABC { int width; int height; };
template <> int TEST<int>::call() { return test[0]; };
template <> int TEST<double>::call() { return (int) test[0]; };
template <> int TEST<HOGE>::call() { return test[0].data; };
template <> int TEST<ABC>::call() { return test[0].width; };
0755750
2010/10/06(水) 20:38:41絶対無駄にはしません。
本当にありがとうございました!
0756デフォルトの名無しさん
2010/10/06(水) 20:50:27やっぱりその手しかないよね
明示的特殊化
0757デフォルトの名無しさん
2010/10/06(水) 21:19:250758デフォルトの名無しさん
2010/10/06(水) 21:28:25explicit instantiationじゃないの?
0759デフォルトの名無しさん
2010/10/06(水) 21:28:370760デフォルトの名無しさん
2010/10/06(水) 21:41:130761デフォルトの名無しさん
2010/10/06(水) 21:42:36同様にコピーコンストラクタの引数名の定番はありますか?
0762デフォルトの名無しさん
2010/10/06(水) 21:43:54↑
しかしひでえな
今の新しいコンパイラはちゃんとバグが取れてるのか?
0763デフォルトの名無しさん
2010/10/06(水) 22:00:17other
0764デフォルトの名無しさん
2010/10/06(水) 22:03:05ってことで合ってますか?
0765デフォルトの名無しさん
2010/10/06(水) 22:09:33そうだよ
初期化リスト中でベースクラスのコンストラクタを呼び出す
0766デフォルトの名無しさん
2010/10/06(水) 22:15:44しかしstringがムーブコンストラクタを使うようになって速くなったね
class Base {
std::string base_str;
public:
Base(const std::string& str) : base_str(str) {}
virtual void print_str() const {
std::cout << base_str << std::endl;
}
};
class Derived : public Base {
std::string derived_str;
public:
Derived(const std::string& str1, const std::string& str2 = "") : derived_str(str1), Base(str2) {}
void print_str() const {
std::cout << derived_str << ' ';
Base::print_str();
}
};
int main()
{
Derived d("derived", "base");
d.print_str();
}
0767デフォルトの名無しさん
2010/10/06(水) 22:18:32やったねC+ちゃん!
0768デフォルトの名無しさん
2010/10/06(水) 22:28:17>>752にデフォルトのGetを加えたものが良いと思うな
0769デフォルトの名無しさん
2010/10/06(水) 22:32:52構造体内に違う型が混在していてそれをテンプレートでコンパイル時に仕分ける方法を
探しているのかと悩んでしまったぜ
0770デフォルトの名無しさん
2010/10/06(水) 22:47:39メンバ関数の特殊化はおすすめできない
コードが汚くなるだけじゃなく部分的特殊化で問題が生じたりしてめんどくさい
0771デフォルトの名無しさん
2010/10/07(木) 00:05:19別件で書いたものだけでこういうことやいろんなことができるようになる
http://codepad.org/XAMW2Mxi
boostの和訳の少し古い奴ならcppllからsourcefofgeダウンロードできたはず
>>745
こんな感じのことやりたいのかな?
http://codepad.org/UrnwJaPk
0772デフォルトの名無しさん
2010/10/07(木) 13:35:50昨日の者です。
>>751のやり方でいけました。このやり方で進めてます。
>>754のやり方はコードが汚いし、型が増えるたびに拡張するのはよくないので
やめました。
0773デフォルトの名無しさん
2010/10/07(木) 13:39:06> >>754のやり方はコードが汚いし、型が増えるたびに拡張するのはよくないので
> やめました。
そもそもテンプレートとしてなww
0774デフォルトの名無しさん
2010/10/07(木) 13:50:56boostの件についてはありがとうございます。
こんなことができるとは。反則ですね。
非常に助かりました。
>>745の件については、>>751のやり方でいきます。
ソースコードはもらっておきます。
0775デフォルトの名無しさん
2010/10/07(木) 15:52:56関数にstaticつける利点がわかりません。
これはクラス内での話しですが、クラス内関数にstaticをつける利点に
ついて分かりやすく教えてください。
0776デフォルトの名無しさん
2010/10/07(木) 15:54:520777デフォルトの名無しさん
2010/10/07(木) 16:09:17つまりその関数はpublicで指定するしかないってことですよね?
性的メンバ変数を操作するための関数みたいなもんですよね?
0778デフォルトの名無しさん
2010/10/07(木) 16:11:21例えばfriendからなら呼べる
0779デフォルトの名無しさん
2010/10/07(木) 16:14:250780デフォルトの名無しさん
2010/10/07(木) 16:16:15ってことになったらどう思う?
同時受賞者もでるのかな?
0781デフォルトの名無しさん
2010/10/07(木) 16:16:560782デフォルトの名無しさん
2010/10/07(木) 16:19:56スレチなので死んでください
0783デフォルトの名無しさん
2010/10/07(木) 16:19:57作っていて、BCD構造体という使いたいのですが、
BCDという識別子が認識されません。
これを使うにはどうしたらいいのでしょうか?
作成中のプログラムはwin32コンソールアプリケーションで
すべてC言語で書いています。
<stdio.h>、<stdlib.h>、<windows.h>をインクルードしています。
windowsでのプログラミングは初めてなんで見当違いな聞き方かもしれない
ですけどよろしくお願いします。
0784デフォルトの名無しさん
2010/10/07(木) 16:21:18それを使うのに、必要なライブラリをいれろ
0785デフォルトの名無しさん
2010/10/07(木) 16:22:07なんていうライブラリですか?
0786デフォルトの名無しさん
2010/10/07(木) 16:22:210787デフォルトの名無しさん
2010/10/07(木) 16:23:12いっぺん出直してこいやカス
0788デフォルトの名無しさん
2010/10/07(木) 16:27:43知能っていうライブラリだけど君持ってないよね
0789デフォルトの名無しさん
2010/10/07(木) 16:27:48いや それがわからんから聞いてる。
0790デフォルトの名無しさん
2010/10/07(木) 16:28:47死ね
0791デフォルトの名無しさん
2010/10/07(木) 16:31:240792デフォルトの名無しさん
2010/10/07(木) 16:31:28自分のクラス内にアクセスさせたい関数につけるって考えたほうがいいですね。
たとえば、WinMain関数をクラス内にfriendつけて、宣言しちゃえば、
WinMainからそのクラスのメンバにアクセスできますもんね!
なーるほど。
0793デフォルトの名無しさん
2010/10/07(木) 16:32:38それに乗り換えれば、やさしいLinux開発者か何でも教えてくれるよ。
0794デフォルトの名無しさん
2010/10/07(木) 16:36:49BCD?
DCB?
0795デフォルトの名無しさん
2010/10/07(木) 16:39:55DCBですた。すいません。
0796デフォルトの名無しさん
2010/10/07(木) 20:24:45これ自体は容易に納得のいくことなのですが、今日 std::count_if を使いながら
ふと思ったのです。
述語をラムダ式で書くとき、変数のキャプチャを行うことが多いと思いますが、
変数のキャプチャを行ったラムダ式は純粋関数と言えるのでしょうか?
というか、ラムダ式を述語として安全に使える条件とは?
0797デフォルトの名無しさん
2010/10/07(木) 20:40:320798デフォルトの名無しさん
2010/10/07(木) 20:50:370799デフォルトの名無しさん
2010/10/07(木) 21:08:48関数オブジェクト」と言えば満足ですかね?
0800デフォルトの名無しさん
2010/10/07(木) 21:13:170801デフォルトの名無しさん
2010/10/07(木) 21:20:180802デフォルトの名無しさん
2010/10/07(木) 21:55:550803デフォルトの名無しさん
2010/10/07(木) 22:02:30C++は、int* array = new int[1024]; とやった時、配列の中身0クリアされている?
Cで mallocした時とかは、補償されてないけどさ。
0804デフォルトの名無しさん
2010/10/07(木) 22:10:570805デフォルトの名無しさん
2010/10/07(木) 22:11:33STLのコンテナで、要素数を指定できるコンストラクタを持ってる奴なら、
全要素をデフォルトコンストラクタで初期化する。
0806デフォルトの名無しさん
2010/10/07(木) 22:16:53とまあこんな具合。
0807デフォルトの名無しさん
2010/10/07(木) 22:17:41ありがとうございます。
0808デフォルトの名無しさん
2010/10/07(木) 22:18:47あとクラスなら
MyClass* arr = new MyClass[1024];
これでもデフォルトコンストラクタで初期化されるんだよね?
0809デフォルトの名無しさん
2010/10/07(木) 22:19:560810デフォルトの名無しさん
2010/10/07(木) 22:20:33new T[...]()
とすればいい
0811デフォルトの名無しさん
2010/10/07(木) 22:24:32YES。
> C++0xで初期化させる配列newとか出来ないの?
むしろ組み込みの配列を使うと警告が出るくらいでいいと思う。
0812デフォルトの名無しさん
2010/10/07(木) 22:31:08こんなんできたのか知らんかった
0813デフォルトの名無しさん
2010/10/07(木) 22:32:000814デフォルトの名無しさん
2010/10/07(木) 22:32:03こんなんできたのか知らんかった
0815デフォルトの名無しさん
2010/10/07(木) 22:32:03この構文を最初に知ったとき「きめぇ」って思った
0816デフォルトの名無しさん
2010/10/07(木) 22:33:23仕様を確認しておかないと…、コードの使い回しや移植を考えると不安だよね。
0クリアされている物と前提しているコードあるらしいし。
意地の悪いlibcでも作って、遊んでみると面白いかも
0817デフォルトの名無しさん
2010/10/07(木) 22:35:35ロジックよりも構造ってイメージがあるわけですが
お前らはどう思いますか
0818デフォルトの名無しさん
2010/10/07(木) 22:43:290819808
2010/10/07(木) 22:47:56double型では困りません?
>>810-811
ありがとうございます。
ちなみに私>>808=>>807はもと質問者の>>803とは別人です。
0820デフォルトの名無しさん
2010/10/07(木) 22:58:52書かれてるコードもいやだし、そんなコードを想定して
とりあえずゼロクリアしてだましだまし動かしてる状況も悲しいものがあるな。
0821デフォルトの名無しさん
2010/10/07(木) 23:10:200822デフォルトの名無しさん
2010/10/07(木) 23:13:48文字通りの意味
0823デフォルトの名無しさん
2010/10/07(木) 23:14:31>double型では困りません?
目的がわからん
Cのcalloc()も単に0クリアするだけだったろ?
そもそもIEEE754準拠なら0クリアで0.0になるし
後からmemset()してもstd::fillかstd::fill_n使ってもいいし
0824デフォルトの名無しさん
2010/10/07(木) 23:17:16整数型だけかとおもてた
0825デフォルトの名無しさん
2010/10/07(木) 23:22:47偉そうなごたくはどうでも良いが、はっきり言って Java で書くのは
C++に比べてかったるい。
主観的かつ実用面だけの意見だが所詮道具だから。
0826デフォルトの名無しさん
2010/10/07(木) 23:23:040の状態で符号ビットを立てると -0.0 という奇妙な数になる
何の役に立つのかわからんけど
そうやっていろんなあり得ない値をポインタ経由で代入してprintf()してみたもんだ
ものすごい長い数字になった事もあるしあれは多分printf()の想定外の数が
入力されたからだろうな
大抵は+NANか-NANになってしまう
0827デフォルトの名無しさん
2010/10/07(木) 23:25:45ありがとう。
そういう遊び心がだいじなのか。
0828デフォルトの名無しさん
2010/10/07(木) 23:28:06thisポインタの型ってどんな型ですか。教えてください。
voidとかintとかの表記で表してください。
0829デフォルトの名無しさん
2010/10/07(木) 23:28:39そのクラスのポインタの型
0830デフォルトの名無しさん
2010/10/07(木) 23:29:40大事かどうかは人の価値観次第だけど、今時のコンピュータは大抵何を
やっても壊れない(HDDのフォーマットとかセクタWriteは別だよ)のでC/C++の
内部がどうなっているのが調べて見ると興味が沸いてくる
それとコンパイルしたソースのアセンブリ出力を読んでみるとかな
0831デフォルトの名無しさん
2010/10/07(木) 23:29:580832デフォルトの名無しさん
2010/10/07(木) 23:31:46template <int index>
void &CHogeDlg::OnBnClickedButton()
{
switch (index)
{
// ボタンごとの処理
}
}
以下のようにイベントハンドラとして登録しているコードを見ました。
ON_BN_CLICKED(IDC_BUTTON1, &CHogeDlg::OnBnClickedButton<1>)
ON_BN_CLICKED(IDC_BUTTON2, &CHogeDlg::OnBnClickedButton<2>)
ON_BN_CLICKED(IDC_BUTTON3, &CHogeDlg::OnBnClickedButton<3>)
この場合、indexの値ごとに別々の関数が作られることになるのだと思いますが、
関数内部での定数による分岐などは消えてなくなるのでしょうか?
0833832
2010/10/07(木) 23:32:430834デフォルトの名無しさん
2010/10/07(木) 23:35:44とりあえずやってみるって大事だよな
http://msdn.microsoft.com/ja-jp/library/cc440193(VS.71).aspx
>しかし筆者の経験では、Visual C++ はフィルタ式としてあらゆる整数値型、ポインタ型、構造体型、配列型、そして void 型さえも受け入れます(ただし、浮動小数点フィルタを試したところ、見事に内部コンパイラ エラーが帰ってきました)。
0835デフォルトの名無しさん
2010/10/07(木) 23:40:38こういう自由度の高さがウケているんだろうなあ
バグの温床でもあるけど
0836デフォルトの名無しさん
2010/10/07(木) 23:43:320837デフォルトの名無しさん
2010/10/07(木) 23:44:330838デフォルトの名無しさん
2010/10/07(木) 23:45:40一見キモイけど合理的だな
0839デフォルトの名無しさん
2010/10/07(木) 23:48:040840デフォルトの名無しさん
2010/10/07(木) 23:48:22最適化の可能性を置いとけば
普通に分岐処理を行うわな
見た目の問題でそうしたんだろう
でも普通はbindにしないかなぁ
0841デフォルトの名無しさん
2010/10/07(木) 23:50:43半端だな
もっとがんばって消せよ
0842デフォルトの名無しさん
2010/10/07(木) 23:53:500843デフォルトの名無しさん
2010/10/07(木) 23:56:060844デフォルトの名無しさん
2010/10/07(木) 23:59:01{
case 1: 〜;
case 2: 〜;
case 3: 〜; break;
case 4: 〜;
}
みたいにbreak有り無しが入り乱れてたら特殊化するより楽かも
0845デフォルトの名無しさん
2010/10/08(金) 00:01:16ON_CONTROL_RANGEがイヤになってテンプレートに置き換えてみたとか
そういうことじゃないのかな。
0846デフォルトの名無しさん
2010/10/08(金) 00:10:23#ifディレクティブがサポートされていなかった。
どうするかというと実行されない文のコードを生成しないので
普通のif文でやるのです。
僕と同じマシンの同じコンパイラが頭に浮かんだでしょうか?
昔のPC板で会いましょう。
0847デフォルトの名無しさん
2010/10/08(金) 00:46:56引数以外の状態に依存するから純粋関数ではないと思うよ
でもさ、ラムダを使う条件ということだが、純粋関数がどうとか気にする必要ないんじゃないの?
多分ムーブするんだろうから
それに何年も前にboostをはじめとする手法でアルゴリズムに
純粋関数以外のものも突っ込んでいるわけで、
メイヤーズの2000年初頭の頃の指標には例外が存在していることは
認識しておいたほうがいいと思うけどね
0848デフォルトの名無しさん
2010/10/08(金) 01:01:250849デフォルトの名無しさん
2010/10/08(金) 03:57:04純粋関数は「ある式の評価結果が常に等しく、副作用がない」関数のことだから、
キャプチャしたのが変数の参照でなければ、あるいは参照であっても、
評価期間を通じて値が変化しないことを保証できるなら、
少なくともその評価期間において、そのラムダ式は純粋関数だと考えてよいのでは?
0850デフォルトの名無しさん
2010/10/08(金) 08:59:27timeBeginPeriod関数で精度を上げたいと思うんですが、
これを呼び出すタイミングって
ゲーム開始時に呼び出しといて、
ゲーム終了時にtimeEndPeriodを呼び出すだけでいいんですか?
それともFPS制御をしてる処理部分だけをこれらの関数で囲めばいいんですか?
0851デフォルトの名無しさん
2010/10/08(金) 09:03:27ていうコードをdefineしてるコードを見たんですが、
これは何をしてるんですか?
0852デフォルトの名無しさん
2010/10/08(金) 09:15:15http://hibari.2ch.net/test/read.cgi/tech/1282403810
0853デフォルトの名無しさん
2010/10/08(金) 09:15:18通常の new と比べて追加で3つの引数を持つ new を使うようにしている。
引数の内容から考えて、メモリリークを検出できるデバッグ版の new と
考えられる。
・・・っていうか crtdbg.h のやつか。
0854デフォルトの名無しさん
2010/10/08(金) 09:36:11すいませんでした。移動します。
0855デフォルトの名無しさん
2010/10/08(金) 09:38:37newをオーバーライドしてるってことですか?
0856デフォルトの名無しさん
2010/10/08(金) 11:33:040857デフォルトの名無しさん
2010/10/08(金) 12:18:49普通じゃね?
よくマニュアルを読んでみろ、コンパイラとプリプロセッサが別のコマンドはよくあること。
0858デフォルトの名無しさん
2010/10/08(金) 12:20:13これを動的確保するときに
new A()ってやつとnew Aっていう括弧がないやつがあるんですが、
何が違うんですか?
0859デフォルトの名無しさん
2010/10/08(金) 12:31:54privateとかにすると、クラスを宣言することすらできないんですが・・・
0860デフォルトの名無しさん
2010/10/08(金) 12:36:450861デフォルトの名無しさん
2010/10/08(金) 12:38:23privateにしてもいい
単に可能ってだけじゃなくて、わざとそうすることもある
どういう時かはぐぐれ
0862デフォルトの名無しさん
2010/10/08(金) 12:43:460863デフォルトの名無しさん
2010/10/08(金) 13:43:15それと同じだ
0864デフォルトの名無しさん
2010/10/08(金) 13:44:440865デフォルトの名無しさん
2010/10/08(金) 14:09:480866デフォルトの名無しさん
2010/10/08(金) 14:14:170867デフォルトの名無しさん
2010/10/08(金) 14:26:37firendつかって別のクラスとかで作れるようにしたりとか
そういう方法で作ったりできる
0868デフォルトの名無しさん
2010/10/08(金) 14:26:530869デフォルトの名無しさん
2010/10/08(金) 15:35:150870デフォルトの名無しさん
2010/10/08(金) 18:39:06cppファイルの方から参照するにはどうすればいいの?
0871デフォルトの名無しさん
2010/10/08(金) 18:49:26その基底クラスを継承してる派生クラスからもアクセスできてしまうってことないよね?
0872デフォルトの名無しさん
2010/10/08(金) 19:25:430873デフォルトの名無しさん
2010/10/08(金) 19:33:420874デフォルトの名無しさん
2010/10/08(金) 19:37:31boostやC++0xのshared_ptrみたいなカスタムデリータを
指定できるスマポでなら使える
0875デフォルトの名無しさん
2010/10/08(金) 19:38:44それどうすれば良いんですか?
コード例クレクレださい
0876デフォルトの名無しさん
2010/10/08(金) 19:53:450877デフォルトの名無しさん
2010/10/08(金) 20:06:38全くお勧めできない。デリータ指定し忘れてもコンパイル通るから
ましてや既に提示された情報からググることも出来ない人には正しく
使うことはぜったいムリムリムリムリかたつむりよ
0878デフォルトの名無しさん
2010/10/08(金) 20:17:560879デフォルトの名無しさん
2010/10/08(金) 20:26:05ttp://codepad.org/nk9tJJuy
0880デフォルトの名無しさん
2010/10/08(金) 21:42:410881デフォルトの名無しさん
2010/10/08(金) 21:58:58空でも無くてもいいよ。
アロケーターで確保したメモリは、確保したのと別のインスタンスのアロケーターでも開放できなければならない。
よって空の実装が多くなるね。
0882デフォルトの名無しさん
2010/10/08(金) 22:06:38別のインスタンスでも開放できないといけないって初めて知りました
どうもサンクスです
0883デフォルトの名無しさん
2010/10/08(金) 22:31:590884デフォルトの名無しさん
2010/10/08(金) 22:37:090885デフォルトの名無しさん
2010/10/08(金) 22:45:010886デフォルトの名無しさん
2010/10/08(金) 22:46:54どこに書いてあるんだよ? こんなこと
0887デフォルトの名無しさん
2010/10/08(金) 22:48:170888デフォルトの名無しさん
2010/10/08(金) 22:49:37protected:
int a,b;
};
class B : public A{
};
っていう二つのクラスがあったとして、
クラスBのインスタンスを二つ作った場合、aとbは共有されますか?
0889デフォルトの名無しさん
2010/10/08(金) 22:52:320890デフォルトの名無しさん
2010/10/08(金) 22:53:520891デフォルトの名無しさん
2010/10/08(金) 22:54:52new A() ; は初期化子として()を記述している。よって値初期化される。
new A ; は初期化子を省略している。よってデフォルト初期化される。
0892デフォルトの名無しさん
2010/10/08(金) 22:57:00おい嘘書くな
0893デフォルトの名無しさん
2010/10/08(金) 22:58:08共有?
staticメンバ変数ならば共有されるけど、非staticなら別々でしょ
0894デフォルトの名無しさん
2010/10/08(金) 22:58:55どっちが本当なんですか?
0895デフォルトの名無しさん
2010/10/08(金) 23:00:030896デフォルトの名無しさん
2010/10/08(金) 23:03:090897デフォルトの名無しさん
2010/10/08(金) 23:04:15class A {
int i;
public:
A() {}
A(int j) : i(j) {}
void print() const {
std::cout << i << std::endl;
}
};
int main()
{
A* ap = new A(10);
ap->print();
delete ap;
A* ap1 = new A;
A* ap2 = new A();
ap1->print();
ap2->print();
delete ap2;
delete ap1;
}
0898デフォルトの名無しさん
2010/10/08(金) 23:04:470899デフォルトの名無しさん
2010/10/08(金) 23:05:56ありがとうございました!
0900デフォルトの名無しさん
2010/10/08(金) 23:06:53馬鹿かお前
0901デフォルトの名無しさん
2010/10/08(金) 23:08:37おいおい>>897は間違ってるぞ
非PODの場合はnew Aもnew A()も同じ
PODの場合はゼロで初期化される
これ前にも同じ質問が出て、確か規格票が書かれたと思うが
class A {
int i;
public:
A() {}
A(int j) : i(j) {}
void print() const {
std::cout << i << std::endl;
}
};
int main()
{
A* ap = new A(10);
ap->print();
delete ap;
A* ap1 = new A;
ap1->print();
delete ap1;
A* ap2 = new A();
ap2->print();
delete ap2;
}
0902デフォルトの名無しさん
2010/10/08(金) 23:11:510903デフォルトの名無しさん
2010/10/08(金) 23:12:29ありがとうございます。
PODってのはよく分からないですが、VCでやったらゼロ初期化されませんでした。
PODなら()をつけたらゼロ初期化されると覚えておきます。
0904デフォルトの名無しさん
2010/10/08(金) 23:13:16Allocator requirementsを読んで出直してこい。
>>897
結果だけでモノを言うんじゃない。
>>902
定義は変わっても意味は同じ。
単に細分化されただけ。
0905デフォルトの名無しさん
2010/10/08(金) 23:15:57だから規格票読めって
PODは()を付けた時のみゼロ初期化
それ以外は何もしない(領域のみ確保)と覚えておけばよい
もちろん非PODでデフォルトコンストラクタが定義されていた場合はそれが実行される
0906デフォルトの名無しさん
2010/10/08(金) 23:17:580907デフォルトの名無しさん
2010/10/08(金) 23:18:020908デフォルトの名無しさん
2010/10/08(金) 23:25:27staticストレージの有効期間を持つ(あまり馴染みのない言い方だが)オブジェクトは、
あらゆる初期化の前に、必ずゼロ初期化されると保証されている。
0909デフォルトの名無しさん
2010/10/08(金) 23:25:500910デフォルトの名無しさん
2010/10/08(金) 23:34:20初期化するときってグローバル領域でする必要があるじゃないですか。
そこで初期化しなかった場合実体が作られないんですよね?
その後実体を作るには普通にクラス内で値を入れれば実体化されるんですか?
0911デフォルトの名無しさん
2010/10/08(金) 23:35:59ほらよ
class A {
int i;
public:
A() {}
A(int j) : i(j) {}
void print() const {
std::cout << i << std::endl;
}
};
struct B {
int i;
};
↓続く
0912デフォルトの名無しさん
2010/10/08(金) 23:36:48{
A* ap = new A(10);
ap->print();
delete ap;
A* ap1 = new A;
ap1->print();
delete ap1;
A* ap2 = new A();
ap2->print();
delete ap2;
B* bp = new B;
bp->i = 11;
delete bp;
B* bp1 = new B;
std::cout << bp1->i << std::endl;
delete bp1;
B* bp2 = new B();
std::cout << bp1->i << std::endl;
delete bp2;
}
0913デフォルトの名無しさん
2010/10/08(金) 23:38:14なんだよ「グローバル領域」とか「実体化」って。
staticストレージ上に構築されるオブジェクトは、プログラムの開始からすでに存在している。
0914デフォルトの名無しさん
2010/10/08(金) 23:41:180915デフォルトの名無しさん
2010/10/08(金) 23:41:59これマジかよって思ってideoneでコードを書いて確認してみたら、
ゴミが入らなくてどっちも0で確認できなかった。
0916デフォルトの名無しさん
2010/10/08(金) 23:57:250917デフォルトの名無しさん
2010/10/09(土) 00:13:59そりゃdeleteしてすぐnewしても同じ領域が割り付けられるとは限らないからな
ガチガチの処理系依存だよ
0918デフォルトの名無しさん
2010/10/09(土) 00:18:27?
0919デフォルトの名無しさん
2010/10/09(土) 00:19:370920デフォルトの名無しさん
2010/10/09(土) 00:26:23だからそういう偶然に頼るなって
0921デフォルトの名無しさん
2010/10/09(土) 00:32:33これって4Kbyte固定でいいんですか?
0922デフォルトの名無しさん
2010/10/09(土) 00:32:45§5.3.4
15 A new-expression that creates an object of type T initializes that object as follows:
? If the new-initializer is omitted:
? If T is a (possibly cv-qualified) non-POD class type (or array thereof), the object is defaultinitialized
(8.5). If T is a const-qualified type, the underlying class type shall have a user-declared
default constructor.
? Otherwise, the object created has indeterminate value. If T is a const-qualified type, or a (possibly
cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of
const-qualified type, the program is ill-formed;
? If the new-initializer is of the form (), the item is value-initialized (8.5);
? If the new-initializer is of the form (expression-list) and T is a class type, the appropriate constructor is
called, using expression-list as the arguments (8.5);
? If the new-initializer is of the form (expression-list) and T is an arithmetic, enumeration, pointer, or
pointer-to-member type and expression-list comprises exactly one expression, then the object is initialized
to the (possibly converted) value of the expression (8.5);
? Otherwise the new-expression is ill-formed.
0923デフォルトの名無しさん
2010/10/09(土) 00:38:01どこが偶然に頼ってるの?
0924デフォルトの名無しさん
2010/10/09(土) 00:41:160925デフォルトの名無しさん
2010/10/09(土) 01:47:27そんな要求なかったような…?
0926デフォルトの名無しさん
2010/10/09(土) 01:59:51ttp://www.informatik.uni-freiburg.de/~danlee/fun/STL-doc/STL/Allocator-requirements.html
あるみたいだけど何言ってるのか分からん
0927デフォルトの名無しさん
2010/10/09(土) 02:23:03*演算子で値を得る行為をなんと呼べばいいでしょうか。
「デリファレンス」だと思っていたんですが、実際口にしてみたら通じなかったもので……
どういう言い方が一般的なんでしょうか。
int x = 100;
int *px = &x;
int y = *px; // ← ココ
0928デフォルトの名無しさん
2010/10/09(土) 02:26:20「デリファレンス」は所詮、鮨をSushiと記述するのと同じぐらいの正しさでしか無い。
0929デフォルトの名無しさん
2010/10/09(土) 02:30:49一般的には「ポインタの値をとる」とかいっちゃうかな?
ポインタの値とかいうと、アドレス値をさしちゃいそうな気もするけれど、
Cでプログラム書く場合、アドレスがいくつであるかってのは基本的に気にしないから、
それで通じちゃう。
ま、デリファレンスで通じないのも辛いところだがw
0930デフォルトの名無しさん
2010/10/09(土) 02:32:14"reference" でいいのかな。
0931デフォルトの名無しさん
2010/10/09(土) 02:38:410932デフォルトの名無しさん
2010/10/09(土) 02:46:37どの行為だよ?
int * pxは int *型の変数pxの宣言と定義。
= &xはその初期化子。
&xはxに&演算子を適用した式。
オブジェクトへのアドレスを得るという事ならば、
規格では、「アドレスを取る」(実際には、大抵受身で使われている)という言い方もされているがな。
0933デフォルトの名無しさん
2010/10/09(土) 09:23:37sort.cpp:21: error: no matching function for call to ‘sort(int [4], int*, main(int, char**)::Functor)’
とエラーになります。その場で関数オブジェクトを定義したい時はどうすればいいでしょうか?
#include <algorithm>
int main(int argc, char* argv[])
{
int items[] = { 4, 3, 1, 2 };
int num_items = sizeof(items) / sizeof(items[0]);
struct Functor {
bool operator ()(int lhs, int rhs) {
return lhs > rhs;
}
};
std::sort(items, items + num_items, Functor());
return 0;
}
0934デフォルトの名無しさん
2010/10/09(土) 09:35:15C++0xを使う。
C++0xならば、関数内クラスをtemplate argumentに渡すことが許されている。
C++03では、関数内クラスはtemplate argumentに渡すことができない。
0935デフォルトの名無しさん
2010/10/09(土) 10:06:27using namespace std;
class B;
class A{
private:
friend class B;
int nice;
public:
void disp(){
cout<<"test"<<endl;
}
};
class B{
protected:
static A a;
public:
void Init(){
a.disp();
}
};
class C : public B{
};
A B::a;
int main(void)
{
C c;
c.a.disp();
return 0;
}
0936935
2010/10/09(土) 10:07:25このソースでクラスBを継承したCから、その静的メンバであるaのdisp関数に
アクセスできません。
Bを継承したCからなら、protected領域にあるaにアクセスしてその
disp関数にもアクセスできると思ったのですが、できないのでしょうか?
0937デフォルトの名無しさん
2010/10/09(土) 10:07:31static関数なら通るけどこれじゃ状態が持てないよね
0938デフォルトの名無しさん
2010/10/09(土) 10:08:51ありがとうございます。
そうですか…ちょっと検討してみます。
0939デフォルトの名無しさん
2010/10/09(土) 10:22:00お前は何を言っているんだ。
当たり前じゃないか。
そのコードでは、A::dispにアクセスしているのはmain関数だ。
class Cじゃない。
そのコードを通したかったら、class Aに
friend int main(void) ;
という宣言が必要だ。
0940935
2010/10/09(土) 10:48:54そういえば、そうですね。
friendの定義を勘違いしていました。
友達にした関数から呼べるって意味でしたね。ありがとうございます
0941935
2010/10/09(土) 10:51:56class A{
private:
friend class B;
int nice;
public:
void disp(){
cout<<"test"<<endl;
}
};
class B{
protected:
static A a;
public:
void Init(){
a.disp();
}
};
class C : public B{
public:
void test(){
a.disp();
}
};
A B::a;
int main(void)
{
C c;
c.test();
return 0;
}
0942935
2010/10/09(土) 10:55:32何故でしょうか?
友達にしてるのはクラスBなのですが、クラスCの関数内からクラスAのdispが
呼べてしまってます。
0943935
2010/10/09(土) 10:59:54勘違いしてました。
0944デフォルトの名無しさん
2010/10/09(土) 11:01:25それでよさげだけど
dereferenceは「参照剥し」とか言われてた時代がなかったっけか?
0945デフォルトの名無しさん
2010/10/09(土) 12:43:230946デフォルトの名無しさん
2010/10/09(土) 13:02:380947デフォルトの名無しさん
2010/10/09(土) 13:04:53C++ Labyrinth
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-dereference.html
ここでも取り上げられていたな。
0948デフォルトの名無しさん
2010/10/09(土) 13:08:18参照剥がしってしっくり来るし必殺技ぽくってかっこよくね?
0949デフォルトの名無しさん
2010/10/09(土) 13:36:20あとなんか、「剥がす」っていう言葉を聞くと羅生門の情景が目に浮かぶ。
0950デフォルトの名無しさん
2010/10/09(土) 13:39:01実体化とかがいいと思う
0951デフォルトの名無しさん
2010/10/09(土) 13:42:220952デフォルトの名無しさん
2010/10/09(土) 13:42:38って
ちんこぷらぷらの略ですか?
0953デフォルトの名無しさん
2010/10/09(土) 13:44:53そのとおりです
0954デフォルトの名無しさん
2010/10/09(土) 13:54:48Application* Application::self()
{
return (Application*)KApp;
}
スーパークラス
static KApplication *KApp;
self()は安全ですか?
0955デフォルトの名無しさん
2010/10/09(土) 13:58:560956デフォルトの名無しさん
2010/10/09(土) 14:01:470958デフォルトの名無しさん
2010/10/09(土) 14:29:230959デフォルトの名無しさん
2010/10/09(土) 14:46:52class Applcation : public KApplication の定義がどこかにあるんだろう。
0961デフォルトの名無しさん
2010/10/09(土) 18:41:22普通に考えるというか、好意的に解釈してやれば、というところか。
KApplicationはサブクラスだろ。
0962デフォルトの名無しさん
2010/10/09(土) 18:44:37そうだよ
0963デフォルトの名無しさん
2010/10/09(土) 18:56:17じゃあ逆じゃねえか
0964デフォルトの名無しさん
2010/10/09(土) 19:56:530965デフォルトの名無しさん
2010/10/09(土) 19:58:16#include<stdio.h>
int main(void) {
double height,weight,BMI;
printf("身長[ m]:"); scanf("&lf",&height);
printf("体重[kg]:"); scanf("&lf",&weight);
BMI=weight/height/height;
printf("BMIは%fです。\n",BMI);
if(BMI>=25){
printf("肥満です!\n");
}else if(BMI<18.5){
printf("低体重です!\n");
}else{
printf("標準。\n");
}
return 0;
}
BMIを計算するコードですが、コンパイルした後実行しようとすると
unknown software exceptionというエラーが出て進めません。
どこを書き直せばいいですか?
0966デフォルトの名無しさん
2010/10/09(土) 20:00:100967デフォルトの名無しさん
2010/10/09(土) 20:00:540968デフォルトの名無しさん
2010/10/09(土) 20:03:50ちゃんと見てませんでした。
ありがとうございます
0969デフォルトの名無しさん
2010/10/09(土) 20:30:19http://hibari.2ch.net/test/read.cgi/tech/1286623355/1-100
0970デフォルトの名無しさん
2010/10/09(土) 21:07:380971デフォルトの名無しさん
2010/10/09(土) 22:10:04C++とC言語って別の言語だから、Cオンリーのコードなら
C言語スレに行った方がいいよ。
理由:
1. せっかく専用スレがあるから。
2. C言語はほぼC++に取り込まれているが、だからといってC++スレで
聞いたからにはC++にしか通用しない文法や標準ライブラリやクラスで
で返されても仕方ないことだから。
0972デフォルトの名無しさん
2010/10/09(土) 23:08:42アップキャストダウンキャストみたいな
0973デフォルトの名無しさん
2010/10/09(土) 23:16:57存在しないメンバ関数呼び出したらエラーダイアログが出て来たorz
0974デフォルトの名無しさん
2010/10/09(土) 23:27:430975デフォルトの名無しさん
2010/10/09(土) 23:48:11<ClassName>は絶対に必要なんですか?
0976デフォルトの名無しさん
2010/10/09(土) 23:59:25たとえば
template <class T>
T sqr(T x){ return x*x; }
int n(30);
cout<<sqr(n)<<endl;
みたいなので OK
試せばすぐわかる
0977デフォルトの名無しさん
2010/10/10(日) 00:07:440978デフォルトの名無しさん
2010/10/10(日) 00:14:16必要ない。C++は賢いから推論で自動的に最適なClassNameにしてくれる
一々指定するって馬鹿らしい
0980デフォルトの名無しさん
2010/10/10(日) 11:46:22パッケージ管理システムを調べると、boost関連のパッケージが全くインストールされていません
0981デフォルトの名無しさん
2010/10/10(日) 13:01:02OSSで広く使われているか、と言われると、どうだろう?
そもそもOSSだとC++で書かれているものが少ないので、その中でboostを使っている、
となれば、さらに少なくなるな。
ちなみにFedora13で依存関係を調べてみたところ、boostに依存しているものは一つも
なかったw
でも、boostはテンプレートライブラリで、外部ライブラリを必要としないものも多いので、
実態はソース全部調べてみないとわからんけどw
0982デフォルトの名無しさん
2010/10/10(日) 13:08:23主な理由は「俺が分からん」「依存するライブラリが増えるのが嫌」「テンプレート重い」など
0983デフォルトの名無しさん
2010/10/10(日) 13:10:08可搬性のあるMakefileが書けないとかいう話は聞いた
0984デフォルトの名無しさん
2010/10/10(日) 13:13:31boostの中身のヘッダー名では書かなくてもいいだろう。3カ月おきにfullメイクすればすむことだし
0985デフォルトの名無しさん
2010/10/10(日) 13:15:220986デフォルトの名無しさん
2010/10/10(日) 13:16:11もしかしてVCだけ?
0987デフォルトの名無しさん
2010/10/10(日) 13:17:410988デフォルトの名無しさん
2010/10/10(日) 13:25:46可搬性考えなくてもあんな長ったらしいらいぶらり名書くの大変じゃん。デバッグ版とかリリース版とか
0989デフォルトの名無しさん
2010/10/10(日) 13:55:26が俺の近くに寄ってきませんように(祈
0990デフォルトの名無しさん
2010/10/10(日) 13:57:280991デフォルトの名無しさん
2010/10/10(日) 14:06:130992デフォルトの名無しさん
2010/10/10(日) 14:19:35スマポ良いよスマポ
0993デフォルトの名無しさん
2010/10/10(日) 14:22:13あとはtupleとか。
それから、lambda便利だぞ
0994デフォルトの名無しさん
2010/10/10(日) 15:00:26lambdaは現実に仕事で使っているやつがいたら
うらやましいけどおいおいってなる。
0995デフォルトの名無しさん
2010/10/10(日) 15:02:38個人使用でないもので実際に使うとなると知識不足が気になっちゃうんだよね
なんというかただ使うだけだと速度とのトレードオフが見えないというか
かといってコード見て使ってると得した気分にならんし
0996デフォルトの名無しさん
2010/10/10(日) 15:04:17むしろ高階関数があるのにラムダがなかったのが異常だったんだ!
今はまだ俺しか使ってないけどさ。
0997デフォルトの名無しさん
2010/10/10(日) 15:34:120xが策定されたら淘汰される急先鋒では
0998デフォルトの名無しさん
2010/10/10(日) 15:35:410x実用化してくれたら良いんだが、だいぶ先だろうなあ
0999デフォルトの名無しさん
2010/10/10(日) 15:41:241000デフォルトの名無しさん
2010/10/10(日) 15:42:1610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。