C++相談室 part106
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2013/10/29(火) 09:04:35.38ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part105
http://toro.2ch.net/test/read.cgi/tech/1380443725/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.87【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1382185936/
次期規格C++1yはこちら
C++14/C++1y
http://toro.2ch.net/test/read.cgi/tech/1382889622/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0002ここまでテンプレ
2013/10/29(火) 15:05:38.74hogeは禁止します、使用しないでください。
万が一hogeが書き込まれても、スルーしてください。
相手にするとあなたも荒らしと同じ扱いになります。
なお、hogeはNGワードに追加しておくことが強く推奨されています。
0003デフォルトの名無しさん
2013/10/29(火) 15:13:04.44gccで次のコードをコンパイルすると初期化子が足りないと警告が出るのだけれど、規格としてはどうなんだっけ?
--
#include <iostream>
using namespace std;
int main() {
struct foo {
int foo;
std::string bar;
} fooz = {0};
std::cout << fooz.bar.size();
return 0;
}
--
0004デフォルトの名無しさん
2013/10/29(火) 15:36:22.35gccの警告レベルはオプションで細かく指定できる
0005デフォルトの名無しさん
2013/10/29(火) 16:14:37.74If there are fewer initializer-clauses in the list than there are members in the aggregate, then each member not explicitly initialized shall be initialized from an empty initializer list (8.5.4). [Example:
struct S { int a; const char* b; int c; }; S ss = { 1, "asdf" };
initializes ss.a with 1, ss.b with "asdf", and ss.c with the value of an expression of the form int(), that is, 0. ?end example ]
0006デフォルトの名無しさん
2013/10/29(火) 16:19:26.30http://pic.dhe.ibm.com/infocenter/comphelp/v121v141/index.jsp?topic=/com.ibm.xlcpp121.aix.doc/language_ref/strin.html&lang=ja
0007デフォルトの名無しさん
2013/10/29(火) 18:32:09.65規格的には問題ないけど、そういう場合は括弧の中空で初期化すべきじゃない?
00083
2013/10/29(火) 18:51:06.35THX!
某社のコードを管理しているクライアントのコードがこんな感じだったの。
長らくC++に移行するのを嫌がっていたけど、
某社から要請されてやっとC++に移行したと思ったらこれだよw
警告の回避手段を検討してくれって言われたけど、さてどうしたもんか。
0009デフォルトの名無しさん
2013/10/29(火) 19:27:58.520010デフォルトの名無しさん
2013/10/29(火) 19:30:43.56環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0011デフォルトの名無しさん
2013/10/29(火) 20:04:22.82うるせーバカと引数で警告を切る
-Wno-missing-field-initializers
うっせーアホとソースコードで警告を切る
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#pragma GCC diagnostic pop
あきらめる
= {0, std::string()};
0012デフォルトの名無しさん
2013/10/29(火) 22:58:39.950013デフォルトの名無しさん
2013/10/29(火) 23:07:18.32俺もだ
0014デフォルトの名無しさん
2013/10/30(水) 00:06:54.970015デフォルトの名無しさん
2013/10/30(水) 00:30:55.050016デフォルトの名無しさん
2013/10/30(水) 01:07:19.62あれどうなるんだ
未だに先行き不透明
0017デフォルトの名無しさん
2013/10/30(水) 01:17:55.240018デフォルトの名無しさん
2013/10/30(水) 01:23:33.81かわいそうに
0019デフォルトの名無しさん
2013/10/30(水) 01:28:28.080020デフォルトの名無しさん
2013/10/30(水) 02:30:23.52>>11
デフォルトはその警告オフだよね?
-Wallでもしてるんかしら。
コンパイラの規格が2003年版以降なら
}fooz=foo();でもokだと思うけど…古いコンパイラに持って行ったとき死ぬのでオススメはしない。
0021デフォルトの名無しさん
2013/10/30(水) 02:51:55.68つまりマイナス=初心の頃のほうがマシ、とかヘンテコになるときもあるのか?!
0022デフォルトの名無しさん
2013/10/30(水) 03:06:54.82-Wallどころか"that are not enabled by -Wall."である
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
0023デフォルトの名無しさん
2013/10/30(水) 07:07:26.46テンプレートとかに凝りだすとそう言う状態になる。
まあ、C でもマクロとかあるから似たようなもんだが
0024デフォルトの名無しさん
2013/10/30(水) 13:09:16.83『ぼくのかんがえたすごいてくにっく』でやろうとしたけどうまくできません、と言って
なんでそういうやり方をしてるの?とかそもそも何がやりたいの?と突っ込まれてる質問をよく見るだろ
0025デフォルトの名無しさん
2013/10/30(水) 16:19:51.02長考してるときは手が止まっていて
外から見て C++ を使っていない状態になったりはする
雑記帳のメモは俺語だし
0026デフォルトの名無しさん
2013/10/31(木) 01:08:41.39昔どこかのサイトでこれだけはつけておけ!みたいな記事があったがどこにあったか忘れた
付けると最適化がさらによくなったり、厳密なデバッグをするようになって警告が出まくる感じだった
0027デフォルトの名無しさん
2013/10/31(木) 01:18:37.56-最速 -最小
0028デフォルトの名無しさん
2013/10/31(木) 01:26:11.71お前がEffective C++信者なら、
-Weffc++ -Werror を付けておけ
0029デフォルトの名無しさん
2013/10/31(木) 01:38:09.66信者の素質あるかな
0030デフォルトの名無しさん
2013/10/31(木) 01:41:05.72過去の自分が書いたソースを全部警告が出ないようにできるか?
0031デフォルトの名無しさん
2013/10/31(木) 01:42:03.88ムリダナ
0032デフォルトの名無しさん
2013/10/31(木) 01:44:00.040033デフォルトの名無しさん
2013/10/31(木) 01:57:04.46中身空っぽでもいいから、とにかくコンストラクタには全てのメンバー変数に対して初期化子を書けと言うところ
0034デフォルトの名無しさん
2013/10/31(木) 01:58:18.72継承する場合は常にvirtualデストラクタを書けと言うところ
0035デフォルトの名無しさん
2013/10/31(木) 02:00:17.11いやそれは今でもやってんよ俺
デバッグとリリースで挙動の違うバグ起こしかねないから
あと継承するときはvirtualデストラクタにするっしょ
0036デフォルトの名無しさん
2013/10/31(木) 02:01:41.76それはどこが痛々しいの?
ポリモーフィックなクラスは仮想デストラクタにするのが当たり前だと思ってたが
そうしない方がいい場合というのがあるの?
0037デフォルトの名無しさん
2013/10/31(木) 02:06:02.600038デフォルトの名無しさん
2013/10/31(木) 02:08:58.54ツリー構造になってるtraits系クラスに全部デストラクタを書いてるのか
0039デフォルトの名無しさん
2013/10/31(木) 02:12:29.46お前本当にWeffc++使ってんの?
class c {
int i;
c() {}
...
これは許されない。
class c {
int i;
c() :i() {}
...
これは許される。
デバッグとリリースで挙動が違うバグとやらの理論で、この意味不明な押し付けを正当化できるのか?
0040デフォルトの名無しさん
2013/10/31(木) 02:13:26.58それ以外は書かない
0041デフォルトの名無しさん
2013/10/31(木) 02:13:59.64> ポリモーフィックなクラスは仮想デストラクタにするのが当たり前だと思ってたが
勝手にポリモーフィックの話に変えないようにwww
結局effc++信者は馬鹿ばっかり。
0042デフォルトの名無しさん
2013/10/31(木) 02:18:16.05-Weffc++ -Werror
をつけてコンパイルが通るライブラリーは一つもない。
警告を出しているg++でさえ、自分のコンパイルすらできない。
0043デフォルトの名無しさん
2013/10/31(木) 02:21:35.51継承するとき全部仮想デストラクタにするのは
やっぱEffective C++の影響で?
0044デフォルトの名無しさん
2013/10/31(木) 02:22:18.45いやWeffc++は使ってないけどそれはイミフじゃないだろ
上のiはデバッグのときはパターン初期化されてリリースのときはゴミが入る場合が多い
(つまりデバッグとリリースで初期状態が変わる)けど
下はゼロ初期化になるじゃん
0045デフォルトの名無しさん
2013/10/31(木) 02:23:51.60そういや書かないね。
typedef連ねてるだけで実装持ってないことが多いから気にしたこともなかった。
それと、インターフェイスなクラス書く時、何気なく仮想デストラクタ書いてるけど
これってなんで必要なんだっけ?
前に何かの本かblogで書くべきって書いてあるの見たのは確かなんだけど
なんで?の部分が思い出せない。
0046デフォルトの名無しさん
2013/10/31(木) 02:26:41.930047デフォルトの名無しさん
2013/10/31(木) 02:27:35.45画素を表現するためにメンバーにr,g,bを持つクラスを配列化させて画像を表現する場合も、
たとえ速度が犠牲になろうとも
画素のコンストラクタには全て初期化子を書くタイプ?
0048デフォルトの名無しさん
2013/10/31(木) 02:31:58.40> そういや書かないね。
> typedef連ねてるだけで実装持ってないことが多いから気にしたこともなかった。
effc++的には許して貰えないな
多くのライブラリが警告だらけになる理由の一番がこれだ
0049デフォルトの名無しさん
2013/10/31(木) 02:32:59.23POD型の構造体を書く
structももちclassの一種なのは承知
これがEffcで許されるかはよくしらん
0050デフォルトの名無しさん
2013/10/31(木) 02:40:14.92effc++はそんなものでも初期化子書けと怒るという話なのだが。
とりあえず使えよ。
0051デフォルトの名無しさん
2013/10/31(木) 02:46:14.48ゲッタセッタ病
クラス肥大病
クラス数減少病
クラス依存循環病
どこかのスレで、これら全部影響しあってるって話があったよ。
だからどれも治すの難しいんだとか。
0052デフォルトの名無しさん
2013/10/31(木) 02:55:30.80出ない。少なくとも下のコードでは出ない
Imageに int i; メンバ変数追加したらもちろん出る
$ g++ -Weffc++ -Wall -c test.cpp
struct Pixel
{
char a, r, g, b;
};
class Image
{
public:
Image() {}
private:
Pixel icon_[16 * 16];
};
int main(int argc, char *argv[])
{
Image image;
return 0;
}
0053デフォルトの名無しさん
2013/10/31(木) 02:58:23.840054デフォルトの名無しさん
2013/10/31(木) 03:05:11.98インターフェイスのクラスポインタに具象クラスをnewしてdeleteしてみればわかる
0055デフォルトの名無しさん
2013/10/31(木) 03:08:43.76Pixelの例は極端な話だから理解しにくいかもしれないが、Pixelで追求するのなら
struct Pixel
{
char a, r, g, b;
Pixel(char A,char R,char G,char B) : a(A),r(R),g(G),b(B) {}
};
このあたりを起点に試すとか
0056デフォルトの名無しさん
2013/10/31(木) 03:17:07.38いや、それじゃコンパイル通らないし。
POD型の構造体作るような単純なデータ構造に
普通ユーザ定義のコンストラクタは書かないし
逆に複雑なデータ構造ならclassにして初期化子も全部かくだろ
0057デフォルトの名無しさん
2013/10/31(木) 03:24:21.35何億件もオブジェクトを並べる必要があってPODに近い扱いをしたい
ってときに、その主義だと速度への犠牲の強い方が大きそうだ
0058デフォルトの名無しさん
2013/10/31(木) 03:25:12.04> いや、それじゃコンパイル通らないし。
どうして?
0059デフォルトの名無しさん
2013/10/31(木) 03:29:49.09なにかコンストラクタを追加した時点で
structの暗黙のデフォルトコンストラクタが無効になるから
どうして?ってのがどうしてだよ。
0060デフォルトの名無しさん
2013/10/31(木) 03:33:00.05「まずそこを起点にして」、考え直せば、デフォルトコンストラクタを足すという
というのが、変化の第一歩かなと思ったけど、
そもそもの思考が全然違うわけか。
ちなみにEffective C++信者の方?
0061デフォルトの名無しさん
2013/10/31(木) 03:33:52.62そういう案件のプロジェクトなら何十人も関わってるはずなので
-Weffc++なんてリベラルなことは死んでもやれない
0062デフォルトの名無しさん
2013/10/31(木) 03:39:53.47叩き台のスタート地点を決定稿扱いして批判開始するのは極端な思考だと思うし
PODかさもなくば初期化子フル装備のクラスかの二択でしか考えないのも極端な思考だと思うし
とりあえず初期化子必要性に関しては一番端っこの原理主義者みたいなものでしょ?
そうでない人との議論はする意味あるのかな
0063デフォルトの名無しさん
2013/10/31(木) 03:45:21.40別に批判してるわけではなくて
言われなくてもわかるっしょ?行間読めよって言われても
正直>>55でなにを試せって言われてるのか俺にはわからん
0064デフォルトの名無しさん
2013/10/31(木) 03:46:36.47継承するときはかならず仮想デストラクタ付けるとか
そういうオマジナイさえしっかりしておけば
あとは気を抜いても安全が担保される
速度の犠牲は許される代償である
effc++信者の思考パターンね
だから信者を端的に現すと
「オ・マ・ジ・ナ・イ」で「ア・ン・シ・ン」
0065デフォルトの名無しさん
2013/10/31(木) 03:48:58.750066デフォルトの名無しさん
2013/10/31(木) 03:49:42.26オマジナイだけで安心できるなら、それでいいんじゃない?
それは悪いこと?
0067デフォルトの名無しさん
2013/10/31(木) 03:53:29.27オマジナイ安心病
実装依存インタフェイス病
0068デフォルトの名無しさん
2013/10/31(木) 03:55:16.61IDでねーからなこの板・・・
0069デフォルトの名無しさん
2013/10/31(木) 04:00:07.43あれはよくできた宗教本だよ
0070デフォルトの名無しさん
2013/10/31(木) 04:08:39.45大概のクラスはいくつかに分類できるんだから、先に分類例をあげて、その場合の典型的な実装例を示して
最後にそう書く理由を説明される方が分かりやすいし覚えやすい。
0071デフォルトの名無しさん
2013/10/31(木) 04:18:10.83安心欲しさにオマジナイにすがるのは
放射能怖さに沖縄に引っ越した人みたいで嫌だ
0072デフォルトの名無しさん
2013/10/31(木) 04:25:38.000073デフォルトの名無しさん
2013/10/31(木) 04:25:52.71オマジナイのおかげで気を抜いても安心とか最低だろ。
0074デフォルトの名無しさん
2013/10/31(木) 06:08:10.350075デフォルトの名無しさん
2013/10/31(木) 06:11:46.790076デフォルトの名無しさん
2013/10/31(木) 06:26:14.55こいつの基礎知識のなさに絶望したわ
Effc++批判する以前の問題だろ
0077デフォルトの名無しさん
2013/10/31(木) 08:50:59.73どうでもいいところを安全側に倒すっていう判断は普通にアリでしょ。
多くの場合に意味のない効率と、多くの場合に意味のない安全性とのトレードオフね。
0078デフォルトの名無しさん
2013/10/31(木) 09:27:57.100079デフォルトの名無しさん
2013/10/31(木) 09:44:56.44さすがに二十年前の本だしな
この二十年間Effectiveを読まないように気を付けてきました
なんてやつがいるならお目にかかりたい
0080デフォルトの名無しさん
2013/10/31(木) 10:05:45.000081デフォルトの名無しさん
2013/10/31(木) 10:11:24.73ボロボロでもいいから中古で千円なら読む
0082デフォルトの名無しさん
2013/10/31(木) 10:14:44.37コーディングで個性発揮してんじゃねーよ
0083デフォルトの名無しさん
2013/10/31(木) 10:31:32.67俺みたいなアウトローはeffectiveC++を読んでeffectiveC++で禁止されていることを
やるのがカッコイイんだけど。
0084デフォルトの名無しさん
2013/10/31(木) 10:40:52.500085デフォルトの名無しさん
2013/10/31(木) 11:11:20.585〜6年前はブックオフで300円とかで見かけることもあったけど、
今はどうなんだろうな
0086デフォルトの名無しさん
2013/10/31(木) 11:43:18.78300円とか半端な値段にはならないはず。
0087デフォルトの名無しさん
2013/10/31(木) 11:44:23.14まじで?そんなに?
じゃあ俺、読む
0088デフォルトの名無しさん
2013/10/31(木) 12:48:25.65というかこの流れでも日本語1,2版を前提にして語っているのが混じってそうだな
0089デフォルトの名無しさん
2013/10/31(木) 12:52:29.73俺から言わせて貰えば日本語版で読める代物はほとんど無い。
英語でしか表せないウィットにとんだジョークなども日本語に翻訳したとたん
陳腐で下劣なものにしかならないからな。
0090デフォルトの名無しさん
2013/10/31(木) 12:52:58.980091デフォルトの名無しさん
2013/10/31(木) 13:00:06.14技術英語なら一応は読めるっていっても
流し読みたいところを高速に流し読めるのは日本語以外考えられない
0092デフォルトの名無しさん
2013/10/31(木) 13:02:42.63急がば回れということで英語を勉強するのも手か
0093デフォルトの名無しさん
2013/10/31(木) 13:09:16.44センスの無い奴がいくら英語を勉強しようとも絶対分かるようにはならない。
フィーリングっていうのを感じられるようになるには英語の理論だけは絶対理解できない領域だからな。
0094デフォルトの名無しさん
2013/10/31(木) 13:10:29.90ネタみたいな書き方してるが、
実際、effectiveをいかに素早く通過するかは大事なことで、
effectiveに従順に従う期間が長くなると癖のように染み付くのが良くない。
0095デフォルトの名無しさん
2013/10/31(木) 13:10:35.010096デフォルトの名無しさん
2013/10/31(木) 13:10:46.34…いやほんとそう思うよ。できないのは触れる時間が短すぎる
0097デフォルトの名無しさん
2013/10/31(木) 13:14:40.73いらないところを読み飛ばしたり構成をつかんだりする能力だろう
けっきょく経験するしかないのじゃ
0098デフォルトの名無しさん
2013/10/31(木) 13:16:32.22それは本当
以前は勉強しても全然英語が伸びなくて受験生時代センター英語3割だったけど
それから二年中英語のゲームやってたら浪人して英語だけ9割取れるようになった
0099デフォルトの名無しさん
2013/10/31(木) 13:17:23.46文法だけいくらおぼえても、からっきし何も作れない
要は言語で表現しようとしているものを理解する必要があるってだけ
外人に何を伝えたいのか、何を言ってきているのか
時に基本的な発想が違っていることがあったりするのは文法ではわからない
0100デフォルトの名無しさん
2013/10/31(木) 19:39:53.12お前一人のサンプル出されて本当って言われてもね
お前の脳に異常があるとかそういうオチだろどうせ
自分一人のサンプルで本当とか言い出す辺りそっちのほうが可能性としては高い
0101デフォルトの名無しさん
2013/10/31(木) 19:44:55.82なんでだろうね〜。
困るわ〜。
0102デフォルトの名無しさん
2013/10/31(木) 21:18:38.84画面作ってボタンのクリックイベントから先はなんでもかんでもクラス化して
クラスがいっぱいになったりするんですけど、そんなもんですか?
グローバル変数を使わない方がいいと思って
クラスのアクセサつかったりしてるんですけど、
逆にごちゃごちゃしてる気がしてなんかなぁって感じです
基本的にどんな設計が一番保守しやすいんでしょうか?
気を付けていることとかを聞かせていただけるとありがたいです。
0103デフォルトの名無しさん
2013/10/31(木) 21:27:39.55dataはプログラム全体をカバーする巨大構造を別に設計してソコに収める。
0104デフォルトの名無しさん
2013/10/31(木) 21:37:02.140105デフォルトの名無しさん
2013/10/31(木) 21:37:50.94生成したインスタンスすべてを管理するクラスを作るってこと?
インスタンスを生成したクラスの中やデストラクタでdeleteしてるんですけど、
そのなかで解放はしないでそっちの管理するクラスで解放するってことですか?
0106デフォルトの名無しさん
2013/10/31(木) 22:06:11.42「逆にごちゃごちゃしてる気がしてなんかなぁって感じ」る程まで小分けする必要は無いだろ。
管理しやすい単位で留めとけよ。
>>105
それはなんちゃってオブジェクト指向の作り方説明じゃねぇの?
0107デフォルトの名無しさん
2013/11/01(金) 00:16:21.34細かいクラスほど別のプログラムで再利用できるように意識する。できない場合は分けるだけムダってことも
基本クラスはできるだけ継承で機能を拡張しやすいように作る
メンバのdeleteは普通にデストラクタですればいいよ
0108デフォルトの名無しさん
2013/11/01(金) 00:30:57.530109デフォルトの名無しさん
2013/11/01(金) 01:02:50.69delete なんて書くんじゃねぇ。スマートポインタ使え。
0110デフォルトの名無しさん
2013/11/01(金) 01:12:41.45USB接続できるハンドルでC++で制御することがサポートされてたりする商品があったら教えて欲しい
0111デフォルトの名無しさん
2013/11/01(金) 01:22:38.35プレステのハンドル形コントローラーと、プレステパッドのジョイパッドコンバータを組み合わせて使えば良い。
プレステコントローラーを流用する時点で保証的なものは無いけど、製品数や品質はそこそこ期待できる。
0112デフォルトの名無しさん
2013/11/01(金) 06:58:57.080113デフォルトの名無しさん
2013/11/01(金) 07:20:39.21現:Traits/Policyクラス→抽象クラス→具象クラス→拡張クラス(時々?)→拡張クラス2(極稀?)→拡張クラス3(奇跡?愚作?)
0114デフォルトの名無しさん
2013/11/01(金) 07:32:09.53それは正解
0115デフォルトの名無しさん
2013/11/01(金) 07:45:09.72あんまり、初心者に継承は教えない方がいいと思う。
既存のファイル読み書きクラスを継承してログ出力クラスなんてものを作ったりするし。
先ずは、カプセル化、そして多態とかインターフェース継承、
最後に高等テクニックとして実装の継承を教えるとかかな。
0116デフォルトの名無しさん
2013/11/01(金) 07:53:26.53ネイティブもちゃんと聞いてなくて、話の流れで判断してるらしい
0117デフォルトの名無しさん
2013/11/01(金) 08:42:18.100118デフォルトの名無しさん
2013/11/01(金) 09:58:35.47発する側も意識して発音する
0119デフォルトの名無しさん
2013/11/01(金) 14:34:51.51語順も助詞もぶっちゃけ飾りです
0120デフォルトの名無しさん
2013/11/01(金) 16:18:48.04「お前はプログラミングができない」
「お前もプログラミングができない」
「お前はプログラミングもできない」
「お前もプログラミングもできない」
「お前とプログラミングはできない」
「お前でプログラミングはできない」
0121デフォルトの名無しさん
2013/11/01(金) 16:34:01.37「お前のプログラミングはできない」
0122デフォルトの名無しさん
2013/11/01(金) 16:34:05.94http://img2.blogs.yahoo.co.jp/ybi/1/65/d7/bloom5531/folder/1012162/img_1012162_31139923_0?1378651646
0123デフォルトの名無しさん
2013/11/01(金) 18:29:00.83普通に意味通じる。
0124デフォルトの名無しさん
2013/11/01(金) 18:38:46.420125デフォルトの名無しさん
2013/11/01(金) 18:41:10.860126デフォルトの名無しさん
2013/11/01(金) 19:00:46.220127デフォルトの名無しさん
2013/11/01(金) 19:04:43.28通じたとしても違和感は感じるよね
ただ、日常のよくやる会話ならほぼアクセントだけで通じると思ってる
挨拶みたいな定型句なんかは余計に
0128デフォルトの名無しさん
2013/11/01(金) 19:13:49.38「彼、あなた、殴る」
だとどっちがどっちを殴るか不明瞭
0129デフォルトの名無しさん
2013/11/01(金) 19:17:12.130130デフォルトの名無しさん
2013/11/01(金) 19:25:45.20こんなかんじで言葉は発展してきたんだろうな
0131デフォルトの名無しさん
2013/11/01(金) 19:54:14.04「あなたはリンゴを食べます」
「あなたをリンゴが食べます」
「You eat this apple」
「This apple eat you」
また、上述の単語のみを用いて会話する場合、同じ世界観を背景としていれば「あなた(you)、リンゴ(apple)、食べる(eat)」でも伝わる
これは、人間がリンゴを食べることはあってもリンゴが人間を食べることはないという共通の関係性を認識しているため可能なこと
>>128のようにどっちがどっちに対しても行うことが可能な関係性の場合には破綻する
0132デフォルトの名無しさん
2013/11/01(金) 20:15:16.460133デフォルトの名無しさん
2013/11/01(金) 20:51:53.020134デフォルトの名無しさん
2013/11/02(土) 02:14:12.68メンバ変数の接頭(尾)辞おまえらどんなにしてる?
m_foo か foo_ が2強だと思うんだが視認性的に前者最強?
0135デフォルトの名無しさん
2013/11/02(土) 02:18:43.650136デフォルトの名無しさん
2013/11/02(土) 02:21:17.32大文字表現は定数と(数少ない)マクロのためにとっておきたい
0137デフォルトの名無しさん
2013/11/02(土) 02:25:21.79同じ接頭辞の変数は一瞬見紛いやすいから
0138デフォルトの名無しさん
2013/11/02(土) 02:35:33.86サンクス。てかpart105にも同じ話題があった…蒸し返しすまん
0139デフォルトの名無しさん
2013/11/02(土) 08:29:50.13かな
0140デフォルトの名無しさん
2013/11/02(土) 08:33:59.800141デフォルトの名無しさん
2013/11/02(土) 09:28:12.91逆に全部揃ってても文脈無いと判断付かん文章もあるしな。
助詞とかは解釈を分りやすくするヒントであって、必ずしも省略不可能な要素では無いんだろうな。
C/C++だって不定なコードとか鼻悪魔なコードとかあるわけだし。
0142デフォルトの名無しさん
2013/11/02(土) 11:27:32.52自動補完なんてそんなのなくても余裕だし、this->書いて消せば命名どうしようが関係ないし
0143デフォルトの名無しさん
2013/11/02(土) 11:30:11.94んで最悪な事にところどころ忘れてやがんの、なんの意味もねえw
0144デフォルトの名無しさん
2013/11/02(土) 11:32:12.790145デフォルトの名無しさん
2013/11/02(土) 11:40:18.640146デフォルトの名無しさん
2013/11/02(土) 11:47:33.84コピペ面倒だし行が無駄に長くなるだけだろ
0147デフォルトの名無しさん
2013/11/02(土) 11:48:27.63これの方が古臭い根性論に見える。
0148デフォルトの名無しさん
2013/11/02(土) 11:53:02.960149デフォルトの名無しさん
2013/11/02(土) 11:54:45.550150デフォルトの名無しさん
2013/11/02(土) 12:08:45.360151デフォルトの名無しさん
2013/11/02(土) 12:09:51.31>>143 は許しがたいな。C使えよ
0152デフォルトの名無しさん
2013/11/02(土) 12:18:20.180153デフォルトの名無しさん
2013/11/02(土) 14:22:38.05覚えきれないほどのメンバ変数がある時点で捗るもクソもない
0154デフォルトの名無しさん
2013/11/02(土) 14:35:17.84俺はc#もやりだしてから_fooで統一した
0155デフォルトの名無しさん
2013/11/02(土) 14:40:04.891クラスで済む話じゃないからねえ。
どのクラスに何というメンバがあるか全部覚えておくというなら、やっぱり根性論か、
あるいはよっぽど小規模なプログラムしか作ったことないんだろう。
0156デフォルトの名無しさん
2013/11/02(土) 14:41:38.38結構いかしてると思わない?
0157デフォルトの名無しさん
2013/11/02(土) 14:51:07.460158デフォルトの名無しさん
2013/11/02(土) 15:19:25.13全部入りかよw
0159デフォルトの名無しさん
2013/11/02(土) 15:47:52.00実装中じゃないクラスなら、インテリセンス効くじゃんか
バカか
0160デフォルトの名無しさん
2013/11/02(土) 16:27:22.71どーせなら糞ハンガリアンも追加したら?
0161デフォルトの名無しさん
2013/11/02(土) 16:45:32.69メンバの目印としては極めて悪質
0162デフォルトの名無しさん
2013/11/02(土) 16:59:47.63おちつけw
0163デフォルトの名無しさん
2013/11/02(土) 17:01:10.310164デフォルトの名無しさん
2013/11/02(土) 17:01:11.630165デフォルトの名無しさん
2013/11/02(土) 17:05:51.58詳しく
0166デフォルトの名無しさん
2013/11/02(土) 17:06:12.30そ…それは…
0167デフォルトの名無しさん
2013/11/02(土) 17:12:43.340168デフォルトの名無しさん
2013/11/02(土) 17:14:48.800169デフォルトの名無しさん
2013/11/02(土) 17:18:45.53グローバルスコープ指定を流用するって悪癖だっけ?結構便利なんだけどなあ
0170デフォルトの名無しさん
2013/11/02(土) 17:26:37.40ハンガリアンとの関連も見いだせないし、流用の意味もわからないのですが…
0171デフォルトの名無しさん
2013/11/02(土) 17:31:35.98::のどこがハンガリアンだ?という話
0172デフォルトの名無しさん
2013/11/02(土) 17:36:54.820173デフォルトの名無しさん
2013/11/02(土) 17:38:09.570174デフォルトの名無しさん
2013/11/02(土) 17:49:26.740175デフォルトの名無しさん
2013/11/02(土) 17:51:40.690176デフォルトの名無しさん
2013/11/02(土) 17:52:23.51識別子の冒頭になにかつけて、なにかしら認知しやすくしよう、という心理が似ているなあと、いやまあアレですけど
0177デフォルトの名無しさん
2013/11/02(土) 18:01:58.25通らないだろw
0178デフォルトの名無しさん
2013/11/02(土) 18:03:25.51たしか小文字が続くならOKで大文字はアウト
0179デフォルトの名無しさん
2013/11/02(土) 18:16:22.75thisが参照なら・・・せめて参照なら・・・
this.foo
this->foo
この一体感の差は大きい
0180デフォルトの名無しさん
2013/11/02(土) 18:17:15.73だからm_の方が安全なんだよな
0181デフォルトの名無しさん
2013/11/02(土) 18:18:11.961 Certain sets of names and function signatures are always reserved to the implementation:
? Each name that contains a double underscore _ _ or begins with an underscore followed by an uppercase letter (2.12) is reserved to the implementation for any use.
? Each name that begins with an underscore is reserved to the implementation for use as a name in the global namespace.
0182デフォルトの名無しさん
2013/11/02(土) 18:19:46.440183デフォルトの名無しさん
2013/11/02(土) 18:24:32.07つまり、クラス内などの「グローバル以外のスコープ」なら、アンスコをどう使っても自由って事でオケ?
0184デフォルトの名無しさん
2013/11/02(土) 18:25:21.11hoge_ しっぽ生やす方がスマート
0185デフォルトの名無しさん
2013/11/02(土) 18:25:41.06this が参照だったら this 自体を変えれるんですか?this が左辺値だったら、だったらいいことがあるかも
0186デフォルトの名無しさん
2013/11/02(土) 18:31:04.74余計に打たないといけないじゃん
0187デフォルトの名無しさん
2013/11/02(土) 18:32:11.41じゃーこういうのどうよ?
0188デフォルトの名無しさん
2013/11/02(土) 18:34:17.79グローバル名前ではであって、グローバル以外の名前のことは書いてないから
なんとも言えない。
>>184
winならm+ハンガリアンだろ
0189デフォルトの名無しさん
2013/11/02(土) 18:34:23.240190デフォルトの名無しさん
2013/11/02(土) 18:40:35.500191デフォルトの名無しさん
2013/11/02(土) 18:57:52.53開発環境の都合にコードを合わせるなんてばかばかしいだろう
そんなのはIDEで対応してくれよ
0192デフォルトの名無しさん
2013/11/02(土) 19:02:51.57自由じゃない
よく読め
0193デフォルトの名無しさん
2013/11/02(土) 19:05:09.04コンストラクタでメンバ変数の初期値を指定する場合
hoge_ = hoge; のようになるけど、
インテリセンスで両方出てくるから
hoge = hoge; や hoge_ = hoge_; になるバグを仕込む危険性があるので頭悪い
0194デフォルトの名無しさん
2013/11/02(土) 19:10:02.97ほとんどの人は「補完の為に」付けてるわけじゃないだろう。
ポストフィックスにしておけば補完のときにメンバ変数がまとまって出るから便利という程度で。
0195デフォルトの名無しさん
2013/11/02(土) 19:11:52.25色が変わるIDEもあるけど、そんなのばかりではないし
変数の寿命が分かりやすいから
見知らぬコードも読みやすい
0196デフォルトの名無しさん
2013/11/02(土) 19:12:12.860197デフォルトの名無しさん
2013/11/02(土) 19:12:40.03いくらなんでも警告出るだろ
0198デフォルトの名無しさん
2013/11/02(土) 19:12:43.140199デフォルトの名無しさん
2013/11/02(土) 19:13:33.04コンストラクタで代入してんのかよ
0200デフォルトの名無しさん
2013/11/02(土) 19:14:01.86それは初期化ではなくて代入だC++erなら初期化と代入は区別すべきコンストラクタでの初期化はそのための構文を使え
結論:>>193は頭が悪い
0201デフォルトの名無しさん
2013/11/02(土) 19:17:25.66別にメンバ初期化子でも同じだけどな
hoge_(hoge_) にしても警告でない環境なんぞ普通にある
g++ 4.6.0 -std=c++0x -pedantic-errors -Wall で無警告
0202デフォルトの名無しさん
2013/11/02(土) 19:19:00.38かっこわるいけど
0203デフォルトの名無しさん
2013/11/02(土) 19:19:26.390204デフォルトの名無しさん
2013/11/02(土) 19:20:54.160205デフォルトの名無しさん
2013/11/02(土) 19:21:44.31それがなにか?
環境依存の話をされても
コンストラクタ内の記述で代入を使うのはどーかといっているだけだがな‥‥
0206デフォルトの名無しさん
2013/11/02(土) 19:22:04.420207デフォルトの名無しさん
2013/11/02(土) 19:23:35.76話の流れ理解してる?
メンバ初期化子であっても同じ現象が起こるから
問題であることに変わりないって言ってるんだが
0208デフォルトの名無しさん
2013/11/02(土) 19:25:57.57メンバ変数かどうかの確認にワンテンポかかるんだよな
m_ は主張が強くて一瞬で分かる
0209デフォルトの名無しさん
2013/11/02(土) 19:26:53.16末尾_には意味が無い
末尾_を使うのがあらゆる場面でメンバ変数であることを約束できる唯一の方法
0210デフォルトの名無しさん
2013/11/02(土) 19:27:10.530211デフォルトの名無しさん
2013/11/02(土) 19:28:46.670212デフォルトの名無しさん
2013/11/02(土) 19:30:01.23"_" ポストフィクスはそれ以外で付けてるのを見た事がある
m_ の勝利
0213デフォルトの名無しさん
2013/11/02(土) 19:30:34.41gcc 4.8.1なら出るぞハゲ
warning: 'Hage::hoge_' is initialized with itself [-Winit-self]
0214デフォルトの名無しさん
2013/11/02(土) 19:30:48.03環境依存の話はいいです
0215デフォルトの名無しさん
2013/11/02(土) 19:32:20.84出る環境の事なんてどうでもいい
0216デフォルトの名無しさん
2013/11/02(土) 19:32:25.29話の流れとは関係ない
>>199-200 そもそもコンストラクタの記述に代入演算子を使うのが非常識と主張している
>>193 はC++の基礎からやり直すべき
0217デフォルトの名無しさん
2013/11/02(土) 19:34:17.25相手して損した
0218デフォルトの名無しさん
2013/11/02(土) 19:35:47.21アスペルガー批判をする暇があるならC++を勉強してくれ
0219デフォルトの名無しさん
2013/11/02(土) 19:38:46.130220デフォルトの名無しさん
2013/11/02(土) 19:39:54.540221デフォルトの名無しさん
2013/11/02(土) 19:44:14.770222デフォルトの名無しさん
2013/11/02(土) 19:46:50.450223デフォルトの名無しさん
2013/11/02(土) 19:48:08.020224デフォルトの名無しさん
2013/11/02(土) 19:49:18.60スる
ダけ
ムだ
0225デフォルトの名無しさん
2013/11/02(土) 20:07:39.750226デフォルトの名無しさん
2013/11/02(土) 20:08:37.65一貫性がないな〜
0227デフォルトの名無しさん
2013/11/02(土) 20:12:37.33知らないコードの動きを見る時に凄く不便なんだよ
0228デフォルトの名無しさん
2013/11/02(土) 20:15:05.84大きなクラスをつくらない、の掟を守ってる限りは実際それもありだと思う
しかし得てして実装は肥大化していくもので
メンバ変数がグローバル変数ばりのスコープの広さをもったとき破たんする
0229デフォルトの名無しさん
2013/11/02(土) 20:17:43.82それも一種の環境依存なのかな
0230デフォルトの名無しさん
2013/11/02(土) 20:38:48.15メンバ変数の色分けは難しすぎる中年
0231デフォルトの名無しさん
2013/11/02(土) 20:40:37.490232デフォルトの名無しさん
2013/11/02(土) 20:57:56.06たしかに横に長くなるけど確実じゃね?
0233デフォルトの名無しさん
2013/11/02(土) 21:13:20.670234デフォルトの名無しさん
2013/11/02(土) 21:14:41.93そうなると気持ち悪い
0235デフォルトの名無しさん
2013/11/02(土) 21:14:52.800236デフォルトの名無しさん
2013/11/02(土) 21:15:23.49何を確実にしたいんだ?
0237デフォルトの名無しさん
2013/11/02(土) 21:23:40.38this->と違って、定義のときだけ気をつけていればあとはコンパイラが保証してくれる。
0238デフォルトの名無しさん
2013/11/02(土) 21:27:08.24せめてthis必須のコンパイラオプションとかあればな
0239デフォルトの名無しさん
2013/11/02(土) 21:27:25.13mから始まる関数名を補完しようとしたら、m_系が大量に出てくる
0240デフォルトの名無しさん
2013/11/02(土) 21:31:58.02普通はちょうどいい感じに出てくる。
0241デフォルトの名無しさん
2013/11/02(土) 21:45:55.02補完の速度を遅くしすぎ?
0242デフォルトの名無しさん
2013/11/02(土) 21:46:15.49「C++ coding standards」もhoge_
m_hogeで有力な本とかライブラリって何よ
0243デフォルトの名無しさん
2013/11/02(土) 21:47:18.840244デフォルトの名無しさん
2013/11/02(土) 22:06:03.77m_fooは、昔のVC++だな
0245デフォルトの名無しさん
2013/11/02(土) 22:08:31.20Googleのって例外の使用禁止とかのアレ?
だとしたら、アレって普通の人が参考にしていいようなもんなの?
0246デフォルトの名無しさん
2013/11/02(土) 22:10:56.280247デフォルトの名無しさん
2013/11/02(土) 22:16:11.14Qtはm_hoge
collada-domはhoge
ORGEはmHoge
結構いろいろあるな
0248デフォルトの名無しさん
2013/11/02(土) 22:41:01.72詭弁過ぎて話にならん
0249デフォルトの名無しさん
2013/11/02(土) 22:45:27.290250デフォルトの名無しさん
2013/11/02(土) 23:13:20.17システムハンガリアンは当然詰め込むとして、アプリケーションハンガリアンも詰め込もうぜ。
this->m_dwyenHoge_
0251デフォルトの名無しさん
2013/11/02(土) 23:17:49.13えっと>>181に書いてある事をいくら読んだところで>>188以外の解釈に至らないんだがそれでオケ?
0252デフォルトの名無しさん
2013/11/02(土) 23:21:49.43「Global names」にはマクロも含むんだろ
0253デフォルトの名無しさん
2013/11/02(土) 23:29:48.54じゃねーの?
0254デフォルトの名無しさん
2013/11/02(土) 23:36:13.76「なんとも言えない。」=「自由でないともいえない」≒「(自由でない保証が無い限り)自由である。」
の可能性はどこにいった?
0255デフォルトの名無しさん
2013/11/02(土) 23:42:01.76括弧の中に消えた。
安全側に倒そうと思ったら、そっちにはしたくないと思うんだ。
0256デフォルトの名無しさん
2013/11/03(日) 00:28:37.99箇条書きの最後にだけ "in the global namespace" って書いてあるでしょ。
ほかはそうじゃないって事。
0257デフォルトの名無しさん
2013/11/03(日) 05:23:10.16それとは別の項目に
・ローカル引数において〜の場合は前置/後置アンダースコアを使用しないこと
って書いてあっても>>181の文と何の矛盾もないだろ
>>251はそういうことを言ってるんだよ
0258デフォルトの名無しさん
2013/11/03(日) 06:16:22.290259デフォルトの名無しさん
2013/11/03(日) 07:02:00.62_で始まる識別子は一律で禁止しとくのがメジャーだし合理的
0260デフォルトの名無しさん
2013/11/03(日) 07:39:34.34逆だろ
0261デフォルトの名無しさん
2013/11/03(日) 07:42:31.52結論は正解って事を自ら証明したんだろ。
0262デフォルトの名無しさん
2013/11/03(日) 07:54:17.400263デフォルトの名無しさん
2013/11/03(日) 08:07:43.33そう思うならそう言う言語を作って使えばいい。
0264デフォルトの名無しさん
2013/11/03(日) 08:10:56.65マッチポンプもいいとこだけどなー
一律禁止には同意
0265デフォルトの名無しさん
2013/11/03(日) 10:40:52.90の意味わからないのか? 英語読めないバカは日本語の規格書読んどけ
- 下線で始まる名前は,大域的名前空間における名前として,処理系用に予約する。
0266デフォルトの名無しさん
2013/11/03(日) 10:49:47.66グローバル以外の名前空間ならアンスコ自由に使っても合法と言う事でオケ?
0267デフォルトの名無しさん
2013/11/03(日) 10:49:50.93何がいいたいのかわからんけど、(誰かを馬鹿にしたいだけ?)とりあえず訳間違えてるよ
0268デフォルトの名無しさん
2013/11/03(日) 10:56:32.33つか、誤訳だというなら日本工業標準調査会に指摘しろよ。
0269デフォルトの名無しさん
2013/11/03(日) 10:59:05.15>って書いてあっても
なんで規格読まずにそんなバカなこと言ってるの
0270デフォルトの名無しさん
2013/11/03(日) 11:02:14.09グローバルで(空間ではない。つまりどこでも)でアンダースコアで始まって大文字とアンダースコア二連続が予約されてる。
で、global namespaceでアンダースコアで始まる名前が予約されてる。
0271デフォルトの名無しさん
2013/11/03(日) 11:18:46.480272デフォルトの名無しさん
2013/11/03(日) 11:28:44.63ん?ああ、そう言うことか
日本語でも勘違いしてたかもしれん
グローバルに予約しているから、当然ローカルでも使えんと言う事か
0273デフォルトの名無しさん
2013/11/03(日) 11:29:52.090274デフォルトの名無しさん
2013/11/03(日) 12:29:38.21global namespaceがクラススコープも含ならその前の文要らないだろw
でも、この程度の文章も読めない人達はアンスコ始まりは一律に
禁止したほうが良いかもね。
0275デフォルトの名無しさん
2013/11/03(日) 12:40:05.07Use of two sequential underscore characters ( __ ) at the beginning of an identifier,
or a single leading underscore followed by a capital letter, is reserved for C++ implementations in all scopes.
You should avoid using one leading underscore followed by a lowercase letter for names with file scope
because of possible conflicts with current or future reserved identifiers.
0276デフォルトの名無しさん
2013/11/03(日) 12:40:50.76読めない人達は禁止にしないでしょ、現にglobal namespace以外は好きにアンダースコア使っていいと勘違いしてた人も居るんだし。
読めない、読まない人達のために禁止にするんだよ。
0277デフォルトの名無しさん
2013/11/03(日) 12:52:51.98これが規格に書いてあれば勘違いしなかったわ
0278デフォルトの名無しさん
2013/11/03(日) 13:02:20.55なおさないとまずいだろう msdn
0279デフォルトの名無しさん
2013/11/03(日) 14:38:05.75why?
「Visual C++はダブルアンスコは先頭にしか使わないので
途中のダブルアンスコはVisual C++と衝突しませんよ」
という製品仕様の説明だろ?
規格上問題ない
0280デフォルトの名無しさん
2013/11/03(日) 15:22:54.670281デフォルトの名無しさん
2013/11/03(日) 17:10:36.451 特定の名前や関数のシグニチャは処理系により予約されている:
・ 2連続のアンダースコア __ かアンダースコアの次の大文字が続く名前 (2.12) はあらゆる用途において処理系により予約されている
・ 1つのアンダースコアで始まる名前はグローバルな前空間に所属する名前としては処理系により予約されている
マクロの制限は規格の別の所に書いてあったような・・・
0282デフォルトの名無しさん
2013/11/03(日) 17:12:45.31○グローバル名前空間
このへっぽこIMEめ・・・
0283デフォルトの名無しさん
2013/11/03(日) 18:27:40.66「Visual C++」じゃなくて「C++」と書いてあるじゃん
0284デフォルトの名無しさん
2013/11/03(日) 18:43:41.49ってことだろ
0285デフォルトの名無しさん
2013/11/03(日) 19:32:51.64> ってことだろ
MSはC++規格に追従していない
ダブルアンダースコアで始まる識別子が予約されていたのはC++98,
C++03ではダブルアンダースコアを含むと改訂されたが、MSは追従
せずに、そのまま残っている。
つまり件の記述は今は規格外となっているが、書かれた当時はC++標準
(ISO/IEC FDIS 14882)を指していたもの。「本製品のC++実装」の事ではない。
英語読めないなら日本語の規格読んでろ。
0286デフォルトの名無しさん
2013/11/03(日) 19:55:52.14これだけ読むと云々ってレスへのフォローだろ
落ち着けよ
0287デフォルトの名無しさん
2013/11/04(月) 00:42:47.56手元のC++98と同等と思われる文書を見る限り特に変わりは無いようだが、それはどこソースの情報だい?
0288デフォルトの名無しさん
2013/11/04(月) 00:58:36.34>>285の脳内ではそうなのだろうけど
どうしてそこまで妄想の決め付けが激しいのか
0289デフォルトの名無しさん
2013/11/04(月) 01:03:19.450290デフォルトの名無しさん
2013/11/04(月) 01:06:58.73そるこそがスレを加速させる力
0291デフォルトの名無しさん
2013/11/04(月) 01:39:17.39#include <iostream>
#include <fstream>
using namespace std;
void main(){
char* buffer;
int size;
ifstream in( "text.txt", ifstream::binary );
if( !in ){
cout << "ファイルがありません。" << endl;
}
else{
in.seekg( 0, ifstream::end );
size = static_cast<int>( in.tellg() );
in.seekg( 0, ifstream::beg );
buffer = new char[ size ];
in.read( buffer, size );
}
cout << buffer << endl;
}
text.txtの中身
こんにちは!
実行結果
こんにちは!■■■
となるのですが何故でしょうか…?
0292デフォルトの名無しさん
2013/11/04(月) 01:41:24.810293デフォルトの名無しさん
2013/11/04(月) 01:54:49.980294デフォルトの名無しさん
2013/11/04(月) 01:58:46.02ありがとうございます。
buffer[size] = '\0';
といれれば解決しました。
しかし、"こんにちは。"は全角文字なので size = 12バイトとなりますが、
未確保のbuffer[12]に文字を入れても大丈夫でしょうか…?
何度も質問すみません…
0295デフォルトの名無しさん
2013/11/04(月) 01:59:49.050296デフォルトの名無しさん
2013/11/04(月) 02:04:20.42| This is a PDF version of WG21/N1043, a draft standard for C++98,
| which was used as the 1997 Public review document.
って奴だな。
17.3.3.1.2 Global names [lib.global.names]
|1 Certain sets of names and function signatures are always reserved to the implementation:
| Each name that begins with an underscore and either an uppercase letter or another underscore (2.11) is
|reserved to the implementation for any use.
| Each name that begins with an underscore is reserved to the imple
で、お前の「手元のC++98と同等と思われる文書」とはどういう素性のものだ?
>>288
英語読めないバカは引っ込んでろよ。「本製品のC++実装」爆笑
0297デフォルトの名無しさん
2013/11/04(月) 02:06:21.80先ほど、それをやってみたのですが、
こんにちは!ヘ
となってしまいました…
0298デフォルトの名無しさん
2013/11/04(月) 02:07:13.62#include <iostream>
#include <fstream>
using namespace std;
void main(){
char* buffer;
int size;
ifstream in( "text.txt", ifstream::binary );
if( !in ){
cout << "ファイルがありません。" << endl;
}
else{
in.seekg( 0, ifstream::end );
size = static_cast<int>( in.tellg() );
size += 1;
in.seekg( 0, ifstream::beg );
buffer = new char[ size ];
in.read( buffer, size );
buffer[size] = '\0';
}
cout << buffer << endl;
}
0299デフォルトの名無しさん
2013/11/04(月) 02:07:45.65そうじゃなくて、size+1で13バイトを確保すれば
buffer[12]に文字を入れても大丈夫でしょ?
もっとちゃんと勉強してから手を付けたほうが良いレベル
0300デフォルトの名無しさん
2013/11/04(月) 02:08:56.960301デフォルトの名無しさん
2013/11/04(月) 02:11:53.42フじゃなくてヘが入るのは珍しいなってちょっと思った
どなたか終端文字つっこむとき '\0', L'\0', TEXT('\0') とかじゃくて
0つっこむ派のお仲間はいらっしゃいませんか?
0302デフォルトの名無しさん
2013/11/04(月) 02:14:54.53>>300
意味わかりました!
まず、buffer = new char[ size + 1 ];
で13バイト確保して、文字を読み込み。
13バイト目に'\0'を入れればいいんですね!
0303デフォルトの名無しさん
2013/11/04(月) 02:16:08.68理解してるとは思うんだけど12バイト目っていっとくれ
0304デフォルトの名無しさん
2013/11/04(月) 02:17:44.880305デフォルトの名無しさん
2013/11/04(月) 02:17:47.45次はnew使わない書き方覚えな。
危なっかしくて見てられん
0306デフォルトの名無しさん
2013/11/04(月) 02:18:29.180307デフォルトの名無しさん
2013/11/04(月) 02:19:31.42序数は0から数えるのが少なくともC/C++の文脈では暗黙の了解
0308デフォルトの名無しさん
2013/11/04(月) 02:21:25.57イテレータでいうrendの位置だと思ってた
0309デフォルトの名無しさん
2013/11/04(月) 02:22:12.850310デフォルトの名無しさん
2013/11/04(月) 02:22:39.39インデックスが0オリジンなのと
「nバイト目」の日本語は別
0311デフォルトの名無しさん
2013/11/04(月) 02:23:07.66こういうやついるよね
0312デフォルトの名無しさん
2013/11/04(月) 02:27:38.86いやしかしメモリのオフセットを相手に伝えるとき1から表現するかお前?
0313デフォルトの名無しさん
2013/11/04(月) 02:30:25.32オフセットが0オリジンなのと
nバイト「目」とかn「番目」の日本語は別。
規格でもfirst element of the arrayという表現はあっても
0th elementという表現は無い
0314デフォルトの名無しさん
2013/11/04(月) 02:31:05.19でも正直どっちでもいいし今回も通じたんだから突っ込むよなことではないだろと思う
0315デフォルトの名無しさん
2013/11/04(月) 02:34:00.13説き伏せられた
第一要素の、的な噛み砕いた文章になると確かにそうだな
0316デフォルトの名無しさん
2013/11/04(月) 02:37:19.230317デフォルトの名無しさん
2013/11/04(月) 02:41:18.98お前うざい
0318デフォルトの名無しさん
2013/11/04(月) 02:41:58.13>>311
0319デフォルトの名無しさん
2013/11/04(月) 02:45:45.74「p大括弧〜大括弧閉じの要素」
「pのインデックス〜の要素」
「pのオフセット〜の要素」
「pの序数〜の要素」
「pプラス〜の要素」
0320デフォルトの名無しさん
2013/11/04(月) 02:47:32.73int main()でreturn無しとかreturn;とかorz
0321デフォルトの名無しさん
2013/11/04(月) 02:48:53.461.戻り値の型はintでなければならない
2.戻り値以外は処理系依存の形式
3.ただし処理系はint main()とint main(int, char **)の
どちらも許可しなければならない
4.returnが無い場合、0を返したと見なされる
0322デフォルトの名無しさん
2013/11/04(月) 02:54:47.49try
{
throw "うんこ";
}
catch(...)
{
} ←コレもreturn 0とみなされるの?
0323デフォルトの名無しさん
2013/11/04(月) 03:00:59.79「pのn番目」かなぁ。nは0から。あれ?
口頭だとぴーぜろ、ぴーいち
0324デフォルトの名無しさん
2013/11/04(月) 03:16:20.340325デフォルトの名無しさん
2013/11/04(月) 03:17:35.650326デフォルトの名無しさん
2013/11/04(月) 03:21:07.900327デフォルトの名無しさん
2013/11/04(月) 03:24:35.32retrまで左手でタイプして右手が追い付かないのか
0328デフォルトの名無しさん
2013/11/04(月) 04:30:42.83左右の指を交互に1本ずつ折り伸ばししていくのが意外と難しいということ
0329デフォルトの名無しさん
2013/11/04(月) 05:03:07.23普通に0番目の要素とか使ってるぞ
そして、0以外の場合は必ず0オリジンか1オリジンか添えてる
0330287
2013/11/04(月) 08:14:17.51先頭ページに"ISO/IEC 14882 First edition 1998-09-01"とあるな。
N1043ってことは1997/01頃のドラフトだから、そこから規格成立までの間に変わったって事か。
ってことで検索したらN1111にNBコメントへの対応として記録があったよ。
> Change [lib.global.names] from:
> ? Each name that begins with an underscore and either an uppercase letter or another underscore (2.11) is
> reserved to the implementation for any use.
> To:
> ? Each name that contains a double underscore (__) or begins with underscore and an uppercase letter
> (2.11) is reserved to the implementation for any use
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1111.ps
0331デフォルトの名無しさん
2013/11/04(月) 17:25:35.22同時押し状態が存在するとキーボードによっては状態を正しく認識できない
0332デフォルトの名無しさん
2013/11/04(月) 18:17:48.80http://lolen235.blog.fc2.com/blog-entry-816.html
0333デフォルトの名無しさん
2013/11/04(月) 18:46:31.610334デフォルトの名無しさん
2013/11/04(月) 19:53:01.64いいとこ見せたい
0335デフォルトの名無しさん
2013/11/04(月) 19:57:02.830336デフォルトの名無しさん
2013/11/04(月) 20:04:22.800337デフォルトの名無しさん
2013/11/04(月) 20:10:58.970338デフォルトの名無しさん
2013/11/04(月) 20:14:55.250339デフォルトの名無しさん
2013/11/04(月) 20:29:09.310340デフォルトの名無しさん
2013/11/04(月) 20:37:53.83美しすぎるうんコードなんて誰も注意できないな。最恐・・・
0341デフォルトの名無しさん
2013/11/04(月) 20:52:56.83バカだなあ
叱りつける→優しくする→ギシアンだろ
0342デフォルトの名無しさん
2013/11/04(月) 21:49:28.480343デフォルトの名無しさん
2013/11/04(月) 23:29:45.83いいねえ実は引き出しの中はごみためだったとか
0344デフォルトの名無しさん
2013/11/05(火) 01:57:33.34下記のTestクラス内で、値を返す int getNum() const と、参照を返す int& getNum() を定義したのですが、
int getNum() const が呼ばれることはあるのでしょうか。
呼ばれる場合はどのような処理になるのかもご教授いただきたいです。よろしくお願いします。
class Test
{
public:
int num;
public:
int getNum() const { return num; }
int& getNum() { return num; }
};
0345デフォルトの名無しさん
2013/11/05(火) 04:59:50.04Test t;
static_cast<const Test>(t).getNum();
というかそれ戻り値が違うからオーバーロードされてるわけじゃなくて(C++では出来ない)
const/非constメンバだからじゃん
0347デフォルトの名無しさん
2013/11/05(火) 06:25:05.090348デフォルトの名無しさん
2013/11/05(火) 06:38:04.940349デフォルトの名無しさん
2013/11/05(火) 06:39:59.87普通にconst Test t;で良くない?
>>346
constメンバー関数としてオーバーロードされてる。
呼ぶクラスがconstの場合そっちが呼ばれる
>>348
返り値の型参照にしちゃだめだろ…
0350デフォルトの名無しさん
2013/11/05(火) 06:40:45.180351デフォルトの名無しさん
2013/11/05(火) 06:46:14.68毎日張り付いてるクソニート
0352344
2013/11/05(火) 06:54:07.31↑でconstメンバ関数の呼び出しを確認しました。
constメンバ関数の必要性がやっと理解できました...
ありがとうございました!
0353デフォルトの名無しさん
2013/11/05(火) 07:05:18.37> 返り値の型参照にしちゃだめだろ…
自己レス
参照でも問題無かった。
constメンバー関数をいかに呼ぶかの話だったから引数にconst付いてると勝手に空目してた
0354デフォルトの名無しさん
2013/11/05(火) 12:07:11.30constと非constの違いで大きく変わるのが良くない
0355デフォルトの名無しさん
2013/11/05(火) 12:58:33.20メンバ変数への参照を返すメンバ関数はメンバ変数に直接アクセスするのとどう違うのか?って話になるな
0356デフォルトの名無しさん
2013/11/05(火) 13:01:27.100357デフォルトの名無しさん
2013/11/05(火) 13:13:21.92あとで内部ポインタ化と遅延評価が可能。
0358デフォルトの名無しさん
2013/11/05(火) 13:30:48.320359デフォルトの名無しさん
2013/11/05(火) 13:32:38.82C言語的なファイルにルーチンを置いておいて、各クラスから呼び出すようにすると
「それは手続き型だ」って言われるんだけど、オブジェクト指向的にするには、
文字列チェックのルーチンはどこに置けばいいの?
0360デフォルトの名無しさん
2013/11/05(火) 13:36:22.510361デフォルトの名無しさん
2013/11/05(火) 13:42:25.56class NewsArticle {
Datetime& dt_;
Datetime& dt() { return dt_; }
ってやっておけば、あとから
class NewsArticle {
time_t t_;
Datetime* dt_;
Datetime& dt() { if(!dt_)dt_=new Datetime(t_); return *dt_; }
と変更することだって可能だろ。
0362デフォルトの名無しさん
2013/11/05(火) 13:49:09.83聞けない環境なのだ。
0363デフォルトの名無しさん
2013/11/05(火) 14:32:21.93何で生なの?
0364デフォルトの名無しさん
2013/11/05(火) 14:45:21.78どれが生?
0365デフォルトの名無しさん
2013/11/05(火) 15:09:18.930366デフォルトの名無しさん
2013/11/05(火) 15:43:41.60例なんだからそんな枝葉は本質じゃないような
0367デフォルトの名無しさん
2013/11/05(火) 16:06:20.43http://d.hatena.ne.jp/FunnyBunnyDizzy/20081003/1223038421
0368デフォルトの名無しさん
2013/11/05(火) 16:13:50.62だめだそれは
0369デフォルトの名無しさん
2013/11/05(火) 16:18:33.370370デフォルトの名無しさん
2013/11/05(火) 16:18:39.080371デフォルトの名無しさん
2013/11/05(火) 16:30:52.690372デフォルトの名無しさん
2013/11/05(火) 16:45:26.380373デフォルトの名無しさん
2013/11/05(火) 16:46:30.495年も前の糞日記だ。ほっといてやれ
黒歴史放置されるとかなり迷惑だけどな
0374367
2013/11/05(火) 16:47:12.930375デフォルトの名無しさん
2013/11/05(火) 16:52:36.11もうこれでアウト。
> * Logger::info("いんふぉ", __FILE__, __LINE__);
> * Logger::debug("でばっぐ", __FILE__, __LINE__);
> * Logger::warn("わーん", __FILE__, __LINE__);
> * Logger::error("えらー", __FILE__, __LINE__);
0376デフォルトの名無しさん
2013/11/05(火) 19:39:07.38ああ
> 内部ポインタ化と遅延評価
ってそういう意味でいってたのか
0377デフォルトの名無しさん
2013/11/05(火) 19:51:25.35そんなゆうたらお前
> * Logger::configure("./logger.ini");
カレントディレクトリについて一通りの知識があるのかも微妙やで
0378デフォルトの名無しさん
2013/11/05(火) 21:32:32.75> // 例外はスルー
クッソワロタ
でもこれ以上黒歴史さらすのはかわいそうになってきた
0379デフォルトの名無しさん
2013/11/05(火) 21:35:45.660380デフォルトの名無しさん
2013/11/05(火) 21:46:20.10アプリの方でEMFILE ENFILEを起こしたとき、
その旨を記録しようとロガーを呼び出すと、
十中八九ロギングが失敗する。
送り先がsyslogでも同じ。
事前にダミーでルートディレクトリを開いて、非常用の数を確保しておけ。
その準備をしていないロガーライブラリーは、全部ゴミ。
0381デフォルトの名無しさん
2013/11/05(火) 21:50:23.33そこは耐えたが LOTATE_SIZE と LOTATE_GENERATION はさすがにダメだった。
0382デフォルトの名無しさん
2013/11/05(火) 22:00:55.91異常事態になったときのLogだめぽじゃだめだからな
0383デフォルトの名無しさん
2013/11/05(火) 23:19:36.59なんかタイミング悪く2重開放とか2重確保とかしちゃったりいない?
0384デフォルトの名無しさん
2013/11/05(火) 23:24:30.18atomic保証
0385デフォルトの名無しさん
2013/11/05(火) 23:29:59.52標準仕様の方で、参照カウンタのatomicityは保証されてるから、MTSafeだよ。
ただし、中身のすげかえは別。
0386デフォルトの名無しさん
2013/11/05(火) 23:55:07.87ほほう
すげかえと言いますと?
0387デフォルトの名無しさん
2013/11/06(水) 00:01:31.960388デフォルトの名無しさん
2013/11/06(水) 00:06:20.11それがすげかえの意味ですか?
0389デフォルトの名無しさん
2013/11/06(水) 00:12:30.05ロガー弱いと障害発生後に
「ログが残ってないので調査不可能。原因不明のまま調査終了」
となって、後が面倒だよなー
それをやって客にブチキレられて
ボーナス無くした部署があってだな
あれ以来ロガーだけはガチガチの社内ライブラリに頼ってる我が現場
0390デフォルトの名無しさん
2013/11/06(水) 01:21:43.09でも、それ以前にお客さんブチ切れ寸前だったんだと思うよ(笑)
0391デフォルトの名無しさん
2013/11/06(水) 01:26:00.230392デフォルトの名無しさん
2013/11/06(水) 01:33:30.75そういうときは嘘でも理由つけて"解決"するもんだ
ああ、ダメだって解っているさ。でも現場なんてそんなもん
0393デフォルトの名無しさん
2013/11/06(水) 09:08:45.560394デフォルトの名無しさん
2013/11/06(水) 09:24:21.380395デフォルトの名無しさん
2013/11/06(水) 09:31:18.52ヘッダの方が統一感あって良い気がする
ヘッダだけで完結出来るしね
が、俺はcppの方にできる限り書いてる
0396デフォルトの名無しさん
2013/11/06(水) 09:35:52.07サマリーだけヘッダに書く手もあるけど
0397デフォルトの名無しさん
2013/11/06(水) 09:46:24.690398デフォルトの名無しさん
2013/11/06(水) 09:54:18.78面倒だから実装に書いちゃってるけど、ヘッダに書くのが正しい気がする
0399デフォルトの名無しさん
2013/11/06(水) 09:56:24.600400デフォルトの名無しさん
2013/11/06(水) 11:04:12.060401デフォルトの名無しさん
2013/11/06(水) 12:50:36.57俺はcppのほうだな
ヘッダは画面に収めて俯瞰したいのと
日本語(ascii範囲外)の文字を入れたくないから
コメントを全部英語で書ける人ならいいが
0402デフォルトの名無しさん
2013/11/06(水) 13:35:41.38ASCII範囲外の文字が入っていたら、どういう不都合があるの?
0403デフォルトの名無しさん
2013/11/06(水) 13:57:52.050404デフォルトの名無しさん
2013/11/06(水) 19:45:04.49//コメントで改行した末尾文字がシフトJISで0x5cだと別環境で悲惨な事になる
0405デフォルトの名無しさん
2013/11/06(水) 19:49:43.340406デフォルトの名無しさん
2013/11/06(水) 19:52:14.670407デフォルトの名無しさん
2013/11/06(水) 19:52:43.97それはヘッダーからcppファイルに移すことで解決するの?
0408デフォルトの名無しさん
2013/11/06(水) 19:52:48.07VCのリソースコンパイラがUTF-8に対応してないとか
純ASCIIだったら気にする必要がない
0409デフォルトの名無しさん
2013/11/06(水) 19:54:45.300410デフォルトの名無しさん
2013/11/06(水) 20:19:10.450411デフォルトの名無しさん
2013/11/06(水) 20:31:23.63ほんと誰が考えたんだろうね。この糞文字コード
0412デフォルトの名無しさん
2013/11/06(水) 20:54:30.27いや、そんなに経ってないか
mysqlでは一通りのトラブルに遭遇させていただきました
libmysqlclientのわずかなバージョンの違いがSJIS扱いをバグらせたり
0413デフォルトの名無しさん
2013/11/06(水) 21:03:23.35でvalが存在しない場合の挙動で
i.first == last && i.second == last
であるのは保証されてますか?
0414デフォルトの名無しさん
2013/11/06(水) 21:33:57.63val が挿入されるべき位置
0415デフォルトの名無しさん
2013/11/06(水) 21:41:33.78ありえない
0416デフォルトの名無しさん
2013/11/06(水) 21:52:25.790417デフォルトの名無しさん
2013/11/06(水) 22:09:29.10http://www.cplusplus.com/reference/algorithm/equal_range/
The behavior of this function template is equivalent to:
template <class ForwardIterator, class T>
pair<ForwardIterator,ForwardIterator>
equal_range (ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator it = std::lower_bound (first,last,val);
return std::make_pair ( it, std::upper_bound(it,last,val) );
}
これで考えてみればわかるだろ
0418デフォルトの名無しさん
2013/11/06(水) 22:13:02.60http://ideone.com/CToAnG
0419デフォルトの名無しさん
2013/11/06(水) 22:19:12.75>>416
こっちで
http://ideone.com/XCoEww
0420デフォルトの名無しさん
2013/11/06(水) 22:52:54.09UTFの方が、夫々の言語体系を無視してるってだけの話。
0421デフォルトの名無しさん
2013/11/07(木) 01:30:08.19S-JIS策定当時からあったのだろうか
0422デフォルトの名無しさん
2013/11/07(木) 01:34:23.390423デフォルトの名無しさん
2013/11/07(木) 16:17:06.480424デフォルトの名無しさん
2013/11/07(木) 16:32:30.80http://ideone.com/vdOkRp
0425デフォルトの名無しさん
2013/11/07(木) 16:36:27.810426デフォルトの名無しさん
2013/11/07(木) 16:38:54.360427デフォルトの名無しさん
2013/11/07(木) 16:41:47.03コピーコンストラクタにもイニシャライザを書けるのか!ありがとう!
0428デフォルトの名無しさん
2013/11/07(木) 16:51:09.40同時期にでけたEUC-JPが種々の問題をスルーしてることを考えたら
糞っぷりには何の疑いもない
0429デフォルトの名無しさん
2013/11/07(木) 16:53:19.38それを2バイトに変更するとプログラムの修正を一気に行わねばならず
また漢字に3バイト使えるほど記憶容量の余裕が無かった
ってとこかな
0430デフォルトの名無しさん
2013/11/07(木) 16:55:02.96カナのデータなんて無かったんじゃないの
0431デフォルトの名無しさん
2013/11/07(木) 16:56:12.920432デフォルトの名無しさん
2013/11/07(木) 16:56:31.340433デフォルトの名無しさん
2013/11/07(木) 17:03:22.58え?
そう思ってるのはシフトJISをShift_JISにすり替える安岡信者だけでしょ
0434デフォルトの名無しさん
2013/11/07(木) 17:57:17.063バイトカナは知らない人も多かった
そもそもEUCで3バイトはあり得ない!
とか言われたこともある
辛い記憶が
0435デフォルトの名無しさん
2013/11/07(木) 21:18:32.87つまり3バイトでpack出来ないマシンがあるわけだ
だから「本当は4バイトもいらないんだけど、1バイト無駄になるなら4バイトにしてしまえ」と
言う事っしょ
0436デフォルトの名無しさん
2013/11/07(木) 21:23:06.16何言ってんだ?
0437デフォルトの名無しさん
2013/11/07(木) 21:31:02.78そりゃ3バイト固定長文字コードがもしあればの話だ
可変長文字コードじゃどうあっても1バイトアクセス
…3バイト固定長って内部表現としてそう悪くないんじゃないかと思うんだけどどうよ
弄るのも計るのも楽だし、UCS-4ほど嵩張らないしさ
0438デフォルトの名無しさん
2013/11/07(木) 21:54:01.23インテルx86は奇数アドレスに多バイト整数アクセスしても
バスエラーにはならないが、やる奴はシロウト。
まっとうなプログラマーはそんなKUSOで
動作未定義でクソ遅いコードは書かない。
0439デフォルトの名無しさん
2013/11/07(木) 21:55:02.23packの意味も分からないって・・・
だから3バイト毎に配列作ったとするよ、一つ置きに奇数アドレスからのアクセスになるだろ?
まだわかんねーのか
0440デフォルトの名無しさん
2013/11/07(木) 21:55:55.39いたずらにバスサイクル増やすだけだしな
0441デフォルトの名無しさん
2013/11/07(木) 22:05:23.10ワードが奇数アドレスにあっちゃダメってのはわかるけど、単に奇数アドレスアクセスでエラーになってたらどうすんだよ?
0442デフォルトの名無しさん
2013/11/07(木) 22:08:53.34頭悪い発言させるスレ立ててそっちでやってくれ
0443デフォルトの名無しさん
2013/11/07(木) 22:10:54.80って関数にstd::vector<int> v のbeginとendを入れたいときどう書いてる?
foo(&*v.begin(), &*v.begin() + v.size()); は悲しくなる。
0444デフォルトの名無しさん
2013/11/07(木) 22:15:08.22一番素直な書き方じゃね?
ただ要素数ゼロの時がまずいような
0445デフォルトの名無しさん
2013/11/07(木) 22:18:46.55if ( v.size() == 0 )
throw "unko";
foo(&v[0], &v[0] + v.size());
0446デフォルトの名無しさん
2013/11/07(木) 22:20:16.44foo内で for ( auto it = begin; it < end; ++it ) ってなってると思われる。
0447デフォルトの名無しさん
2013/11/07(木) 22:27:00.17fooに渡す以前の話
0448デフォルトの名無しさん
2013/11/07(木) 22:27:00.99foo(&v.front(), &v.back());
0449デフォルトの名無しさん
2013/11/07(木) 22:31:56.730450デフォルトの名無しさん
2013/11/07(木) 22:37:26.91空の時にfrontは呼び出してはいけませぬ
0451デフォルトの名無しさん
2013/11/07(木) 22:38:40.010452デフォルトの名無しさん
2013/11/07(木) 22:39:31.640453デフォルトの名無しさん
2013/11/07(木) 22:40:14.230454デフォルトの名無しさん
2013/11/07(木) 22:40:51.040455デフォルトの名無しさん
2013/11/07(木) 22:44:06.290456デフォルトの名無しさん
2013/11/07(木) 22:45:37.380457デフォルトの名無しさん
2013/11/07(木) 22:51:38.12俺これ嫌い
> if ( v.size() == 0 )
0458デフォルトの名無しさん
2013/11/07(木) 22:53:54.98∩_
〈〈〈 ヽ
〈⊃ }
∩___∩ | |
| ノ ヽ ! !
/ ● ● | /
| ( _●_) ミ/ こいつ最高にアホ
彡、 |∪| /
/ __ ヽノ /
(___) /
0459136
2013/11/07(木) 23:05:25.41ポインタとは限らないから?
0460デフォルトの名無しさん
2013/11/07(木) 23:06:53.23foo( v.begin().base(), v.end().base() );
0461デフォルトの名無しさん
2013/11/07(木) 23:16:08.24baseってなんだよ
0462デフォルトの名無しさん
2013/11/07(木) 23:31:45.13foo(&v[0], &v[v.size()-1]);
0463デフォルトの名無しさん
2013/11/07(木) 23:32:50.61gnu-stlの実装依存だった。
revervse-iteratorだけが持ってる奴とは知らなかった。
0464デフォルトの名無しさん
2013/11/07(木) 23:40:07.97普通のイテレーターとreverseで
base()の意味が異なる糞という訳ですね。
0465デフォルトの名無しさん
2013/11/07(木) 23:40:44.20C++規格は紛い物。
0466デフォルトの名無しさん
2013/11/07(木) 23:48:44.46普通のイテレータに、勝手につけてるだけだと思う。
意味が異なるわけじゃない。
0467デフォルトの名無しさん
2013/11/07(木) 23:55:50.36vector<unko>::rbegin()で返されるイテレーターのbase()がunkoになるのでしょうか
0468デフォルトの名無しさん
2013/11/07(木) 23:57:07.82頭おかしいのか?
packの意味が分からないなんて話がどこから出てきてる?
0469デフォルトの名無しさん
2013/11/07(木) 23:58:22.08範囲の一番後ろの一つさらに後ろをendにするんだから
それじゃおかしいだろ
0470デフォルトの名無しさん
2013/11/08(金) 00:01:56.260471デフォルトの名無しさん
2013/11/08(金) 00:02:59.61>>469の脳内ではそうなのだろう
>>443はそんなこと一言も言っていない
0472デフォルトの名無しさん
2013/11/08(金) 00:05:26.79コード上はそうなってるが。
0473デフォルトの名無しさん
2013/11/08(金) 00:07:18.67いやいや、言ってるし
0474デフォルトの名無しさん
2013/11/08(金) 00:07:59.30どういう流れで実体が返ると思ったの
0475デフォルトの名無しさん
2013/11/08(金) 00:08:06.93ポインタとか配列とか、使わなさすぎて忘れちゃったか?
0476デフォルトの名無しさん
2013/11/08(金) 00:09:41.36vector<unko>::rbegin()で返されるイテレーターのbase()がunko*型になるのでしょうか
0477デフォルトの名無しさん
2013/11/08(金) 00:10:47.40> void foo(int* begin, int* end);
> って関数にstd::vector<int> v のbeginとendを入れたいときどう書いてる?
template<typename T> void foo(T begin,T end);
> foo(&*v.begin(), &*v.begin() + v.size()); は悲しくなる。
foo(v.begin(), v.end());
0478デフォルトの名無しさん
2013/11/08(金) 00:12:36.150479デフォルトの名無しさん
2013/11/08(金) 00:13:07.90void foo(int* begin, int* end); って関数
0480デフォルトの名無しさん
2013/11/08(金) 00:21:04.84GNUはISO規格より自分が正しいと盲信する処理系だからきっとbase()の仕様が違う
0481デフォルトの名無しさん
2013/11/08(金) 00:30:33.38それとvectorは相性が悪いな
0482デフォルトの名無しさん
2013/11/08(金) 00:33:48.23void foo(vector<int>::iterator begin, vector<int>::iterator end)
{
if(begin!=end)foo(&*begin,&*end);
}
foo(v.begin(), v.end());
0483デフォルトの名無しさん
2013/11/08(金) 00:35:52.88試してみた。
vectorのrbegin()で取ってきたのは、iteratorが返ってくる。
型指定してポインタ渡して生成すると、ポインタが返ってくる。
C++03の仕様も見てきたけど、中身返すだけだからこれで問題ないはず。
0484デフォルトの名無しさん
2013/11/08(金) 00:37:25.73operator[]が一番直感的じゃないか
0485デフォルトの名無しさん
2013/11/08(金) 00:43:01.78base()が返すのは中身じゃなくてイテレータじゃないのか?
>>482
それはbegin==endの時に元のfooと挙動が変わるからNG
0486デフォルトの名無しさん
2013/11/08(金) 00:47:46.20foo(&*v.begin(), &*v.end());
でいいだろ
0487デフォルトの名無しさん
2013/11/08(金) 00:48:46.580488デフォルトの名無しさん
2013/11/08(金) 00:52:30.68begin==endは空という意味以外にありえないと思うけど
0489デフォルトの名無しさん
2013/11/08(金) 00:53:06.11妄想で勝手な修正をするので危険
0490デフォルトの名無しさん
2013/11/08(金) 00:54:01.38中身かつイテレータが返されるようだから、
「中身じゃなくて」は間違いで、「イテレータが返される」は正しい。
仕様にはポインタもイテレータとして扱えることが保証されると書いてある。
0491デフォルトの名無しさん
2013/11/08(金) 00:54:33.36って大丈夫なんだっけ?
0492デフォルトの名無しさん
2013/11/08(金) 00:59:04.920493デフォルトの名無しさん
2013/11/08(金) 01:00:00.45じゃあ空の時にどうやってfooを呼び出すっていうのよ?
fooのbegin==end時の振る舞いが明記されていない様な糞環境なら
482でいいだろ
0494デフォルトの名無しさん
2013/11/08(金) 01:00:02.49>仕様にはポインタもイテレータとして扱える
扱えたら>>460が正しいコードだと言いたいのかおまいは
0495デフォルトの名無しさん
2013/11/08(金) 01:04:27.19おまえアホか
要素数1でbegin()とbegin()を渡されたらどうすんだ
第一、中身が不明だからこそ
元の挙動が最低限保持されるように修正するんだろjk
0496デフォルトの名無しさん
2013/11/08(金) 01:04:43.73「begin==endのときは何もしない」が正しい設計
0497デフォルトの名無しさん
2013/11/08(金) 01:09:22.00begin==endの時に出すようにしていたログが出なくなりました
とか
begin==endはあり得ないパターンなのでassertで落とすようにしてましたが動きがおかしくなりました
と苦情が出たらどうするんた低農
0498デフォルトの名無しさん
2013/11/08(金) 01:11:14.96vectorが使えねー理由の最大はそこだよな。
0499デフォルトの名無しさん
2013/11/08(金) 01:11:41.91そういうのは設計がおかしいんだろ
0500デフォルトの名無しさん
2013/11/08(金) 01:13:58.31じゃあ空チェックした上で
foo(&*v.begin(), &*v.begin() + v.size());
しかないね
0501デフォルトの名無しさん
2013/11/08(金) 01:13:56.78意味が分からない
0502デフォルトの名無しさん
2013/11/08(金) 01:15:48.36↓
(ボクの考える)おかしな設計はあり得ない前提でプログラム修正する
こういうクズは他人に迷惑をかける前に死んだ方がいい
0503デフォルトの名無しさん
2013/11/08(金) 01:16:14.20そのあたりの問題を解消した新vector使ってしまえば解決だろ
0504デフォルトの名無しさん
2013/11/08(金) 01:17:11.82>>445
0505デフォルトの名無しさん
2013/11/08(金) 01:17:40.17> (ボクの考える)おかしな設計はあり得ない前提でプログラム修正する
日本語でヨロシク
0506デフォルトの名無しさん
2013/11/08(金) 01:17:44.55foo(&v[0], &v[v.size()]);
の方が短いか
0507デフォルトの名無しさん
2013/11/08(金) 01:19:06.66> begin==endはあり得ないパターンなのでassertで落とすようにしてましたが動きがおかしくなりました
この部分、何を言いたいのか全然分からん
0508デフォルトの名無しさん
2013/11/08(金) 01:22:11.850509デフォルトの名無しさん
2013/11/08(金) 01:22:25.73そうなってしまうなら、>>482のコードで済むんじゃね?
0510デフォルトの名無しさん
2013/11/08(金) 01:23:06.29意味不明
0511デフォルトの名無しさん
2013/11/08(金) 01:26:08.38なにファビヨってるの?
もしbegin==end時の挙動が明記されてない糞関数を関数使わなきゃいけないハメになったら
実際に確かめるか、空チェックするから、心配なく
0512デフォルトの名無しさん
2013/11/08(金) 01:26:54.73正しいなんて一言も言ってないが。
だから、gnu-stlの実装だけと言ってる。
0513デフォルトの名無しさん
2013/11/08(金) 01:28:28.01v[v.size()]は範囲外アクセスになるじゃねーか
0514デフォルトの名無しさん
2013/11/08(金) 01:28:36.940515デフォルトの名無しさん
2013/11/08(金) 01:28:40.87おまえ本当に頭が悪いな。
begin==endだと困る関数fがあったとして
begin==endをチェックしてプログラムを落とすようになっていたとして
>>482の糞改修によって
end()でない同一のiteratorが渡されたときに
エラーチェックが発動しなくなったら困るだろ?
0516デフォルトの名無しさん
2013/11/08(金) 01:30:12.09void foo(Type begin, Type end);
の姿になってる関数は、begin==endのときは呼ばないのと同じ結果になるべき
0517デフォルトの名無しさん
2013/11/08(金) 01:31:35.23> begin==endだと困る関数fがあったとして
> begin==endをチェックしてプログラムを落とすようになっていたとして
ありえんだろ。そんな設計
0518デフォルトの名無しさん
2013/11/08(金) 01:33:03.830519デフォルトの名無しさん
2013/11/08(金) 01:34:13.25なるほど
begin==endで問題が出るようなfooちゃんなら、endがアクセスできない時もどうなるか分かったもんじゃないな
0520デフォルトの名無しさん
2013/11/08(金) 01:34:16.05そういうレアな要求があるなら、その要求に合わせて>>482で追加された関数にもチェックを入れて落とすようにすれば済むだけじゃないの?
チェック入れれば済むだけのことなのに、君は何で新たに追加された関数にチェックを絶対に入れるもんかの精神になってるんだ?
0521デフォルトの名無しさん
2013/11/08(金) 01:35:54.97そういうおかしな関数を設計する人は少数派なので、
そいつを辞めさせれば解決する問題
0522デフォルトの名無しさん
2013/11/08(金) 01:40:06.33fooの中にどんな処理があるか不明なのに
追加した呼び出し側にわざわざコピペするという方針は変だろ。
どうして「可能な限り元の挙動やセマンティクスを保持する」
ことを嫌うのか不思議。
0523デフォルトの名無しさん
2013/11/08(金) 01:41:33.12お前はさっきから何を言ってるんだ
0524デフォルトの名無しさん
2013/11/08(金) 01:44:23.29fooの仕様を知らないのにfooのラッパー関数を書けるわけがないと言っているようだが、
それならfooの仕様も知らずにそれを呼び出すコードだって書けるはずがないよな。
これから呼び出して使おうとしている関数の仕様を知らないという前提で物事考えてるのはおかしくないか?
0525デフォルトの名無しさん
2013/11/08(金) 01:45:13.82なら当然それが明記されていなければいけないわけで。。。
挙動がわけ分からんfooちゃんを「正しく」使うなど不可能だから
0526デフォルトの名無しさん
2013/11/08(金) 01:45:26.55> どうして「可能な限り元の挙動やセマンティクスを保持する」
> ことを嫌うのか不思議。
それを実現しようとした場合、どんなコードになる?
0527デフォルトの名無しさん
2013/11/08(金) 01:46:10.13レアでもないだろう。
0528デフォルトの名無しさん
2013/11/08(金) 01:48:44.70引数チェックにassert使うのはそもそも間違いなのだが。
0529デフォルトの名無しさん
2013/11/08(金) 01:54:02.36if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[v.size()]);
>>528
挙動が変わって困る例の揚げ足を取るなよ
例外スローならお気にめすのかい?
0530デフォルトの名無しさん
2013/11/08(金) 01:58:29.09そんなチェッカー付きの呼び出しをあちこちに書くくらいなら
ラッパー関数方式を採用してラッパー関数の中にチェッカー入れた方がマシだな
0531デフォルトの名無しさん
2013/11/08(金) 02:00:15.720532デフォルトの名無しさん
2013/11/08(金) 02:00:17.41なぜに?
0533デフォルトの名無しさん
2013/11/08(金) 02:00:54.47お前は>>482の関数にチェッカー入れることに対してはナンダカンダの理由付けて否定しておきながら
同じチェックを呼び出し側に入れるのは平気なんだな。
わけからんよ
0534デフォルトの名無しさん
2013/11/08(金) 02:01:20.72C++11限定だからかな
0535デフォルトの名無しさん
2013/11/08(金) 02:01:39.20サイズゼロでは使えないだろ
0536デフォルトの名無しさん
2013/11/08(金) 02:02:01.12>これから呼び出して使おうとしている関数の仕様を知らないという前提で物事考えてるのはおかしくないか?
全くおかしくない。
関数呼び出しは関数インターフェースという、
呼び出す側と呼ばれる側とのcontractによってなされるべきもので
関数の中身まで全知全能という前提は止めるべき。
0537デフォルトの名無しさん
2013/11/08(金) 02:03:35.73それは>>529のコードを否定してるわけだね
0538デフォルトの名無しさん
2013/11/08(金) 02:03:46.850539デフォルトの名無しさん
2013/11/08(金) 02:05:34.82begin==endで呼ぶとどうなるかは関数仕様の基本的な要素。
呼ぶ側がそれを知ることを全知全能呼ばわりしてはいけない。
0540デフォルトの名無しさん
2013/11/08(金) 02:05:58.31デリファレンスもないし完璧だけど、C++11だからスルー。
0541デフォルトの名無しさん
2013/11/08(金) 02:07:43.74NULLポインターを渡すことになるのでは?
fooがそういう呼び出しを許容していることが確定してるならいいけど
0542529
2013/11/08(金) 02:08:39.61>同じチェックを呼び出し側に入れるのは平気
そりゃ要素数0の時にfが何を期待してるかにクリティカルに依存するからね
もともと要素数ゼロに対応しないように見える関数だから
ちなみに>>482は要素数ゼロとbegin==endか等価ではないよ
0543デフォルトの名無しさん
2013/11/08(金) 02:12:05.00このまま流れが立ち切れる前に、ぜひ理由を教えてくれ。
外側のAPIでもない限り、使っても問題ないと思うんだが。
0544デフォルトの名無しさん
2013/11/08(金) 02:12:37.57> if ( v.empty() )
> もとのfの仕様を確認必要
> else
> foo(&v[0], &v[v.size()]);
このような呼び出し元チェックなら問題なくて、
void foo(vector<int>::iterator begin, vector<int>::iterator end)
{
if(begin==end)
もとのfの仕様を確認必要
else
foo(&*begin,&*end);
}
foo(v.begin(), v.end());
というラッパー方式は駄目だと言ってんだよな?
理由が全然分からんけど
0546デフォルトの名無しさん
2013/11/08(金) 02:16:20.43アホ確定ですね
0547デフォルトの名無しさん
2013/11/08(金) 02:16:49.370549デフォルトの名無しさん
2013/11/08(金) 02:18:16.80なんだそりゃ。
擁護してたのが馬鹿みたいだ。
0550デフォルトの名無しさん
2013/11/08(金) 02:19:57.21ゴミ書いてすまん
0551デフォルトの名無しさん
2013/11/08(金) 02:19:58.75(1)「要素ゼロ」かつ「begin!=end」
(2)「要素ゼロではない」かつ「begin==end」
のいずれがありえるの?
0552デフォルトの名無しさん
2013/11/08(金) 02:23:07.74でもって、ラッパー方式が駄目なのは、fooの仕様が分からないから
ラッパー内のチェッカーが書けるはずがないから。
0553529
2013/11/08(金) 02:25:13.92補足しておくと、482において
・f(v, v+1) のケースは問題ない
・vが要素数ゼロの時はそもそも対応していないように見えるので確認が必要
・f(v,v)は挙動が変わる
この最後のケースが問題だと言っている
0554デフォルトの名無しさん
2013/11/08(金) 02:31:27.47vの型はstd::vector<int>だよな
0555529
2013/11/08(金) 02:32:06.50544ならおk
begin==endで無条件にスルーしなければ
0556529
2013/11/08(金) 02:35:19.81紛らわしい変数名を使ったすまぬ。
↓ 訂正
>>546
補足しておくと、482において
・f(array, array+1) のケースは問題ない
・vが要素数ゼロの時はそもそも対応していないように見えるので確認が必要
・f(array, array)は挙動が変わる
この最後のケースが問題だと言っている
0557デフォルトの名無しさん
2013/11/08(金) 02:36:49.18fooは元々そういう想定なんでしょ?
0558デフォルトの名無しさん
2013/11/08(金) 02:39:56.210559デフォルトの名無しさん
2013/11/08(金) 02:47:43.19> 要素数ゼロとbegin==endが等価ではないからね
何が違うんだ?
0560デフォルトの名無しさん
2013/11/08(金) 02:51:15.65お前、520じゃねーの?
やたらと矛盾だらけに見えるんだが
0561デフォルトの名無しさん
2013/11/08(金) 02:53:50.52いやいや、その話は既に>>520で指摘されてるはずだが。
ラッパー内にチェッカーを入れれば済むだけのことだろうと。
それに対して522=529が否定してたんだよな?
0563デフォルトの名無しさん
2013/11/08(金) 02:59:20.44で、結局
(1)「要素ゼロ」かつ「begin!=end」
(2)「要素ゼロではない」かつ「begin==end」
のいずれがありえるの?
0564デフォルトの名無しさん
2013/11/08(金) 03:02:03.82> 3つ前のレスくらい読んでくれ
どこを読んでも
「要素数ゼロ」と「begin==end」が一致しない理由なんか書かれてないわけだが
0565デフォルトの名無しさん
2013/11/08(金) 03:03:46.75fの中に(同一の要素へのポインタを渡されたときに)
どんな壮大なコードがあるかもわからないのに
チェッカーを入れるだけって、、
>>563
後者だよ。
vが要素数1でも&v[0]を二つ渡せばbegin==endでしょ。
0566デフォルトの名無しさん
2013/11/08(金) 03:04:40.09vが要素数1でもv.begin()を二つ渡せば
0567デフォルトの名無しさん
2013/11/08(金) 03:06:19.24> 544ならおk
いやいや、それはおかしいだろ。
544に書かれてる「おまえはこれを否定してるわけだよな」の話はお前の今までの意見をまとめ上げたもので、
それをいきなりひっくり返したら
497以降のおまえの発言は全部自己矛盾だぞ。
0568デフォルトの名無しさん
2013/11/08(金) 03:08:01.09template <class T>
T wrapFunc( const std::function<T(T*,T*)>& func, std::vector<T>& v ){
return func( v.data(), v.data() + v.size() );
}
...
if( v.empty() )
;// 論外の話なのでスルー
else
wrapFunc<int>( foo, v );
0569デフォルトの名無しさん
2013/11/08(金) 03:08:04.59> >ラッパー内にチェッカーを入れれば済むだけ
> fの中に(同一の要素へのポインタを渡されたときに)
> どんな壮大なコードがあるかもわからないのに
> チェッカーを入れるだけって、、
ならば、どういうコードにすべき?
0570デフォルトの名無しさん
2013/11/08(金) 03:09:00.29入れねえだろ普通
0571デフォルトの名無しさん
2013/11/08(金) 03:10:21.59if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[v.size()]);
こうすればいい
0572デフォルトの名無しさん
2013/11/08(金) 03:12:31.37v[v.size()]が領域外を示してる
0573デフォルトの名無しさん
2013/11/08(金) 03:14:31.25> vが要素数1でも&v[0]を二つ渡せばbegin==endでしょ。
vの要素数は関係ない。
begin==endで渡されたら、beginとendとの間の要素数はゼロ。
if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[0]);
おまえの想定する状況はこれだ。
vの要素数を確認することに意味がないことくらい分かるだろう。
0574デフォルトの名無しさん
2013/11/08(金) 03:20:31.90> fooの中にどんな処理があるか不明なのに
> 追加した呼び出し側にわざわざコピペするという方針は変だろ。
話が枝葉に散らばってるが、発端はこの論の是非なんだろ?
で、この主張してる人が
// 良いコード例
if ( v.empty() )
もとのfの仕様を確認必要
else
foo(&v[0], &v[v.size()]);
// 悪いコード例
void foo(vector<int>::iterator begin, vector<int>::iterator end)
{
if(begin==end)
もとのfの仕様を確認必要
else
foo(&*begin,&*end);
}
foo(v.begin(), v.end());
この例でいうところの、前者は問題ないが、後者には問題あると修正してる。
これはあってるよな?
0575デフォルトの名無しさん
2013/11/08(金) 03:22:45.08ラッパー書かずに呼び出し元にチェッカー入れるのは良いこと
ということなんだろ
0576デフォルトの名無しさん
2013/11/08(金) 03:32:35.53fooの中にどんな処理があるか不明なのに
ラッパーにチェッカーをわざわざコピペするという方針は変だろ。
0577デフォルトの名無しさん
2013/11/08(金) 03:34:41.55プログラマに向いてないのでは?
0578デフォルトの名無しさん
2013/11/08(金) 04:22:21.08なんでラッパーの中でチェックすんだよ
一貫性無いだろ
0579デフォルトの名無しさん
2013/11/08(金) 04:28:10.46直接元のfooを呼ぶ場合はfooの中にあるチェッカーを利用して、
ラッパーfooを呼ぶ場合は呼び出し元が元のfooがやってるチェックをするってこと?
0580デフォルトの名無しさん
2013/11/08(金) 04:31:27.59それが正しい。
理由は>>515>>522>>536で既に書かれてるので議論の余地無し。
0581デフォルトの名無しさん
2013/11/08(金) 04:59:47.84俺もまじゃりんこしていいの?
0582デフォルトの名無しさん
2013/11/08(金) 06:51:41.57それは>>555でokと言われれるだろ
0583デフォルトの名無しさん
2013/11/08(金) 07:01:30.93要素数1でv.begin()を二つ渡すって?
じゃあ要素数がn個のときはv.begin()とv.begin()+n-1 を渡すのかよ
どんなアホがそんなことするんだ?
0584582
2013/11/08(金) 07:03:22.98スレ汚し失礼…
0585デフォルトの名無しさん
2013/11/08(金) 07:49:50.12いやあるよな
「データが1件以上あるけどfに渡したい範囲がたまたま空だった」
と
「データが1件も無い」
は別に決まってる
前者は配列版でもあり得るけど後者はvectorにしたから起こり得る
いずれにせよ前者の時の挙動を真似するコードをラッパーにコピペはいただけない
0586デフォルトの名無しさん
2013/11/08(金) 08:17:30.98俺は関数内部(原因は関数自身)の矛盾がassertで、
呼び出し側の問題は例外や戻り値が良いのではないかと思う。
0587デフォルトの名無しさん
2013/11/08(金) 08:27:22.81「空の要素数で渡すな」って約束しておけばassertでもいいだろ
あと関数内部の矛盾ってなんだよ。矛盾起こすなよ
0588デフォルトの名無しさん
2013/11/08(金) 08:52:40.09意味不明だな
0589デフォルトの名無しさん
2013/11/08(金) 17:17:57.42キチガイあらわる
0590デフォルトの名無しさん
2013/11/08(金) 19:50:38.92極端な奴だとリリースで消えることすら知らなかったりする
0591デフォルトの名無しさん
2013/11/08(金) 20:00:18.72C++なら不正な値が渡されたら未定義動作でいいと俺は思っている
0592デフォルトの名無しさん
2013/11/08(金) 20:03:10.700593デフォルトの名無しさん
2013/11/08(金) 20:30:03.21違う意味になる関数ならわざわざ名前をぶつけなくていいじゃないか
0594デフォルトの名無しさん
2013/11/08(金) 20:36:13.05アマチュア(自分)が普通気にしないような話をちゃんと書いてある本でお薦めありませんか?
言語は特にこだわりません。
スレチだったらごめんなさい。
0595デフォルトの名無しさん
2013/11/08(金) 20:39:06.860596デフォルトの名無しさん
2013/11/08(金) 20:39:26.520597デフォルトの名無しさん
2013/11/08(金) 20:45:00.230598デフォルトの名無しさん
2013/11/08(金) 20:46:43.170599デフォルトの名無しさん
2013/11/08(金) 20:52:27.540600デフォルトの名無しさん
2013/11/08(金) 21:00:38.980601デフォルトの名無しさん
2013/11/08(金) 21:02:27.860602デフォルトの名無しさん
2013/11/08(金) 21:16:06.390603デフォルトの名無しさん
2013/11/08(金) 21:17:39.09川で拾った石ころとか浜に流れ着いた木の棒とか見せられる。
そんな感じだと思った。
0604デフォルトの名無しさん
2013/11/08(金) 21:28:25.26>>602は決して極論じゃないからな
0605デフォルトの名無しさん
2013/11/08(金) 21:46:13.91typename IT::pointer iter_cast(IT it)
{
IT zero = IT();
typename VIT::pointer null(0);
return null + (it - zero); <--- A
}
std::vector<int> v;
int*p iter_cast(v.begin()):
これでイテレータをポインタに変換できると思ったら A の引き算箇所で実行時エラーになるのな。
どこまでも頑ななやつw
0606デフォルトの名無しさん
2013/11/08(金) 21:59:26.29こういうのがけっこうあるんだよなあ。
0607デフォルトの名無しさん
2013/11/08(金) 22:00:43.970608デフォルトの名無しさん
2013/11/09(土) 03:47:00.82std::vector<int*>
std::vector<void*>
がある場合、両方とも具体化されるんだよな
ポインタのサイズは固定だから余計なものが作られないようにはならんかな
0609デフォルトの名無しさん
2013/11/09(土) 04:59:58.84自分で共通ポインタ型作ればいいんじゃないの
0610デフォルトの名無しさん
2013/11/09(土) 05:10:56.610611デフォルトの名無しさん
2013/11/09(土) 05:30:39.32からg.txtを抜き出そうとしましたが泥臭いやりかしか出来ません・・・
std::string str = "a:\\b\\c\\d\\e\\f\\g.txt";
std::string::iterator itr,itrFound;
itrFound = str.begin();
while((itr = std::find(itrFound+1,str.end(),'\\')) != str.end())
itrFound = itr;
std::string s(itrFound+1,str.end());
カッコいいやり方はありませんか?
vs2008です
0612デフォルトの名無しさん
2013/11/09(土) 05:51:03.270613デフォルトの名無しさん
2013/11/09(土) 07:01:32.67std::cout << p.filename();
0614片山博文MZコスモ ◆T6xkBnTXz7B0
2013/11/09(土) 08:05:12.08ただし、Shift_JISのようなマルチバイト文字列だと\問題が起こって使えない
0615デフォルトの名無しさん
2013/11/09(土) 13:24:32.020616デフォルトの名無しさん
2013/11/09(土) 13:34:40.54static const std::regex re("[^\\\\]+$");
std::string s;
std::smatch m;
if (std::regex_search(str, m, re)) {
s.assign(m[0].first, m[0].second);
}
0617デフォルトの名無しさん
2013/11/09(土) 13:54:35.030618デフォルトの名無しさん
2013/11/09(土) 14:10:57.520619デフォルトの名無しさん
2013/11/09(土) 14:20:23.20変数から遠い順に型なんです
int a[3][4]
これは
int (a[3][4])
えーと、a[][]に該当するのがint型なんです
続いて
int (a[3])[4]
えーと、a[]に該当するのは、intが4つ並んだ配列という型なんです
続いて
int (a)[3][4]
えーと、aに該当するのは、「intが4つ並んだ配列」が3つ並んだ配列という型なんです
0620デフォルトの名無しさん
2013/11/09(土) 14:23:29.31a[y=0][x=0],a[y=0][x=1]
の順に並んでいく
0621デフォルトの名無しさん
2013/11/09(土) 14:39:27.63関数に渡すときに一貫性がなくなるから。
0622デフォルトの名無しさん
2013/11/09(土) 16:54:50.50同一内容関数を複数のシンボルで共有するって最適化が掛かってれば消えるな。
型に依存する定数や関数を参照してたら多分消せないけど、そういうのが無い部分はOK。
昔から存在してる最適化だし今でも有効だろ。
0623デフォルトの名無しさん
2013/11/09(土) 17:26:23.78if(v.end() == std::find(v.begin(),v.end(),elem))
{
v.push_back(elem);
}
if()の中身長くなりすぎじゃね
なんとかならんかったのか
0624デフォルトの名無しさん
2013/11/09(土) 17:33:42.90v.push_back(elem);
0625デフォルトの名無しさん
2013/11/09(土) 17:40:40.900626デフォルトの名無しさん
2013/11/09(土) 17:42:01.07if (elem == v.end())
v.push_back(elem)
}
0627デフォルトの名無しさん
2013/11/09(土) 17:42:42.13そのコストが気になるなら別のやり方するでしょ
0628デフォルトの名無しさん
2013/11/09(土) 17:45:35.70そのforはなんか落ち着かないわ今でも
0629デフォルトの名無しさん
2013/11/09(土) 18:03:51.16algorithmなんて大層な名前ついてるのにO(n)なの?
0630デフォルトの名無しさん
2013/11/09(土) 18:04:54.17すごい簡単なことしてるだけだからな
0631デフォルトの名無しさん
2013/11/09(土) 18:09:29.36そんくらいならvectorに入れておいてくれよ・・・
0632デフォルトの名無しさん
2013/11/09(土) 18:11:57.330633デフォルトの名無しさん
2013/11/09(土) 18:15:27.58外でできることは外でやるポリシー?
0634デフォルトの名無しさん
2013/11/09(土) 18:21:32.87そうしたらコードが重複して無駄になるし、コードを修正するときにほかのコンテナに組み込んだソースも修正しなきゃならん
>>633は便利だからってクラスに機能詰め込んで一つのクラスが膨れ上がってるんじゃないか?
0635デフォルトの名無しさん
2013/11/09(土) 18:23:05.56おんなじ実装がlistやその他 iterator と operator== 装備してるクラスで使えるから
メンバにする理由がない
0636デフォルトの名無しさん
2013/11/09(土) 18:30:25.520637デフォルトの名無しさん
2013/11/09(土) 18:39:33.49thx
0638デフォルトの名無しさん
2013/11/09(土) 18:51:20.11>ほかのコンテナにもないと
なんで?普通にlistにあってvectorにないメソッドとかあるよね?
>>635
あーなるほど
しかしなんか釈然としないな
>>636
逆じゃね?
0639デフォルトの名無しさん
2013/11/09(土) 18:55:31.630640デフォルトの名無しさん
2013/11/09(土) 19:06:54.320641デフォルトの名無しさん
2013/11/09(土) 19:07:46.07アルゴリズムがM種類、コンテナがN種類存在するとき、それぞれのコンテナに全てのアルゴリズムを実装すると全部でM*N種類の実装が発生するが、コンテナとアルゴリズムの間にイテレータを挟むことで実装個数をM+N個まで削減することが出来る
たしかに list のソートとか別にあるね
0643デフォルトの名無しさん
2013/11/09(土) 23:17:50.84std::stable_sort()の必要要件がRandomAccessIteratorだからメンバ関数で持つ必要があったわけね
0644デフォルトの名無しさん
2013/11/10(日) 12:44:33.44<algorithm>の方を特殊化で対応するわけにはいかなかったんだろうか?
0645デフォルトの名無しさん
2013/11/10(日) 13:06:59.580646デフォルトの名無しさん
2013/11/10(日) 15:19:51.22イテレータに+−じゃ駄目なの?
0647デフォルトの名無しさん
2013/11/10(日) 15:26:11.99std::advanceは、引数がランダムアクセスイテレータならば直接加減算、その他の場合はループで進めてくれる便利な関数である
0648デフォルトの名無しさん
2013/11/10(日) 15:38:31.540649デフォルトの名無しさん
2013/11/10(日) 15:49:42.00http://ideone.com/0sXVPn
イテレータに対してどのような操作が出来るかをイテレータカテゴリとして標準は規定しているので、それを調べると良い
http://en.cppreference.com/w/cpp/iterator (英語)
0650デフォルトの名無しさん
2013/11/10(日) 15:50:12.980651デフォルトの名無しさん
2013/11/10(日) 18:13:05.64ばーか
0652デフォルトの名無しさん
2013/11/10(日) 22:15:29.90> <algorithm>の方を特殊化で対応するわけにはいかなかったんだろうか?
listのsortはコンテナ内のノードのリンクに対する変更であって格納されてる値そのものは変更されない
(なので(あまり意識されてなかったけど)コピー(・ムーブ共に)不可のクラスのlistでもsortできる)
一方algorithmのsortはイテレータの参照先の値そのものを変更するところがlistのsortと根本的に違う
そのためalgorithmのsortの作法に従うと特殊化してもlistのsortの利点を無くすし
listのsortの利点を残すためには加えてイテレータの高機能化が必要だけどそれは結果に対してコスト他で割に合わない
といった理由がある
0653デフォルトの名無しさん
2013/11/11(月) 00:04:26.40ゆとりはプログラム組む前に勉強しろ
0654デフォルトの名無しさん
2013/11/11(月) 00:06:55.86なんかオススメの書物くれ
0655デフォルトの名無しさん
2013/11/11(月) 00:07:57.040656デフォルトの名無しさん
2013/11/11(月) 00:37:01.450657デフォルトの名無しさん
2013/11/11(月) 00:42:05.330658デフォルトの名無しさん
2013/11/11(月) 01:04:37.68データ構造とアルゴリズムが勉強じゃなけりゃ何が勉強なんだろう・・・
しっかり学として学ばないとすぐに迷信に堕ちるぞ
0659デフォルトの名無しさん
2013/11/11(月) 02:08:11.700660デフォルトの名無しさん
2013/11/11(月) 07:07:34.74いや数日で終わるようなことを「ちゃんと勉強」というのかってこと
0661デフォルトの名無しさん
2013/11/11(月) 07:10:40.17ぐぬぬ・・・
0662デフォルトの名無しさん
2013/11/11(月) 14:08:32.970663デフォルトの名無しさん
2013/11/11(月) 20:40:43.08「確率・統計の基礎をおさえとかなきゃ・・・」
0664デフォルトの名無しさん
2013/11/12(火) 20:05:15.09それぞれ全く別の画面を表示させて処理をするようなシステムを作っています。
規模的にはそんなに大きくはないのですが、
機能は全く別なので、それぞれdllにして分けた方がいいのでしょうか?
また、分けるならそれぞれのdllでシングルドキュメントの実装ができればと思っているのですが、可能でしょうか?
ダイアログベースでもいいのですが、なかなか融通が利かなくて
使いづらいというか、win32でやってた方がやりやすいような気がするのですが、
ダイアログベースのうまい使い方とかあれば是非教えていただきたいです。
0665デフォルトの名無しさん
2013/11/12(火) 20:27:26.87外装ごとにdllつくるってなんか違う気がする
0666デフォルトの名無しさん
2013/11/12(火) 21:12:33.230667デフォルトの名無しさん
2013/11/12(火) 21:20:49.290668デフォルトの名無しさん
2013/11/12(火) 21:25:04.32彼がコンパイラを作ったって意味?
彼作のコンパイラなんて見かけないですが・
0669デフォルトの名無しさん
2013/11/12(火) 21:27:24.160670デフォルトの名無しさん
2013/11/12(火) 21:59:12.890671デフォルトの名無しさん
2013/11/12(火) 23:57:26.54C,C++は朝鮮人のhogeという奴が作った。覚えとくように
0672デフォルトの名無しさん
2013/11/13(水) 00:02:20.72ハァ?C++はデンマーク人のhageなhigeが作ったんだよ。忘れんな
0673デフォルトの名無しさん
2013/11/13(水) 07:49:28.00hageなhigeを専門用語でhogeというんだよ
0674デフォルトの名無しさん
2013/11/13(水) 08:16:52.57連鎖あぼーんに参加
0675デフォルトの名無しさん
2013/11/13(水) 08:19:59.77俺も混ぜてくれ
0676デフォルトの名無しさん
2013/11/13(水) 08:28:14.17連鎖すげー
何連鎖だよ
0677デフォルトの名無しさん
2013/11/13(水) 08:44:24.68ばよえーん
0678デフォルトの名無しさん
2013/11/13(水) 12:33:36.91ありゃりゃ
0679デフォルトの名無しさん
2013/11/13(水) 14:27:52.49ばたんきゅー
0680デフォルトの名無しさん
2013/11/13(水) 14:40:21.12::TerminateThread(hoge, 0);
0681デフォルトの名無しさん
2013/11/13(水) 16:14:19.770682デフォルトの名無しさん
2013/11/13(水) 19:57:12.18g++: fatal error: no input files
compilation terminated.
って言われたんですが、ubuntuでg++でc++11をコンパイルするにはどうすればいいんですか?
0683デフォルトの名無しさん
2013/11/13(水) 20:01:26.01はあ?
他人でも再現できるように説明しろよ
0684デフォルトの名無しさん
2013/11/13(水) 20:02:39.80今のubuntuでc++11ならg++は使わないよ
clang++だよ
>>680
std::thread(hoge,"hoge");
0685デフォルトの名無しさん
2013/11/13(水) 20:17:30.63解決しましたありがとうごさいます
0686デフォルトの名無しさん
2013/11/13(水) 20:46:38.29...
#define far
#define near
...
なんなんだよおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
0687デフォルトの名無しさん
2013/11/13(水) 21:18:16.16CViewクラスのOnCreateで
CComboBox *combo = new CComboBox();
combo->Create(WS_VISIBLE, CRect(0, 0, 100, 20), this, ID);
として生成してるんですが、
CRectの値を変えても、SetWindowPosしても、MoveWindowしても変えれなくて、
BS_OWNERDRAWを設定してOnMeasureItemでitemHeightの値を設定しても全然高さが変わってくれません…
他のエディットテキストやスタティックテキスト等のコントロールより高さが微妙に高くて
見た目が悪いのでスマートな細さにしたいんですが、何か方法はないですか?
ちなみにフォントも小さくしてみたのですが、変化が無くどうしたらいいのやらさっぱりです…
0688デフォルトの名無しさん
2013/11/13(水) 21:43:09.91Win16の名残
多くのポインタ類にNearとFarの区別があった
0689デフォルトの名無しさん
2013/11/13(水) 21:48:16.41コンボボックスの中にエデットコントロールがある
0690デフォルトの名無しさん
2013/11/13(水) 21:50:00.54・解放する必要のある資源をひとつも持っていない。
・他で発生した例外に巻き込まれている渦中においては、自身のデストラクタで例外を投げることは決してない。
0691デフォルトの名無しさん
2013/11/13(水) 21:51:03.950692デフォルトの名無しさん
2013/11/13(水) 21:52:31.75初めて知った
0693デフォルトの名無しさん
2013/11/13(水) 22:03:18.34中にエディットコントロールとはどういう事ですか?
そのエディットコントロールの高さも変えないとコンボボックスの高さも変わらないってこと?
0694デフォルトの名無しさん
2013/11/13(水) 22:13:03.62ISO/IEC 14882の1998,2003,2011のいずれにも
STLなどというものは登場しませんが
何のことを言っているの?
0695デフォルトの名無しさん
2013/11/13(水) 22:17:39.56子ウィンドウになってる
GetWindow
CBEM_GETEDITCONTROL
0696デフォルトの名無しさん
2013/11/13(水) 22:36:54.88682が何のことを言っているのかは確かに分らんわ
0697デフォルトの名無しさん
2013/11/13(水) 22:44:45.61int b[N];
とサイズの等しい配列が2つあった場合、それぞれの配列の合計を算出したい場合
std::accumulate(a,
std::accumulate(b,
と後輩が書きやがりました。あたかもC++知ってますと言わんばかりに・・・
for
{
suma +=
sumb +=
}
としたほうが、ループを1回しか回らないので明らかに速いと思うのですが
どう思われますか?
VS2008(2010以降ではありません)
0698デフォルトの名無しさん
2013/11/13(水) 22:46:23.14あんま変わらんと思うけど
0699デフォルトの名無しさん
2013/11/13(水) 22:49:16.61見さすさや保守性、バグの起きにくさ、要求仕様との対比
まで考慮した上で速けりゃいいかどうかは
別だとは思うけど。
0700デフォルトの名無しさん
2013/11/13(水) 22:52:32.600701デフォルトの名無しさん
2013/11/13(水) 22:53:11.14計測する必要はないでしょ
前者のほうが速いなんてことはありえない
ループを倍回るし、呼び出しのオーバーヘッドもあるし
0702デフォルトの名無しさん
2013/11/13(水) 22:55:39.10intの足し算なんて量が多けりゃ読み出しが追い付かないし
少なけりゃ速度を気にする必要はない
0703デフォルトの名無しさん
2013/11/13(水) 22:59:59.39>呼び出しのオーバーヘッド
えっ?
0704デフォルトの名無しさん
2013/11/13(水) 23:02:22.352回に分けたほうが速いってことは無いんかな
0705デフォルトの名無しさん
2013/11/13(水) 23:03:57.330706デフォルトの名無しさん
2013/11/13(水) 23:06:11.100707デフォルトの名無しさん
2013/11/13(水) 23:07:11.58例外を投げるデストラクタはいかなる場合でも許されない
ってじっちゃが言ってた。
0708デフォルトの名無しさん
2013/11/13(水) 23:07:39.03インラインとか関数オブジェクトとか無い世界から来たんだろう
0709デフォルトの名無しさん
2013/11/13(水) 23:08:25.74この例でキャッシュヒット率は同じ筈
0710デフォルトの名無しさん
2013/11/13(水) 23:10:51.18昔Cは遅いからアセンブラでって言ってた人思い出したわ
0711デフォルトの名無しさん
2013/11/13(水) 23:16:42.36for (
suma += a[i];
sumb += b[i];
}
のa[i]とb[i]は必ずメモリ上遠い位置にあるだろう。
すべてのiについて毎回そうなるけど、そうなるとどうなるんだろ?
0712デフォルトの名無しさん
2013/11/13(水) 23:18:09.89インラインはそう保証されてないだろ?
関数オブジェクトは呼び出しコストの話とは関係ないし。
0713デフォルトの名無しさん
2013/11/13(水) 23:25:06.51本当に関係ないのかな?
0714デフォルトの名無しさん
2013/11/13(水) 23:31:52.14「お前テレビ買ってきたようだが映らない可能性はゼロではない」
ぐらいの言いがかり
0715デフォルトの名無しさん
2013/11/13(水) 23:33:24.96計測すればいいだけ。
0716デフォルトの名無しさん
2013/11/13(水) 23:36:52.62ttp://codepad.org/jDnOTDt3
VS2013Express
最大限の最適化/Ox 64bitバイナリ
結果
test1 : 504 test2 : 559
test1 : 450 test2 : 574
test1 : 574 test2 : 543
test1 : 492 test2 : 535
test1 : 483 test2 : 526
だいたいforの方が1割ぐらい早いかな
0717デフォルトの名無しさん
2013/11/13(水) 23:38:01.11それは処理するデータの量と実行環境で簡単に逆転するから半分ウソ
基本は記述性を優先
0718デフォルトの名無しさん
2013/11/13(水) 23:43:27.64意味が明確でコードがコンパクトだし速度重視でなければそれも良いと思うけど、
デバッグビルドでインライン展開とか最適化とか積極的に掛けるかというと微妙。
末尾最適化もそうだけど、そういう設定が適用される前提が共有できない状況で最適化に頼るコードに太鼓判押す奴はクソだと思う。
「(末尾最適化・インライン展開が有効なコンパイラ・コンパイルオプションならば)」って前提も無くそれに頼るなと。
頼るなら明示しろ。
0719デフォルトの名無しさん
2013/11/13(水) 23:43:36.68全く無関係
0720デフォルトの名無しさん
2013/11/14(木) 00:04:49.59そんなこたあない。
なぜ普通はダメなのか考えれば、それにあてはまらないパターンがあることもわかるはず。
0721デフォルトの名無しさん
2013/11/14(木) 00:06:17.16実際にインライン展開されるかどうかは保証されてないよ
0722デフォルトの名無しさん
2013/11/14(木) 00:38:32.670723デフォルトの名無しさん
2013/11/14(木) 00:51:37.21C++はCに比べて遅いからな
だから、いまでもC++よりCがたくさん使われるんだよな
0724デフォルトの名無しさん
2013/11/14(木) 00:58:11.570725デフォルトの名無しさん
2013/11/14(木) 01:03:32.49C++コンパイラだけど
0726デフォルトの名無しさん
2013/11/14(木) 03:28:27.150727デフォルトの名無しさん
2013/11/14(木) 09:43:47.300728デフォルトの名無しさん
2013/11/14(木) 18:56:41.27調子に乗った奴がクソコードを書かないよう
「Cの範囲で」とガードをかけるのが吉。
それ以外にCの存在意義はない。
0729デフォルトの名無しさん
2013/11/14(木) 18:59:27.800730デフォルトの名無しさん
2013/11/14(木) 18:59:33.37ほかの言語に触ったことない人なのかな
0731デフォルトの名無しさん
2013/11/14(木) 19:03:16.05> C++は言語仕様が大きすぎるので
そんな頭弱いこという子に用はありません
0732デフォルトの名無しさん
2013/11/14(木) 19:04:18.45でかいし掴みどころがない
あとiostreamは失敗作。ノータッチで
0733デフォルトの名無しさん
2013/11/14(木) 19:10:32.02どうすればコンピュータサイエンスの真髄をあんなグロい表記に出来るのだ
0734デフォルトの名無しさん
2013/11/14(木) 19:14:24.130735デフォルトの名無しさん
2013/11/14(木) 19:14:29.17なんでも突っ込めるし
ラムダはもう慣れたわ
0736デフォルトの名無しさん
2013/11/14(木) 19:23:16.920737デフォルトの名無しさん
2013/11/14(木) 19:59:44.30エディットコントロールを取得することはできたんですが、
エディットコントロールとコンボボックスをいじってみても高さを変えることができません
あれこれ調べてはみてるのですが、プルダウンの高さを調整する方法しか出てこなくて…
0738デフォルトの名無しさん
2013/11/14(木) 20:07:51.90SetItemHeight のインデックス(-1)は試した?
0739デフォルトの名無しさん
2013/11/14(木) 20:10:38.470740デフォルトの名無しさん
2013/11/14(木) 20:14:29.72はい、-1を指定してもかわらなくて、
0を指定するとプルダウンしたときのリストの幅が狭くなりました。
SDIで動的に生成しているのですが、ダイアログベースじゃないと変更できないんでしょうか?
試しにフォントをかなり小さくしたりして試してみたのですが、全然小さくなりませんでした
出来ればエディットやスタティックと同じ20位に統一したいのですが、どうやっても25くらいの高さになってしまいます…
0742デフォルトの名無しさん
2013/11/14(木) 20:42:40.26逆転したのも興味深いけど
最近の話題をそこはかとなく混ぜてくるセンス嫌いじゃない
0743デフォルトの名無しさん
2013/11/14(木) 23:41:04.08とどのつまりどっちがいいのかしらん
0744デフォルトの名無しさん
2013/11/15(金) 02:09:30.59結論としては、記述性と可読性が最優先。
パフォーマンスは全体を計測してみてネックと思われる部分を集中的に手当てするの正解。
0745デフォルトの名無しさん
2013/11/15(金) 05:34:35.14>>697は老害と言われないよう肝に銘じておけ
0746デフォルトの名無しさん
2013/11/15(金) 05:43:49.19お仕事なら干されるけどね
0747デフォルトの名無しさん
2013/11/15(金) 09:35:11.630748デフォルトの名無しさん
2013/11/15(金) 12:07:27.02真性バカの隠れ蓑であることにも注意が必要
どんなに小手先の最適化をしても
全体的な構成がおバカでは際限ないイタチごっことなる
システム全体を広く深く洞察できる高スキルな人にとっての
記述性・可読性は、真性バカの主張とは大きくずれる
0749デフォルトの名無しさん
2013/11/15(金) 15:38:28.450750デフォルトの名無しさん
2013/11/15(金) 16:46:36.94濃いこと言おうぜ
0751デフォルトの名無しさん
2013/11/15(金) 19:09:22.21レスが自己言及かってぐらい長すぎだろ
0752デフォルトの名無しさん
2013/11/15(金) 19:21:45.10抽象化が大事だぜ
0753デフォルトの名無しさん
2013/11/15(金) 19:55:41.65使いずらくてかなわんな…
CDatabaseとかCListとか関数の戻り値にしたいんだが
cobject::cobject 〜 private でアクセスできませんとかで、ポインタじゃないと戻り値にできないいんだが、
MFCってみんなこんななの?
C#だとコンボボックスにオブジェクト入れれるんだけど
テキストしかセットできないし…
まぁコンボボックスは継承して自分でオブジェクト入れれるようにできればいいんだけど、
cobject〜ってのがよくわからん
関数内で
CList<hoge> fuga;
return fuga;
ってできないのは何故?
0754デフォルトの名無しさん
2013/11/15(金) 20:04:01.17C#だけの知識でC++使うのは相当に厳しい
来週からなんて無理
0755デフォルトの名無しさん
2013/11/15(金) 20:13:16.68どうせアホなことしてるだけだろうけど
0756デフォルトの名無しさん
2013/11/15(金) 20:14:22.74いわゆるポインタがわかってない人ですかい
0757デフォルトの名無しさん
2013/11/15(金) 20:45:05.96&つけて参照にできるけど ポインタで統一したほうが楽かなぁ
0758デフォルトの名無しさん
2013/11/15(金) 20:47:46.360759デフォルトの名無しさん
2013/11/15(金) 20:52:44.280760デフォルトの名無しさん
2013/11/15(金) 20:54:24.42参照型とかJava脳用語はやめてくれ‥‥
0761デフォルトの名無しさん
2013/11/15(金) 20:57:40.26C++は少しはやったことあるんだけど
確かに分かってるとは言えないレベルです・・・
ポインタは少しは理解してるつもりなんですが、
戻り値にポインタってあまり使わないと思うんだけど、
c++はそれが普通ってこと?
>>755
アホなことはしてないと思いたいんだけど、関数内で
struct hoge {
int a;
};
hoge xxx;
xxx.a = 1;
CList<hoge> fuga;
fuga.AddTail(xxx);
return fuga;
ってな具合で処理してるっていっても例に挙げたくらい簡単なものにしても
cobject::cobject〜ってなるんです
ネットで調べたりしてみてはいるんだけど、
とくに小難しいことはしてないのになぜエラーになるのかいまいちわかりません
APIとか見てもポインタの戻り値ってあまりないと思うんだけど、
積極的に使ってもいいものなの?
0762デフォルトの名無しさん
2013/11/15(金) 21:00:06.820763デフォルトの名無しさん
2013/11/15(金) 21:09:30.37十年早い
0764デフォルトの名無しさん
2013/11/15(金) 21:13:09.82明示的に & を付けるか ポインタにするか
0765デフォルトの名無しさん
2013/11/15(金) 21:13:45.34何で関数内にstructがあるんだよ
0766デフォルトの名無しさん
2013/11/15(金) 21:25:10.79参照型にできないとか見当はずれにも程がある。
0767デフォルトの名無しさん
2013/11/15(金) 21:33:54.40>戻り値にポインタってあまり使わないと思うんだけど、
>c++はそれが普通ってこと?
誤解を恐れずに言うが、C#やJavaのオブジェクト型はポインタだよ。
だからMFCでの書き方は、普通のC++よりはC#に近いはずだよ。
C++では確かに戻り値にポインタは使わないけど、
それはJavaやC#のいわゆる「参照型」ですらない。
たぶん全然理解できずに言ってると思う。仕様を疑ってる場合じゃない。
0768デフォルトの名無しさん
2013/11/15(金) 21:45:03.92え??
0769デフォルトの名無しさん
2013/11/15(金) 21:48:43.030770デフォルトの名無しさん
2013/11/15(金) 21:49:18.07誤解しか産まないんですがそれは
0771デフォルトの名無しさん
2013/11/15(金) 21:51:21.01どうやったらそこまでアホになれるんだよ
0772デフォルトの名無しさん
2013/11/15(金) 21:54:41.23基本的に引数で参照を受け取るし、
戻り値で返す場合でも値のが多いよ。
ポインタ扱う場合でもスマポ=値型で返すでしょ。
0773デフォルトの名無しさん
2013/11/15(金) 21:55:58.87うーん、この
0774デフォルトの名無しさん
2013/11/15(金) 21:56:37.32struct T x,y; のとき、x=y; として、y をいじると、それでももとのxは不変なんだよ
C++のクラスでも同様。下手にx=y; 式のことをやると、
ポインタが紛れ込んでるとカオスになる
Javaぽくやるなら、struct T &x,y; x=y;
などと、最近やっとJavaの本を安く ぶくおくで買って読んでいる俺が供述しており
0775デフォルトの名無しさん
2013/11/15(金) 21:57:53.05言いたい事があるならはっきり言いなよ。
0776デフォルトの名無しさん
2013/11/15(金) 21:59:43.36でも皆さんの意見は大変勉強になります
structは関数の外で定義してます。分かりずらい書き方してすみません
>>767
確かにそういわれてみればC#に近い気がする
c++だとガベージコレクションがないから
newすることに気を使いすぎているのかもしれません…
関数でデータベースから値をとってきて返したいのですが、
戻り値の型を気にしてしまって
配列にすればいいのかコレクションにすればいいのか
配列に限らず汎用的な戻し方ってのは何に気を付ければいいんですか?
0777デフォルトの名無しさん
2013/11/15(金) 22:00:43.090778デフォルトの名無しさん
2013/11/15(金) 22:02:54.59つっこみどころ多すぎて、どこから手をつければよいやら・・・
0779デフォルトの名無しさん
2013/11/15(金) 22:03:14.76ウンコウンコうるせえ
0780デフォルトの名無しさん
2013/11/15(金) 22:05:04.59>>776
1.CListなんぞ捨ててstd::list使う
2.どうしてもCListを使わなければならないなら、CListの実態は呼ぶ側で作ってもらって、引数でそのCListを参照渡しして、それに要素を詰め込む。
0781デフォルトの名無しさん
2013/11/15(金) 22:05:55.27コピーコンストラクタ禁止って、デフォルト以外も?
どんな環境よ。
0782デフォルトの名無しさん
2013/11/15(金) 22:07:23.55return fuga;
はい、できました。解決。終わり終わりw
0783デフォルトの名無しさん
2013/11/15(金) 22:07:33.16実行モジュールのコンパクトさも利点だよ。
大量に、スレッドとかプロセス生成したり、頻繁に破棄と生成繰り返すようなときは、最近のサーバーでも負荷が変わってくる。
0784デフォルトの名無しさん
2013/11/15(金) 22:12:32.70何と戦ってるんだ?
0785デフォルトの名無しさん
2013/11/15(金) 22:13:17.040786デフォルトの名無しさん
2013/11/15(金) 22:39:17.960787デフォルトの名無しさん
2013/11/15(金) 22:44:33.130788デフォルトの名無しさん
2013/11/15(金) 22:49:24.010789デフォルトの名無しさん
2013/11/15(金) 22:50:06.54> cobject::cobject 〜 private でアクセスできませんとかで、
の日本語が理解できるな。
さっぱり意味が分からん
0790デフォルトの名無しさん
2013/11/15(金) 22:52:49.120791デフォルトの名無しさん
2013/11/15(金) 23:04:43.25noncopyableのエラーじゃね
shared_ptr使えばいいだけ
0792デフォルトの名無しさん
2013/11/15(金) 23:22:44.52boost入れるのも環境によってはハードルあるし。
0793デフォルトの名無しさん
2013/11/15(金) 23:31:45.77今手元にexpressしかないからわからん。
ところでshared_ptrやunique_ptrとMFCて排他的な関係でもあんの?
0794デフォルトの名無しさん
2013/11/15(金) 23:35:07.37STL禁止でMFCしか使えないのか
MFCでI/F組むことが強制されているのか
単にMFC言われて思考停止してるのか
それによって何を学ぶべきかが変わる
0795デフォルトの名無しさん
2013/11/15(金) 23:35:50.65>>791
コピーコンストラクタがprivateなやつをどうやってuniqueやらshared_ptrにするんだ
0796デフォルトの名無しさん
2013/11/15(金) 23:57:26.60はい
0797デフォルトの名無しさん
2013/11/16(土) 00:02:57.33おまえは何を言ってるんだ
0798デフォルトの名無しさん
2013/11/16(土) 00:09:13.980799デフォルトの名無しさん
2013/11/16(土) 00:28:12.920800デフォルトの名無しさん
2013/11/16(土) 00:38:37.23kwsk(死語)
0801デフォルトの名無しさん
2013/11/16(土) 00:41:39.990802デフォルトの名無しさん
2013/11/16(土) 00:42:20.990803デフォルトの名無しさん
2013/11/16(土) 00:49:20.52さらに仮想関数や継承禁止、挙句に最適化なしまで入(ry
0804デフォルトの名無しさん
2013/11/16(土) 00:58:32.98個人的な優先順位は、
STL > 継承=仮想関数 > 例外 > RTTI
かなあ・・・
0805デフォルトの名無しさん
2013/11/16(土) 01:00:15.40っつうかC使えよ
って言えないのか
0806デフォルトの名無しさん
2013/11/16(土) 01:02:41.62コピコン禁止、代入禁止、コンストラクタprivate
メソッドがひとつだけ
ってクラスが今のお気に入りw
0807デフォルトの名無しさん
2013/11/16(土) 01:42:23.21try catchが事実上対応してなくて TRY CATCHとかいうマクロで代用させられるようなシロモノだぞ
0808デフォルトの名無しさん
2013/11/16(土) 01:44:08.00馬鹿
0809デフォルトの名無しさん
2013/11/16(土) 01:58:13.03どうやってコンパイル通すか教えてくれ
バカだから分からん
http://ideone.com/LX0Wof
0810デフォルトの名無しさん
2013/11/16(土) 02:10:21.160811デフォルトの名無しさん
2013/11/16(土) 02:16:06.27馬鹿すぎワロタw unique_ptr以前に生成自体ができてねーよw
ideone.com/WBhLx0
ideone.com/EZkOCB
0812デフォルトの名無しさん
2013/11/16(土) 02:24:51.20おおう、ありがとう
1から勉強します
0813デフォルトの名無しさん
2013/11/16(土) 02:25:47.15Rangeをvectorのconst_iterator型へ変換する時に、
template <class Range>
struct v_it {
typedef typename vector<typename Range::value_type>::iterator type;
};
v_it<set<int>>::type it;
こっちはいけて
template <class Range>
auto f_v_it(Range &&r)
-> vector<typename Range::value_type>::const_iterator;
decltype(f_v_it(set<int>())) it;
こっちはいけない
error: expected type-specifier
って言われる、型は合ってるだけにエラーを見ても原因が分からん・・・
0814デフォルトの名無しさん
2013/11/16(土) 02:27:10.95itratorの方がタイプ数少なかったんで変更したんだけどここだけ変え忘れてた
0815デフォルトの名無しさん
2013/11/16(土) 02:31:11.53template <class Range>
auto f_v_it(const Range &r)
-> typename vector<typename Range::value_type>::const_iterator;
decltype(f_v_it(set<int>())) it2 = vector<int>().cbegin();
typename抜けてただけだったんだぜ☆
0816デフォルトの名無しさん
2013/11/16(土) 08:51:47.51例外が使えないコンパイラだろ。
そういうコンパイラ向けにstlもどきのフリーのライブラリがあるから
それ使えばいいわけで。
0817デフォルトの名無しさん
2013/11/16(土) 09:44:13.29例外が使えないC++コンパイラなんてあるの?遭遇したことないんだけど。
0818デフォルトの名無しさん
2013/11/16(土) 10:36:33.63大抵は過去に別のプロジェクトで事故って、プログラムをよくわかんない人がそれを参考にしたとか。コピペしたとかそんなんじゃないかと思う。
あとは、いろんなOSに移植すること前提とか。
0819815
2013/11/16(土) 11:19:59.910820デフォルトの名無しさん
2013/11/16(土) 12:06:20.43AndroidのNDKとか初期は例外が使えなかったとかなんとか
0821デフォルトの名無しさん
2013/11/16(土) 13:06:58.85コンパイラ自体じゃなくて、例外をサポートするためのランタイム環境が整備されていないRTOSが昔は多かった
0822デフォルトの名無しさん
2013/11/16(土) 13:23:41.530823デフォルトの名無しさん
2013/11/16(土) 19:01:55.99STL禁止じゃC++使う意味ないな。だから今でも組み込みはCなんだろな
小メモリのワンチップマイコンなんかでは、最大使用メモリの管理
が大変とかでnewなんかも禁止なんかな。
富豪的プログラミングだとゆとり言語が使えていいよな
0824デフォルトの名無しさん
2013/11/16(土) 19:12:21.00だから何でそんなに飛躍するんだよ
0825デフォルトの名無しさん
2013/11/16(土) 19:22:20.940826デフォルトの名無しさん
2013/11/16(土) 19:24:37.78C++の強さは、既にあるSTLが使えることではなくて、
STLのようなライブラリでさえも、
欲しけりゃ自分でゼロから作り込むことが出来るところにあるんだよ。
0827デフォルトの名無しさん
2013/11/16(土) 19:25:07.580828デフォルトの名無しさん
2013/11/16(土) 19:45:42.090829デフォルトの名無しさん
2013/11/16(土) 19:47:57.030830デフォルトの名無しさん
2013/11/16(土) 19:54:53.550831デフォルトの名無しさん
2013/11/16(土) 20:02:17.460832デフォルトの名無しさん
2013/11/16(土) 20:06:07.090833デフォルトの名無しさん
2013/11/16(土) 20:40:35.220834デフォルトの名無しさん
2013/11/16(土) 21:02:15.05しかも安くてデバッグ用機能もバッチリ
組み込みでもC++を避ける理由なんて最早ないわ
0835デフォルトの名無しさん
2013/11/16(土) 21:07:02.71http://ideone.com/JdEveI
同じコードをVC2010でやってみると、エラーにならずに"catch destructor"が
出力されるんだけど、ideone.の方は
stderr
terminate called after throwing an instance of 'char const*'
になってしまう。
0836デフォルトの名無しさん
2013/11/16(土) 21:24:58.970837デフォルトの名無しさん
2013/11/16(土) 21:25:54.46あんたのこーどがあほです
0838デフォルトの名無しさん
2013/11/16(土) 21:36:16.210839デフォルトの名無しさん
2013/11/16(土) 21:37:51.71具体的品名は?
0840デフォルトの名無しさん
2013/11/16(土) 21:39:11.400841デフォルトの名無しさん
2013/11/16(土) 22:31:19.40使える環境だってあるだろ
0842デフォルトの名無しさん
2013/11/16(土) 23:21:19.090843デフォルトの名無しさん
2013/11/16(土) 23:37:57.11やっちゃダメってことをわざとやってるようだけど?
0844デフォルトの名無しさん
2013/11/16(土) 23:38:59.66定義上はそれは間違い
0845デフォルトの名無しさん
2013/11/16(土) 23:49:07.450846デフォルトの名無しさん
2013/11/17(日) 00:03:49.18OSの載せないような環境ならコンパイラあってもC++なんか使わない
0847デフォルトの名無しさん
2013/11/17(日) 00:06:02.990848デフォルトの名無しさん
2013/11/17(日) 00:06:30.390849デフォルトの名無しさん
2013/11/17(日) 00:11:38.79知らないだけなんだろうけど。
0850デフォルトの名無しさん
2013/11/17(日) 00:19:03.96OSが載ってたらいいのか?判断基準は何なの?
0851デフォルトの名無しさん
2013/11/17(日) 00:20:39.19OSない環境でもC++は生産性に大きく寄与するよ(当たり前だけど)
お前さんには使えないってだけ
0852デフォルトの名無しさん
2013/11/17(日) 00:24:05.44とてもじゃないが使えないっつうか、使おうとも思わないって人が多いと思う
0853デフォルトの名無しさん
2013/11/17(日) 00:27:05.70やっぱC++なんか使わんわ
CだろうがC++だろうが、ちゃんと書けば生産性なんか変わらん
0854デフォルトの名無しさん
2013/11/17(日) 00:27:17.84おかしくない。規格どおり
・デストラクタが例外を投げたらそのオブジェクトは破棄されたことにならない
(デストラクタの正常終了をもってそのオブジェクトが破棄されたとみなす)
・スタック巻き戻しによる破棄はそのブロックで正常に構築されて未だに破棄されてない自動変数が対象
・例外送出によるスタック巻き戻しの最中にデストラクタが例外を投げたらstd::terminateが呼ばれる
>>895のソースでは
1 56行でTemporary_t型の一時変数(自動変数)のデストラクタ内で例外が投げられる
2 その一時変数は例外送出時点で破棄されていない(とみなされる)
3 スタック巻き戻しで一時変数のデストラクタが呼ばれる。そして例外が投げられる
4 上記のルールによりstd::terminateが呼ばれる
となってる
0855デフォルトの名無しさん
2013/11/17(日) 00:30:24.00使えない奴が多いのは知ってるよ
0856デフォルトの名無しさん
2013/11/17(日) 00:36:03.400857デフォルトの名無しさん
2013/11/17(日) 00:37:36.640858デフォルトの名無しさん
2013/11/17(日) 00:39:33.550859デフォルトの名無しさん
2013/11/17(日) 00:41:40.64PCもC++erからすれば組み込みだよな
0860デフォルトの名無しさん
2013/11/17(日) 00:43:57.960861デフォルトの名無しさん
2013/11/17(日) 00:47:14.57昔はね
0862デフォルトの名無しさん
2013/11/17(日) 00:49:40.75一時変数しか作れないようにして、あとで発生した例外処理には絶対巻き込まれないようにしたってことか。
VCでエラーにならないってのは変だな。
0863デフォルトの名無しさん
2013/11/17(日) 00:51:17.87> おかしくない。規格どおり
> ・デストラクタが例外を投げたらそのオブジェクトは破棄されたことにならない
> (デストラクタの正常終了をもってそのオブジェクトが破棄されたとみなす)
規格にそんな記述あったっけ?
オブジェクトの「生存期間」はデストラクタ開始時点で終了してるんだけど。
「破棄されたかどうか」っていうタイミングが別にあるの?
0864デフォルトの名無しさん
2013/11/17(日) 01:09:26.760865デフォルトの名無しさん
2013/11/17(日) 01:10:27.79~Temporary_t() に明示的な例外仕様が無いからデストラクタの特例で noexcept が適用されて、
そこから例外飛ばそうとしてるから std::terminate() ってだけじゃないの?
0866デフォルトの名無しさん
2013/11/17(日) 01:19:16.4456行 temporary_t(s) << "ABCDEFGHI " << 123456789;
(1) (2) (3) (4)
(5) 57行以降のどこか
のうち(2)〜(5)の4カ所で例外が発生する可能性がある。1はない。
(2)と(3)では実際どうなのか知らんが、一応operator << が失敗しうる。
(5)57行以降のどこかで例外が発生した場合のスタック巻き戻しの処理では、temporary_t(s)は
もう破棄されているから無関係。例外多重発生は起こらない。
(4)のデストラクタ内での例外発生に関しては>>854の言う通りだったらダメだな。
0867デフォルトの名無しさん
2013/11/17(日) 03:13:45.558bitのAVRやPICでC++使ってる例を出してくれ。
無論、RAM32バイトのチップでもC++使うんだよな?
0868デフォルトの名無しさん
2013/11/17(日) 03:59:54.96アホみたいな極論しか言えないのかこの低脳
0869デフォルトの名無しさん
2013/11/17(日) 04:03:18.30そんな貧困環境向けの極小プログラムなど何で作ろうがどうでも良い
0870デフォルトの名無しさん
2013/11/17(日) 04:09:36.290871デフォルトの名無しさん
2013/11/17(日) 04:37:01.12なんだよ出来ねぇのか、使えねぇ回答者だなお前ら。
0872デフォルトの名無しさん
2013/11/17(日) 04:46:10.890873デフォルトの名無しさん
2013/11/17(日) 05:26:19.720874デフォルトの名無しさん
2013/11/17(日) 05:41:17.08対人だとしばらくは馬鹿扱いされるだろうし、
業務でやったら最悪損害が出てしまうからな。
0875デフォルトの名無しさん
2013/11/17(日) 05:50:15.260876デフォルトの名無しさん
2013/11/17(日) 08:28:39.930877デフォルトの名無しさん
2013/11/17(日) 09:55:25.59さすがに8bit〜ってのは皮肉だろ
0878デフォルトの名無しさん
2013/11/17(日) 09:58:41.18NVRAMじゃねーのいまどき
0879デフォルトの名無しさん
2013/11/17(日) 18:59:18.04hogeみたいな基地外がいっぱいの言語じゃしょうがないが
0880デフォルトの名無しさん
2013/11/17(日) 19:03:33.93boost見てみろよ
まじキモイソースじゃん
0881デフォルトの名無しさん
2013/11/17(日) 19:06:26.59あのキモイソースよく見れるなと毎回思ってるわ
0882デフォルトの名無しさん
2013/11/17(日) 19:17:56.36メジャーになったらどうせ尻尾振って賞賛するような価値観だろうし。
0883デフォルトの名無しさん
2013/11/17(日) 20:08:19.87糞コードに溢れてる実務の癒やしの部分。
0884デフォルトの名無しさん
2013/11/17(日) 20:22:57.97C++って建て増し言語だからね
0885デフォルトの名無しさん
2013/11/17(日) 21:52:45.750886デフォルトの名無しさん
2013/11/17(日) 23:10:33.270887デフォルトの名無しさん
2013/11/17(日) 23:12:15.110888デフォルトの名無しさん
2013/11/17(日) 23:18:07.06あの程度の基礎知識もなしにどうやってプログラムするんだろう
0889デフォルトの名無しさん
2013/11/17(日) 23:25:28.18そんなことはないと思うけど。
boostのソースからヒントを得ました
なんて若い世代かなり多いと思う。
0890デフォルトの名無しさん
2013/11/17(日) 23:32:03.24そういう新しいのを渋るのは年取ってる人の方が多いんじゃないか?
0891デフォルトの名無しさん
2013/11/17(日) 23:34:49.59メタプログラミングを覚える過程として、boostの写経という名のコピペは欠かせないな。
でも、手探りでとりあえず動いてるだけのコード群には地雷が一杯。
そして、メタプログラミング禁止令が出て、テンプレートを書いても許される層と使うこと
だけが許されてる層へと役割の細分化が進むw
0892デフォルトの名無しさん
2013/11/17(日) 23:45:38.350893デフォルトの名無しさん
2013/11/18(月) 00:03:12.80無駄にやる気のある奴はゴッテゴテの訳わからないライブラリを作り出す
それがテンプレート
0894デフォルトの名無しさん
2013/11/18(月) 00:11:31.980895デフォルトの名無しさん
2013/11/18(月) 00:14:59.31ゆっくり時間かけて見ていいよ
0896デフォルトの名無しさん
2013/11/18(月) 00:54:18.97LGPLってのがな
0897デフォルトの名無しさん
2013/11/18(月) 01:00:52.10ここスレ住人はMFC命だろ
0898デフォルトの名無しさん
2013/11/18(月) 01:21:11.47凝ったこと(最近の見栄えの良いGUI)しなければ、MFCもVC#も大差ないからな
0899デフォルトの名無しさん
2013/11/18(月) 01:31:44.15FAの装置制御GUIでCLじゃなくてICC使う理由が良く分らん。
最適化が重要な処理があるとか、CLのバグ避けとか…?
0900デフォルトの名無しさん
2013/11/18(月) 02:44:11.18GTK命です
0901デフォルトの名無しさん
2013/11/18(月) 02:49:37.880902デフォルトの名無しさん
2013/11/18(月) 06:57:29.410903デフォルトの名無しさん
2013/11/18(月) 07:10:24.32言わせんな、恥ずかしい
0904デフォルトの名無しさん
2013/11/18(月) 10:46:03.84「遅いから」
その一言に尽きる
設計自体は継承のデモンストレーションになっているために実際の使用に対しては
柔軟性は確かにあるが、実用性は「?」な部分が多い
今boostのメンバーに一から作らせたら全く違う物を作るだろう
boost.iostreamsのようにね
0905デフォルトの名無しさん
2013/11/18(月) 10:50:22.77ベンチマークとると遅くないけどな
0906デフォルトの名無しさん
2013/11/18(月) 11:31:38.34いや全体的に遅いし
結局出力はC関数限定になるし
0907デフォルトの名無しさん
2013/11/18(月) 11:35:14.22遅いってことを証明できるコード見せて
0908デフォルトの名無しさん
2013/11/18(月) 11:53:22.370909デフォルトの名無しさん
2013/11/18(月) 12:22:40.440910デフォルトの名無しさん
2013/11/18(月) 12:37:47.080911デフォルトの名無しさん
2013/11/18(月) 12:48:47.880912デフォルトの名無しさん
2013/11/18(月) 13:58:44.64io.hなんかPOSIX規格には無いはずだが
0913デフォルトの名無しさん
2013/11/18(月) 14:03:02.18遅かろうがどうでもいいわ
0914デフォルトの名無しさん
2013/11/18(月) 14:07:33.64という書き方がキモいです。
0915デフォルトの名無しさん
2013/11/18(月) 14:12:29.12Posixがいいならunistd.hで
0916デフォルトの名無しさん
2013/11/18(月) 17:16:21.50こういうのもあるけどな
std::ios::sync_with_stdio(false) で速くなるメンバ関数もあるという話
0917デフォルトの名無しさん
2013/11/18(月) 18:38:24.71その辺使わなきゃいいんだけどね。
0918デフォルトの名無しさん
2013/11/18(月) 18:42:07.570919デフォルトの名無しさん
2013/11/18(月) 22:58:50.18マウスの動きで時間を進めたり戻したりしようと思いました。
マウスを直線的に動かすとすぐ画面外にはみ出ちゃうんで、
時計回り->時間が進む、反時計回り->時間が戻る、としたいです。
回転の向きを捕えるのはこんな感じで簡単に実装できました(関数mouseConvexity)。
http://ideone.com/JvT6Ck
で、マウスのふらつきを吸収するための調整項が中途半端に残ってます。(「要調整」のコメント部分)
とりあえず機能はするんですが、こういう調整項を実行時に動的に最適化するような
プログラムってC++でうまく作れないでしょうか?
0920デフォルトの名無しさん
2013/11/18(月) 23:38:00.88こういうときの"点の採取"ってのは低域通過してからやるもんで
平たく言うとサンプリングした過去n点を足してnで割っとけ
nを動的にするアルゴリズムとかもある
C++関係なくね?
0921919
2013/11/18(月) 23:47:57.22あーサンプリングですか。そうですね。
関数側でそのための領域を保持しておきたいところですが、
呼び出し側に確保するしかないのがいまいちスマートじゃないですね。
(既存のstaticデータもそうだけど)
C++関係なさそうなだけど、どこがいいのかわかんなくてすいませんでした。
0922919
2013/11/19(火) 00:04:43.41関数じゃなくてファンクタにすればいいんだわ。 >そのための領域確保
まあそのファクンタはstaticにしなきゃならんけど。
0923デフォルトの名無しさん
2013/11/19(火) 00:06:28.56簡単にいうとデータとそれに関係する関数群の関係付けしてるものがクラスだよ。
だからフィルターするクラスを作るんだ。
生の位置を突っ込んだら補正した結果を返しつつ突っ込んだ生データを内部のメンバに保持するような。
0924デフォルトの名無しさん
2013/11/19(火) 00:21:32.72それはそれとして、その辺の設定値はふらつきだけじゃ無くて速度も変わる。
速度の目標値が無いのにふらつきだけ消そうとしても、自動では上手く行かないだろ。
スレショルドは一応決められるけど、円の直径と速度の目標が定まらないとやっぱ安定しない。
中心決めて、10度で1カウントとか円周上XXpxで1カウントとかにしたほうが手っ取り早い気がするな。
中心は決めうちの方が楽だけど、移動範囲が縦横XXpx以上での移動範囲の中心を使っても良さげ。
XXpxとかはUIの解像度から決める値にしておけば、自動調整項自体が式から消える。
0925デフォルトの名無しさん
2013/11/19(火) 00:22:17.66マウスはひとつしかないんだし、ウィンドウプロシージャの case WM_MOUSEMOVE: でしか呼び出す場所ないんだろ?
関数側に過去データ確保しておけばいいじゃん。
0926デフォルトの名無しさん
2013/11/19(火) 00:29:26.16操作終わった時のリセットがわからんとか。
staticだと、その関数の引数で過去の移動記録破棄を指示するとか、関数のstatic変数を外から触るとか、若干キモイ事になる。
0927デフォルトの名無しさん
2013/11/19(火) 00:35:10.31一般論ではそう。
だけどこれは過去の点は2つしかとってないし、新しい操作との不整合はすぐ押し流されてしまって検知できないレベルだよ。
0928デフォルトの名無しさん
2013/11/19(火) 00:43:57.92リセットなんかせずに放置でいい、って意味ね。
0929デフォルトの名無しさん
2013/11/19(火) 00:50:03.75オブジェクトにデータ持たせることが目的になってるしタダのクラスだよなそれ。
確保した領域のクリアもするならそれこそ関数オブジェクトではなくなるし。
>>927
これは>>920で保存するデータ増やす事も想定した話だからまぁいいんじゃね?
0930デフォルトの名無しさん
2013/11/19(火) 00:50:35.25WM_なんちゃらって書いてるって事はメッセージループ周ってるんだろうからループスコープのの外に書けばいいだけ。
>staticだと、その関数の引数で過去の移動記録破棄を指示するとか、関数のstatic変数を外から触るとか、若干キモイ事になる。
関数内のstatic変数を外から合法的に触る方法なんて無いし(そりゃあ中から渡せば別)
関数の引数で中のstatic変数の破棄を指示とか若干どころかキモイの極み
そんなコード書くやつが同じプロジェクトにいたら殺意沸くわ。
0931デフォルトの名無しさん
2013/11/19(火) 01:14:00.10C++だとキモイの極みだが、Cでは……
strtok:第一引数がNULLならば前回からの続きを処理し、非NULLならば前回までのデータを破棄して最初から処理する。
0932デフォルトの名無しさん
2013/11/19(火) 01:17:40.18最低でも構造体渡し
0933デフォルトの名無しさん
2013/11/19(火) 01:21:39.210934デフォルトの名無しさん
2013/11/19(火) 01:31:36.580935デフォルトの名無しさん
2013/11/19(火) 01:40:04.71if文で
if(条件式) 実行文;
if(条件式) 実行文;
・・・・
・・・・
とやるのと
if (条件1) {
文1;
}
else if (条件2) {
文2;
}
|
|
else if (条件n) {
文n;
}
else {
文;
}
とやるのどっちが速いんだろうか
0936デフォルトの名無しさん
2013/11/19(火) 01:43:10.58そもそも可換であることが少ないだろそれ
後者で書けるなら後者で書くけど
0937デフォルトの名無しさん
2013/11/19(火) 01:51:18.04今やってる物理学のプログラミングでどうしても気になって プログラムは門外漢なもんで
http://codepad.org/2Z1dy4Gp
この関数を何万回も計算させるんだけど速度を向上させるのにはどうすればいいんだろうか
もっといいやり方があるような気がするんだけどアホだから分からん
0938デフォルトの名無しさん
2013/11/19(火) 01:53:14.10後者の方が余計な条件式の判定を行わないけれど、
条件式の内容と最適化次第ではどちらも同じコードなったりする。
条件式に時間が掛かる処理を含むのでも無い限り、見通しが良い方で書いたほうが良さげ。
0939デフォルトの名無しさん
2013/11/19(火) 01:56:28.58そういうものか 単なる不等号の判定だからどっちでもいいのかな?
0940デフォルトの名無しさん
2013/11/19(火) 01:57:42.80んなこたわかってるけど、それだと内部のstaticがなんちゃらと話がつながらんだろ
0941デフォルトの名無しさん
2013/11/19(火) 02:00:04.24ループ構造がアホだからそこから修正。
例えば、8行目のi==(L-1)は6行目のfor文の中では不変なのだから、7行目のfor文の外で判定できる。
最適化がちゃんと効いてれば修正不要だが、効いてるか調べるか手で直すかどっちかやるべき
0942デフォルトの名無しさん
2013/11/19(火) 02:02:22.91>>934は>>933に対するレスで、
>>933は>>931で出てきたstrtokそれ自体に対する感想だし、
>>931までの流れとは関係ないんじゃね。
>>939
コンパイラ次第。
0943デフォルトの名無しさん
2013/11/19(火) 02:05:05.82成程 最適化が効いてるかどうか調べるには実行速度を調べればいいの?
0944デフォルトの名無しさん
2013/11/19(火) 02:05:52.93strtokとか関数内部でstaticを不用意に使ってるとマルチスレッドで死ぬっていういい例じゃん?
0945デフォルトの名無しさん
2013/11/19(火) 02:09:16.07吐き出されたコードを見るのが一番だけど、無理なら実際組んで比べてみるとか。
あと、ループ全部一緒に見えるんだけど、纏めれないの?
0946デフォルトの名無しさん
2013/11/19(火) 02:15:15.84こういうのはSIMDにしたい病がうずうずする
Eはオーバーフローしないのかこれ?spinが限定された値域なのかもしれんが
0947デフォルトの名無しさん
2013/11/19(火) 02:15:49.98>吐き出されたコードを見るのが一番だけど、無理なら実際組んで比べてみるとか。
アセンブラ見るのか? 実際組んで比べたほうがいいっぽいな。。
>あと、ループ全部一緒に見えるんだけど、纏めれないの?
配列の内容が[x][y][z][方向]で各軸で[方向]が違うのと 後 条件文で周期的境界条件を課してるから違うと思うよ
プログラム的に同じにできるってんなら俺には分からない範囲
0948デフォルトの名無しさん
2013/11/19(火) 02:18:58.57>Eはオーバーフローしないのかこれ?spinが限定された値域なのかもしれんが
spinは実は1,-1,0のみを取る配列
実行結果は論文の理論値と一致してるからアルゴリズム自体が間違ってるっていう可能性は低いかなーと思ってる
問題は単純に下手で実行速度が遅い点
SIMDつーのも勉強したいな
0949デフォルトの名無しさん
2013/11/19(火) 02:21:31.19なる。3値ならいいんだ。SIMDの出る幕でもない
0950デフォルトの名無しさん
2013/11/19(火) 02:23:37.72結果はそれら全部足してるだけじゃん?
0951デフォルトの名無しさん
2013/11/19(火) 02:31:59.31いやよく見りゃ分かるけど各軸のforの中は違うと思うよ
0952デフォルトの名無しさん
2013/11/19(火) 02:35:12.27ifを4個書いてるのは端末処理かよ
速度重視するときこういうのはループの外に出すもんだ
0953デフォルトの名無しさん
2013/11/19(火) 02:46:01.71ありがとう
ifで分岐させた後にループすべしって事か
そうする
0954デフォルトの名無しさん
2013/11/19(火) 02:50:22.17ん?まずこうできないの?って聞いてるんだけど。
codepad.org/IYfLhMKL
おまけLが大きいなら並列化
codepad.org/7XhkkqRd
とか適当に書いたから3個までしかスケールしないけど
リンク禁止とか言われるからスラッシュ二つまでつけてくれ
0955デフォルトの名無しさん
2013/11/19(火) 02:59:59.68これは恥ずかしい
こっちのほうをなんで思いつかなかったんだろw
並列化ってのがあるんだな知らなかった
どうもありがとう
0956デフォルトの名無しさん
2013/11/19(火) 03:14:19.67変な質問になりますが、
for(int i=0; i<2; i++){
●ここですぐiの中身を確認する
}
のように、for文の式でまず変数「i」を宣言し、同時に0を代入するも
「17515237」などとわけもわからない値が入っている場合があります。
別のなにかが作用してそうなるのならまだしも、宣言してすぐにそんな値が入っているんです。
for(int i=0; i<2; i++){
→ここですぐiの中身を確認してみました
}
代入させたはずの0では無く、別の値が入るというのは、
どういう原因が考えられますか?
ループなりなんなりしたのであれば調べる箇所も目星はつけられますが
宣言後すぐ調べても変な値が入っているので原因がわからず、途方にくれています。
0957デフォルトの名無しさん
2013/11/19(火) 03:19:24.000958デフォルトの名無しさん
2013/11/19(火) 03:41:19.16レスありがとうございます。
しかし、そのようなことはしておりません。
ちなみに確認はブレークポイントをつけて、デバッグにて確認しています。
0959デフォルトの名無しさん
2013/11/19(火) 03:47:12.55デバッガーじゃなく、printfで表示させるとどうなる?
0960デフォルトの名無しさん
2013/11/19(火) 03:49:47.88これを>>941>>952>>953すると
for(k=0;k<L;k++){
for(i=L-1,j=0;j<L-1;j++){◆1}//(L-1)回、右端?
for(i=0,j=L-1;i<L-1;i++){◆2}//(L-1)回、下端?
for(i=L-1,j=L-1;i<L;i++){◆3}//1回、右下?
for(i=0;i<L-1;i++){
for(j=0;j<L-1;j++){◆4}//(L-1)回×(L-1)回、その他?
}
}
こうか。ifはきえる。
0961デフォルトの名無しさん
2013/11/19(火) 04:02:17.11上下左右それぞれのキーを押すと
そのfor文箇所が実行されるようになっていますが、
それと同時にfor文の「i」の変数をprintfで表示も実行させてみました。
すると、押した(iが作成された)瞬間に例のすさまじい桁の値が表示されます。
ビルドしなおしてみるに、毎回「i」の中身の数値は違っているようです。
なぜか「-0」の時もあります。
どういうことなんでしょうか、、、。
0962デフォルトの名無しさん
2013/11/19(火) 04:09:05.360963デフォルトの名無しさん
2013/11/19(火) 04:14:34.30前後のコード晒せよ
隣の変数からオーバーランしてきてる可能性もあるし文章じゃ解らん
0964デフォルトの名無しさん
2013/11/19(火) 04:25:11.46すみません、そこは癖で%fで表示させています。
intを表示するなら問題はないかと思います。
>>963
それが出来れば話が早そうですが
ちょっと量がすさまじいので、、、すみません。
自分が知りたいのは、そういう例があるか否か、
経験豊富な方が経験されていないかな、と思って。
0965デフォルトの名無しさん
2013/11/19(火) 04:26:23.17あり得るんでしょうか?
0966デフォルトの名無しさん
2013/11/19(火) 04:29:16.99おい、ちょっと待てよ
0967デフォルトの名無しさん
2013/11/19(火) 04:32:08.57問題ありまくりだよ
なんか色々と根本的な知識不足がありそうだな・・・
0968デフォルトの名無しさん
2013/11/19(火) 04:49:49.95でも、まあ表示の仕方がわかってないのと、
今回のバグは関係ないですよね
0969デフォルトの名無しさん
2013/11/19(火) 04:51:12.260970デフォルトの名無しさん
2013/11/19(火) 04:53:07.93逆に気になりました。
わかりました。
%fがまずい理由を解説してくださいませんか?
お願いします、、、
0971デフォルトの名無しさん
2013/11/19(火) 04:58:34.40printfの使い方くらい調べなよ
まずい理由を説明する以前の問題だ
0972デフォルトの名無しさん
2013/11/19(火) 05:01:34.78自分の思った通りの解説ばかりです。
%f [-]dddd.ddddddの形式で出力する
これがint型を表示するのになにか問題があるんですか?
マジでわかりません。
0973デフォルトの名無しさん
2013/11/19(火) 05:08:46.52マジで悩んでるなら初心者スレに逝け
ほとんどの処理系で8バイトdoubleを受ける%fに
4バイトintをあてがって問題がないと考えるロジックがわからん
0974デフォルトの名無しさん
2013/11/19(火) 05:10:33.28C言語入門書を一から読み直しなさい
%f に紐付ける変数は double (かC99 なら float)
%f に整数型を渡すな、渡すなら (double)でキャストする
0976デフォルトの名無しさん
2013/11/19(火) 05:14:16.23いや、細かいこと言えば、doubleやint、floatなどで
合わせたほうがいいけど、
ただ、変数の中身を表示させるだけですよ?
普段はよくdoubleの表示でつかっているんで、%fで打ってるのを
面倒だからint相手でも%f使っただけです。
容量的な問題を言ってるなら、それこそ重箱の隅、
もしくは揚げ足とりなだけに聞こえるんですけど。
intをdoubleで表示して数値が変わるわけでもなし。
0977デフォルトの名無しさん
2013/11/19(火) 05:17:53.42だってここまでの奴こんな所来ないもの
0978デフォルトの名無しさん
2013/11/19(火) 05:18:50.88RPGのプレイヤーが壁に当たる処理において
壁にめり込んだ→壁の外に戻す、の処理をさせてるんですが
めり込んだのが表示されてから
ずいっと戻る感じになってしまうですよ。
壁の方向を押し続けてもめり込まずに止まるようにしたいんですけど
どうすればいいですか?
>細かいこと言えば、doubleやint、floatなどで合わせたほうがいいけど、
細かいことではなくて重要なことだ
>押した(iが作成された)瞬間に例のすさまじい桁の値が表示されます。
当然の結果だね
わからないのなら、まず「合わせた」ほうがいいんじゃないか?
0980デフォルトの名無しさん
2013/11/19(火) 05:26:52.670981デフォルトの名無しさん
2013/11/19(火) 05:31:31.490982デフォルトの名無しさん
2013/11/19(火) 05:41:04.87あのですね、ものすごい桁が問題なのではないんですよ
そんなの%fを使ってるんで当たり前でしょ。
int i=0;
のiを%fで表示して、0.00000000000みたいに表示されてる〜って騒いでるんじゃないんですよ
5678909.8765000000000みたいな感じで表示されてるから騒いでるわけで。
そこで、%fのせいだ、なんて言われるほうが「はい?」ってなるんですけど
まあいいです。
わからないんですよね?
自力でやります、ありがとうございました。
0983デフォルトの名無しさん
2013/11/19(火) 05:48:03.83疑問が解決したようで、安心しました。
私の方で[回答マーク] させていただきました。
また疑問点などありましたら、Answers をご利用くださいね。
0984デフォルトの名無しさん
2013/11/19(火) 06:13:16.58はいはい言い訳とかいいから初心者ならコードで試す癖身に付けろ
http://codepad.org/tm7TJo1d
0985デフォルトの名無しさん
2013/11/19(火) 06:32:04.740986デフォルトの名無しさん
2013/11/19(火) 06:32:51.490987デフォルトの名無しさん
2013/11/19(火) 06:36:04.850988デフォルトの名無しさん
2013/11/19(火) 06:46:46.82手前で処理すりゃいいだけだろボケ
0989デフォルトの名無しさん
2013/11/19(火) 06:53:57.96壁際で止まる処理の皆さんが手前処理してるんでしょうか?
要は、移動先を先に確認してってことですよね?
そのやり方を使わずに、自分が触れたらにしたいんですけど
それだと無理なんでしょうか?
0990デフォルトの名無しさん
2013/11/19(火) 07:03:02.48intをfloatやdoubleとして解釈などすると値が無茶苦茶に壊れる。0は0な場合が多いが保証も無い。
それに加えてdoubleは変数のサイズが異なるので、前後にある無関係なデータを値として解釈するので当然無関係な値が出る。
さらに浮動小数点数の引数は数値のスタックではなくFPUのスタックを使う場合があるので、その場合も無関係なデータが使われる。
浮動小数点数と整数を変換できるのは、それぞれがどんなデータ型かをコンパイラが正しく解釈して変換するから。
printfは型情報が一旦消滅するので、正しい型で引数と書式を書かないと大抵異常な動作をする。
>>978>>989
めり込んでから戻すまでの間に描画が入るからそうなる。
描画前に戻すか、めり込む前にキャンセルするかすればよい。
0991デフォルトの名無しさん
2013/11/19(火) 07:24:02.45だから描画手前で衝突判定の処理すりゃいいだけだろ
表示されてしまうじゃねーよさせんなよ
>5678909.8765000000000みたいな感じで表示されてるから騒いでる
int を %f で表示させようとするからそうなる
0993デフォルトの名無しさん
2013/11/19(火) 07:47:42.040994デフォルトの名無しさん
2013/11/19(火) 08:07:53.38%fを指定したときは対応する実引数の型がfloatまたはdoubleでなければならない。
intを渡すのはundefined behavior
0995デフォルトの名無しさん
2013/11/19(火) 08:09:12.10でも、printf系の、「なんでも置けるところ」は、必ずしもそうじゃない。
それが、C/C++の良さでもある。Cにようこそ。
0996デフォルトの名無しさん
2013/11/19(火) 08:12:08.31C++ならオーバーロードで解決だ。
0997デフォルトの名無しさん
2013/11/19(火) 08:47:41.98C++相談室 part107
http://toro.2ch.net/test/read.cgi/tech/1384818417/
0998デフォルトの名無しさん
2013/11/19(火) 09:12:15.720999デフォルトの名無しさん
2013/11/19(火) 09:42:04.541000デフォルトの名無しさん
2013/11/19(火) 09:51:25.2310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。