16/04/03 00:23:36.87 ZT/2NYWz0.net
[C++ FAQ]
URLリンク(isocpp.org)
URLリンク(www.bohyoh.com) (日本語)
3:デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)
16/04/03 00:24:40.13 ZT/2NYWz0.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しまし�
4:ス。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
5:デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)
16/04/03 00:25:56.22 ZT/2NYWz0.net
---- テンプレ ここまで ----
6:デフォルトの名無しさん (ワッチョイ b742-G+K4)
16/04/04 01:31:35.53 QWzclXen0.net
乙。
これは>>1乙じゃなくて\0終端を表すzeroの頭文字なんだからね!
7:デフォルトの名無しさん (ガックシ 0+af-e5NB)
16/04/04 16:33:22.23 vx7kDnRQ+.net
template <class T, class U>
auto operator * (const matrix<T>& A, const matrix<U>& B)
-> matrix<decltype( std::declval<T>() * std::declval<U>() )>
ってTがcomplex<float>, Uがcomplex<U>のときにうまくいかないみたい
URLリンク(stackoverflow.com)
に書いてあることと同じ現象が発生するわ
8:デフォルトの名無しさん (ワッチョイ b7a8-ppXo)
16/04/04 17:51:25.41 K+tP/W6A0.net
Uがcomplex<U>
これは無理だろ
9:デフォルトの名無しさん (オッペケ Sref-G+K4)
16/04/04 19:03:53.18 C11O14/Yr.net
> decltype( std::declval<T>() * std::declval<U>() )>
代わりにstd::common_type_t<T, U>にしたらいかんの?
10:デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
16/04/04 19:30:33.08 ogDZeBJL0.net
>>6
何をやりたいのか勘違いしてるかも知れないけど「Uがcomplex<U>」は書き間違いだとして、
そもそも
complex<double> z1;
complex<float> z2;
z1*z2;
とかは標準のままじゃ出来ないだろ。演算子定義してる?
リンク先の現象とは別のものだと思うけど?
11:デフォルトの名無しさん (jp 0Haf-e5NB)
16/04/04 20:11:57.58 jBujPHQXH.net
>>7 >>9
ごめん。complex<U>→complex<double> だった。
template <class T, class U>
std::complex< decltype(std::declval<T>()*std::declval<U>() )>
operator * (const std::complex<T>& z1, const std::complex<U>& z2)
{
return std::complex< decltype(std::declval<T>()*std::declval<U>() )>
(z1.real()*z2.real()-z1.imag()*z2.imag(),
z1.real()*z2.imag()+z1.imag()*z2.real() );
}
は準備してるけど、これがなくてもコンパイル通る。ところが
template <class T> std::complex<T> operator * (int d, const std::complex<T>& z)
{
return std::complex<T>(d*real(z), d*imag(z));
}
がないと、
エラー C2893 関数テンプレート 'matrix<unknown-type> operator *(const U &,const matrix<T> &)' の特定に失敗しました
エラー C2784 'matrix<unknown-type> operator *(const matrix<T> &,const matrix<U> &)':
テンプレート 引数を'const matrix<T> &' に対して 'const std::complex<float>' から減少できませんでした
・・・みたいなのがわんさか出る.
12:デフォルトの名無しさん (jp 0Haf-e5NB)
16/04/04 20:15:55.07 jBujPHQXH.net
matrix<float> af(3,3);
matrix<complex<double>> b(3,3);
af*bの演算やると、VC++2015では
警告 C4244 '引数': 'double' から 'int' への変換です。データが失われる可能性があります。 mat_test3 c:\users\ayabe\desktop\mat_test3\mat_test3\matrix_.h 203
がでる.gcc(TDM gcc 5.1.0)では警告すらでずにdoubleからintへの型キャストが起こる。
13:デフォルトの名無しさん (jp 0Haf-e5NB)
16/04/04 20:31:24.66 jBujPHQXH.net
template <class T> std::complex<T> operator * (int d, const std::complex<T>& z)
{
return std::complex<T>(d*real(z), d*imag(z));
}
↓訂正
template <class T> std::complex<T> operator * (const std::complex<T>& z, int d)
{
return std::complex<T>(d*real(z), d*imag(z));
}
まあ,decltypeはもう使わないからいいか。お騒がせしました。
14:デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
16/04/04 20:36:09.73 ogDZeBJL0.net
>std::complex< decltype(std::declval<T>()*std::declval<U>() )>
これがもうダメだろ。例えばTがcomplex<double>、Uがcomplex<float>なら*の結果の型が定義されていないんだから
VS2015の警告はこれに関しては全く正しいよ
15:デフォルトの名無しさん (jp 0Haf-e5NB)
16/04/04 20:41:55.46 jBujPHQXH.net
しかし、何でintなんですか?(デフォルト?)
それと結果の型をどうやって定義するんですか?
MPLかなんか知らんけど、そんなことするくらいならBlitz++を開発した
人のプリプロセッサ命令使うわ
16:デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
16/04/04 21:04:57.93 ogDZeBJL0.net
>しかし、何でintなんですか?(デフォルト?)
あなたがそうさせたから
だから標準ではcomplex<double>*complex<float>とか
complex<double>*floatとか、complex<double>*intとかは定義されていないの
そこにあなたがcomplex<T>*intを定義したもんだから
complex<double>*floatがcomplex<double>*intに変換されたてしまったというだけ
型変換ルールは難しいよね
このままC++でプログラミングを続けると躓きまくるパターンだな
17:デフォルトの名無しさん (jp 0Haf-e5NB)
16/04/04 21:16:48.03 jBujPHQXH.net
それだけか? 何にも知らないくせに
あんたみたいな奴に上から目線で言われたくない。馬鹿
18:デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
16/04/04 21:18:22.81 ogDZeBJL0.net
あーあクソバカの相手して時間の無駄した
19:デフォルトの名無しさん (ワッチョイ 9fa6-eoZT)
16/04/04 21:36:28.38 aM9lztCf0.net
通りすがりのアホな自分にも>>15の説明はよくわかる
20:デフォルトの名無しさん (ワッチョイ 6fcc-G+K4)
16/04/05 14:56:46.43 FzTJXf040.net
時空のおっさんは虚数空間に居るらしいな
21:デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
16/04/07 09:40:32.57 sYQgs7of0.net
てす
22:デフォルトの名無しさん (スプー Sdb8-xmDs)
16/04/07 11:23:16.83 AC5hJBPJd.net
大学でプログラミング始めようと思うので機材に関して質問
状況:授業の必修でJavaがあるからなんなら同時進行でC++もやろうと思う
家に母艦となりうる富士通Esprimoという一体型PCあり
家との距離や買い物サークルの関係で図書館利用が多いのでノートパソコンでの学習を希望
質問一 どのレベルのノーパソコンだとストレスフリーか?
できれば住民の使ってるものも教えてもらいたい
質問二 また他の機材はいるか?
質問三 参考書としてどうしても必要なものと入門書について
23:デフォルトの名無しさん (スプー Sdc8-Ixw5)
16/04/07 11:28:08.01 geZU7+Zhd.net
VisualStudioスレってないの?
24:デフォルトの名無しさん (ワントンキン MM40-xmDs)
16/04/07 12:36:54.37 XWAdlud5M.net
>>21
回答一 最低でも100万円クラスのものが必要となる
回答二 専用キーボードとデバッグ用ディスプレイというものが必須である
また、オプションではあるがコード解析用RAMがあったほうがよい
回答三 C++のJIS規格書が必要である
参考書はThe Art of Computer programming、Structure
25:and Interpretation of Computer Programs、Numerical Recipesなどを読むことが望ましい
26:デフォルトの名無しさん (スプー Sdc8-Ixw5)
16/04/07 12:47:48.05 geZU7+Zhd.net
JIS規格書
27:デフォルトの名無しさん (ガラプー KK8d-nXV3)
16/04/07 13:50:27.18 D9AesW8PK.net
1.今使ってるノーパソがdynabookのi5、4GM、HDD(Amazonで7万くらい)。
完全にストレスフリーではない(eclipse使用時や、VSのインテリセンスの動作速度)が、許容範囲。
SSDモデルであればストレスフリーかと思う。
2.あると便利なのはWindows 7以下のOSと、Linux。
Windowsの方はデバイスロスト対策(8以上は発生しない)の勉強、
Linuxはオーバーランとかのセキュリティの勉強。
(Windowsは例外投げられて止まる。コンパイラオプション無効にしても書き換え後が以前と変わってると無意味だった)
3.ドラフト(規格の草案)がgithubにあって無料。
『プログラミング言語C++第4版』、『C++のためのAPIデザイン』、『effective modern C++』、『C++テンプレートテクニック 第2版』
第4版は必須。
あと>>23死んでくれ
28:デフォルトの名無しさん (JP 0H8d-90FX)
16/04/07 14:37:39.73 /RqFI3WhH.net
でも JavaとC++を並行でやるのはダメ、ゼッタイ
表面上似ているからかえって混同してどっちも使いものにならないよ
29:デフォルトの名無しさん (ワッチョイ 7c7b-N9sV)
16/04/07 14:43:04.17 qpo8uFCK0.net
職業プログラマになるつもりなら早いうちから複数言語を並列でやることに慣れていたほうが良いと思うけど。
どちかに固まってしまうほうがまずい。
30:デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
16/04/07 14:51:19.83 sYQgs7of0.net
>>21
1.
CPUはCore-i5程度でおつりがくる。ATOMでもclangやgccは使える。
RAMは2Gあれば充分。
HDDは250GBあれば充分。
モニタの解像度は予算が許す限りの最大。狭い画面では思考まで狭くつぶされてしまう。
OSはWindowsでよいが、Linuxならモアベター。
2.
プリンタ。
実にくだらんことだが、プログラムはただ紙に印刷してみるだけで、モニタでは気付けなかったことがわかるからだ。(そして、そのあと決まって紙を無駄遣いしたと思う)
ついつい生活用を兼ねてインクジェットが欲しくなるかも知れんが、プログラム用にはモノクロレーザーがよい。プログラム自体に色はついていないし、レーザーは乾燥させなくてよく、トナーがインクより日持ちする。
3.
・必要
プログラム言語C++第4版 ISBN-13: 978-4797375954
ISO/IEC 14882:2014
・入門書
ストラウストラップのプログラミング入門 ISBN-13: 978-4798119595
31:デフォルトの名無しさん (ワッチョイ 7c7b-N9sV)
16/04/07 15:00:08.34 qpo8uFCK0.net
プリンタ依存も避けたほうが良いと思うけどね。紙だと横幅の問題もあるし。
それに俺が使ってるエディタ上では色ついてるし。
32:デフォルトの名無しさん (スプー Sdb8-xmDs)
16/04/07 15:09:43.34 QhAHKtTed.net
参考になりました
ありがとうございます
33:デフォルトの名無しさん (ワッチョイ 9dcb-sG86)
16/04/07 17:11:02.42 8Ibgsdhs0.net
gcc6でconceptが使えるようになってんね
34:デフォルトの名無しさん (JP 0H8d-90FX)
16/04/07 20:52:38.47 /RqFI3WhH.net
35:>>27 夢見すぎ 独学でどっちか片方それなりにでも身についてれば御の字
36:デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
16/04/07 21:12:54.17 sYQgs7of0.net
俺なんかBASICとマシン語を並列で憶えたぞ
マシン語もZ80と6800を並列で(当時の俺にとって2つの別言語)
N-BASICとF-BASICと大型のBASICも脳の別領域を使ってたし
37:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 95a8-j/+h)
16/04/07 21:20:11.88 DadLuQug0.net
>>23
JIS の C++ は C++03 だぞ。
38:デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
16/04/07 21:36:31.97 sYQgs7of0.net
志村~後ろ後ろ、かw
39:デフォルトの名無しさん (ブーイモ MM8d-xmDs)
16/04/07 23:00:34.69 KjNJiL53M.net
>>28
うちのプロジェクト500万ステップオーバーなんだけど、どうか印刷しないでくれよな。
40:デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
16/04/07 23:11:01.88 sYQgs7of0.net
SYSABENDみたいなことはそうそうしないから安心してくれ
41:デフォルトの名無しさん (ワッチョイ 74d4-+kqq)
16/04/07 23:28:30.78 EsZr6lr20.net
32bitOSで使用してたアプリを64bitOSに移して、
time_tで日付表示しようとすると全然違う日付になるんだけど、
long型の宣言を何に変えればいいんでしょうか
42:デフォルトの名無しさん (ワンミングク MM40-m9JC)
16/04/07 23:32:49.64 s1RKY7ZgM.net
>>38
time_t型
43:デフォルトの名無しさん (オッペケ Sr29-xmDs)
16/04/07 23:54:11.99 OOVH0iNWr.net
変えなくてはいけないコードがそもそもおかしくね?
44:デフォルトの名無しさん (ワッチョイ 3d7b-m9JC)
16/04/08 00:13:14.18 tJM0u/og0.net
>>40
何を当たり前の事を仰ってるのでしょうか
45:デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
16/04/08 13:25:37.92 nRvqcDPq0.net
char, wchar_t, short, int, long, lomg long, intptr_t, ptrdiff_t, size_t, off_t, time_t
符合有無
を正しく使い分けなきゃならない
46:デフォルトの名無しさん (オッペケ Sr29-xmDs)
16/04/08 19:57:04.15 BVnlFcaMr.net
off_tは知らないけど
それは全部区別ついてないとだめだろ
47:デフォルトの名無しさん (ワッチョイ f68b-vY2k)
16/04/08 22:08:41.94 WlvNU3n40.net
size_tは符号無し、ptrdiff_t、int、long、long longは符号付き、ということが確定じゃなかったっけ
違ったっけ
charが符号付か否かは処理系依存
ただし表示可能文字(isprint()が非0を返す文字)は正であることはC言語の規格で決まっている、
48:デフォルトの名無しさん (ワッチョイ fac9-xmDs)
16/04/09 00:37:51.56 0tLp+Ivi0.net
ここはC++スレだがそんな決まりは初耳だ
49:デフォルトの名無しさん (ワッチョイ bbce-xmDs)
16/04/09 18:54:14.11 ALj0g4vo0.net
ssize_t が無いのが微妙に不便。
50:デフォルトの名無しさん (オッペケ Sr29-xmDs)
16/04/10 10:27:04.69 y7qpDauWr.net
むしろsize_tは符号付きにするべきだった
51:デフォルトの名無しさん (ワッチョイ 9d53-QzB1)
16/04/10 23:05:48.42 DxYgjy+n0.net
なんで?
ptrdiff_tの話を間違った?
52:デフォルトの名無しさん (ワッチョイ fac9-xmDs)
16/04/10 23:40:34.03 XJxT0yj80.net
intとの比較でいちいち警告出されたらたまらん
53:デフォルトの名無しさん (ブーイモ MM8d-xmDs)
16/04/11 12:18:23.22 0MIRpDyTM.net
そもそもサイズは一般的にはマイナスの概念も含むものじゃないかと思う。
54:デフォルトの名無しさん (スプー Sdb8-xmDs)
16/04/11 12:21:40.37 I1gJlU3cd.net
unsignedが出現するとイライラする
55:デフォルトの名無しさん (ワッチョイ 7c36-QzB1)
16/04/11 16:45:35.21 uv6GH2mg0.net
>>49
それはコンパイラの問題であって、規格に文句を言うのはお門違いってやつだ
規格合致プログラムなのに難癖つける余計なお節介が邪魔なら、
それをやめさせる方法を探すか、窓から投げ捨てるかは、おまえ自身の問題だし
56:デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
16/04/11 18:25:06.27 cJbV017h0.net
>>52
お前バカだろう。>>42を正しく使い分けるためにコンパイラにチェックさせるんだよ。
57:デフォルトの名無しさん (ガラプー KKbf-nXV3)
16/04/11 19:31:17.66 RH3X14PwK.net
「サイズがマイナスの概念を持つもの」はさすがに。
詳しくは知らないけど測度論?でもやってんのかと言いたい。
バナッハ・タルスキのあれな。
現実には存在しえないだろ負値。
58:デフォルトの名無しさん (ワッチョイ 88cb-j/+h)
16/04/11 20:14:37.61 F0n0MoRl0.net
存在し得ない値を表すのにマイナスが欲しい
59:デフォルトの名無しさん (アウアウ Sac1-L6fk)
16/04/11 20:26:21.31 Whc/9IOHa.net
HaskellのMaybeみたいなデータ構造があればいい
あとは効率次第
60:デフォルトの名無しさん (スプー Sdb8-xmDs)
16/04/11 20:46:28.59 liIxp6L/d.net
>>54
バナタルは測度が定義できない部分集合に分解
61:デフォルトの名無しさん (ワッチョイ fe98-QzB1)
16/04/11 22:15:52.94 DS0BshJK0.net
>>53
正しく使い分けるを定義しろ
いちいち明示的にキャストすることか
それとも変換も昇格も一切使わないことか
62:デフォルトの名無しさん (ワントンキン MM40-xmDs)
16/04/11 22:20:20.19 t8dajl0XM.net
struct ssize_t { bool _sign; std::size_t _val};
63:デフォルトの名無しさん (オッペケ Sr29-SddS)
16/04/11 22:41:24.20 +GeXodTxr.net
>>52
コンパイラーは意図があって警告を出してるのであって
その意図に照らし合わせて規格がこうあるべきだったと言っているのに、
規格通りなら文句言うなとか、アスペなの?
64:デフォルトの名無しさん (アウアウ Sac1-L6fk)
16/04/11 23:05:12.91 Whc/9IOHa.net
『アスペルガー障害なの?』っていう侮蔑用語、そろそろ卒業しような。
65:デフォルトの名無しさん (ワッチョイ e042-j/+h)
16/04/11 23:07:04.91 4BrCfwua0.net
覚えたばかりで使いたい年頃
66:デフォルトの名無しさん (ワッチョイ a030-j/+h)
16/04/11 23:19:25.81 x/V8tc7c0.net
>>61
アスペ全然関係ねぇだろって状況でしか
使われるの見たことないなそういやw
67:デフォルトの名無しさん (ワッチョイ 413c-SddS)
16/04/12 00:26:59.20 0UTgzyp30.net
>>63
アスペ
68:デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
16/04/12 01:17:31.61 sQLQIwRw0.net
>>58
定義してもらわなきゃわからない素人は引っ込んでようね
69:デフォルトの名無しさん (ドコグロ MM1c-SddS)
16/04/12 08:30:13.78 xYAotuK9M.net
>>55
C脳の老害はそろそろ引退しろよ
70:デフォルトの名無しさん (ワッチョイ 9da8-QzB1)
16/04/12 08:42:37.79 xvAFE9Om0.net
>>65
定義できないんだろ?
自分の主張をきちんと整理できないのは
素人以前に論客としての基本ができてないんだよ
恥を知ろうね
71:デフォルトの名無しさん (オッペケ Sr29-SddS)
16/04/12 18:30:33.78 Pt+c78dMr.net
最終的なサイズは0以上でも、サイズを計算する過程で
intを使った演算をしたいことはある。
キャストしなきゃいけないのは流石に不便
72:デフォルトの名無しさん (ガラプー KKbf-nXV3)
16/04/12 20:26:27.00 EvPGf+vtK.net
シフト演算や未定義動作の関係で、unsignedにすることはあるけど逆はないなぁ
具体的にどんな操作ですか?
73:デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
16/04/13 00:00:27.02 z3tTaqtH0.net
>>67
そんなに教えて欲しいのか?
添削してやるから定義してみな。
74:デフォルトの名無しさん (ワッチョイ 9da8-QzB1)
16/04/13 00:28:53.46 CqRnSqIY0.net
>>70
定義するのはおまえだよ
小学生以下のすり替えしてんじゃねえ
つーか誰が何を主張してるのか整理できない
掛け値なし小学生以下の論客くずれじゃしゃーねーかw
75:デフォルトの名無しさん (ワッチョイ d37b-pOi2)
16/04/14 03:08:20.77 PjjDqAVF0.net
>>71
教えをこう時は「お願いいたします」と頭を下げるのが、小学生でも知ってる常識だ
バカめ
76:デフォルトの名無しさん (アウアウ Sa67-rJyw)
16/04/14 03:47:34.18 /Il1GiFba.net
パンパカパ~ン
77:デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)
16/04/14 13:08:33.42 bhJKkgbs0.net
もし一週間後にこの世から C++ が消滅するとして、
お前らはどの言語にいくの?
D? Rust?
78:デフォルトの名無しさん (ワッチョイ db38-TaqW)
16/04/14 13:11:50.21 rJmmubWG0.net
>>74
JavaScriptに逃げます
79:デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
16/04/14 13:18:07.01 /lkdV6bx0.net
>>72
おまえに教えを請うバカは全宇宙に1人もいねーよど低脳
おまえの主張が俺に伝わらなくて困るのはおまえだろ
俺にとって顔も知らん池沼のあうあうあーが意味わかんなくても当たり前だし
80:デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
16/04/14 13:30:04.13 RrIZ4ynPM.net
関数にexternを付ける意味って何ですか?
普通、外部リンケージの関数を使うときはプロトタイプ宣言をすればすむ話ですよね
81:デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
16/04/14 13:38:38.96 EGbMBKF8M.net
extern cを付けるなら意味あるよ
82:デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)
16/04/14 14:18:48.75 OJhwzOCe0.net
俗語として、"A" は接吻、"B"はペッティング、"C" は性器同士の接触を伴う性行為、すなわちセックスである
一方で C++ において extern 修飾子はそれを外部に公開することを示す
したがって extern "C" とは
83:デフォルトの名無しさん (スプー Sd2f-Gtsw)
16/04/14 14:48:57.71 r/b7CawPd.net
エクスタシー
84:デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
16/04/14 15:46:36.79 RrIZ4ynPM.net
>>78
それはそうですが、externだけの場合の話です
>>79
感心しました。C#もお願いします
85:デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
16/04/14 16:05:37.53 Bx+gDZ8M0.net
extern+関数は関数内部で未定義の外部参照関数を一時的に宣言したりする場合に使う
86:デフォルトの名無しさん (ワッチョイ 6ba8-Jz3o)
16/04/14 16:21:43.87 LtT4shjO0.net
>>74
Rust で C++ コンパイラの開発を試みます。
87:デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
16/04/14 16:51:00.65 RrIZ4ynPM.net
>>82
プロトタイプ宣言との違いが分かりません
すみませんが例を示していただけないでしょうか?
88:デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
16/04/14 17:34:52.06 Bx+gDZ8M0.net
関数内部でプロトタイプと同じ書き方してみろよ
extern記述しないとできないから
89:デフォルトの名無しさん (スプー Sdaf-VZXL)
16/04/14 17:41:13.29 tV4LbGhWd.net
デキタァ…
90:デフォルトの名無しさん (ワッチョイ 4bdc-WXps)
16/04/14 17:51:08.75 Y6Qtie590.net
C++では外部関数を宣言する時のexternは省略可能じゃなかったっけ?
付けても害はないし、つけなくても意味は同じ。
古いCとの互換性とかで残ってるんだと思ったが、
Cにおいても「externなしだと曖昧になる場面」てのが思い浮かばない。
g++ では関数内での外部関数宣言もexternなしで通ったよ。
91:デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
16/04/14 17:55:10.24 Bx+gDZ8M0.net
ま、今は色々仕様が確定してきてそこら辺ユルユルになってきているけどな
92:デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
16/04/14 17:56:53.73 Bx+gDZ8M0.net
昔は関数の内部に構造体書いたり関数の宣言とか出来なかったんだぜ
93:デフォルトの名無しさん (ワッチョイ 4bdc-WXps)
16/04/14 20:24:15.71 Y6Qtie590.net
そういえば下のような感じで、外部関数のプロトタイプ宣言と
引数型の簡単な変換のインライン定義とを並べて書くときに…
namespace SomeSpace {
extern bool some_condition_check(const char* str);
inline bool some_condition_check(const std::string& str) {return str.c_str();}
bool another_condition_check(const char* str);
inline bool another_condition_check(const std::string& str) {return str.c_str();}
}
externを書いておくと関数名がきれいに縦に並んでちょっと見やすくなる
という効用があるね。"extern" と "inline" の字数が同じだから。
94:デフォルトの名無しさん (ワッチョイ 5f13-mNwz)
16/04/14 20:43:24.46 f1hhftJp0.net
>>89
へえ‥今は関数の内部に構造体の定義が書けるんだ‥新鮮だね
95:デフォルトの名無しさん (JP 0H07-DByn)
16/04/14 21:23:16.59 BY7gxQ6DH.net
関数内関数は return 有無の見間違えとか面倒くさいから嫌い
96:デフォルトの名無しさん (ワッチョイ a742-VZXL)
16/04/14 21:30:57.47 4DxPT4rq0.net
>>92
lambdaもだめか
97:デフォルトの名無しさん (オッペケ Sr27-Gtsw)
16/04/14 21:43:18.93 sprOrblAr.net
>>85~>>86の流れにワロタ
98:デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
16/04/14 22:38:49.39 /lkdV6bx0.net
staticな関数原型と衝突したことを検出するために
自分の関数原型と関数定義をexternにするとか?
今となってはD組の話、とタカをくくると思わぬところで足をすくわれる
# 死刑執行がおせーんだよ >WG21
99:デフォルトの名無しさん (ワンミングク MMef-8wQM)
16/04/15 00:42:56.90 MuKGbCphM.net
asioはいつ標準に入るんだ
100:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/15 08:37:52.62 wcmNmqit0.net
static void f();
extern void f();
一体何を検知したいのか
101:デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
16/04/15 15:29:12.25 wsA6y7yQM.net
>>87
自分もそう理解してました
実はコードはC++でなくCなのですが、まぁそこは同じですよね
NASA、エアバス、ボーイングなどが参画してる某OSSなんですが、
あまり洗練されたコードじゃないので深く意味を考えないほうがいいかも
102:デフォルトの名無しさん (スプー Sdaf-VZXL)
16/04/15 15:37:21.93 rmsnL02Wd.net
struct hoge{ std::string s; };
std::array< char, sizeof( hoge ) > buf;
hoge* a = new( buf.data() ) hoge;
a->s = "aaaaaaaaaaa";
std::array< char, sizeof( hoge ) > buf2;
buf2 = buf;
hoge* b = reinterpret_cast< hoge* >( buf2.data() );
b->s = "bbbbbbbbbb";
std::printf( "%s %s\n", a->s.c_str(), b->s.c_str() );
aとbはオブジェクトとして使っても大丈夫ですか
103:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/15 15:53:10.39 CjDQhw6r0.net
ダメ
104:デフォルトの名無しさん (スプー Sdaf-VZXL)
16/04/15 16:08:36.54 rmsnL02Wd.net
なにゆえですか
105:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/15 16:14:01.72 wcmNmqit0.net
> new( buf.data() ) hoge
これが許されない
106:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/15 16:18:15.70 wcmNmqit0.net
ハゲ「デストラクタを持つようなクラスがメモリレベルでコピーできるわけないだろハゲ」
107:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/15 16:22:54.24 CjDQhw6r0.net
>>101
これ
buf2 = buf;
これではstd::stringをメンバとして含む非PODオブジェクトをバイナリコピーしちゃってる
2つを別々にplacement new/deleteすれば問題ないと思うけど
108:デフォルトの名無しさん (ワンミングク MMef-8wQM)
16/04/16 00:18:14.54 /5mBf/vNM.net
aはいいでしょ。
デストラクタ呼んでないからリークするけど。
bは駄目
109:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 00:28:56.13 Wk1F8zu40.net
二つ前のレスでわざわざplacement newに問題があると教えてやってるのに
問題無いと盲信するのは労害に違いない。
まあオツムの進化がPODで止まっているようでは仕方ない
110:デフォルトの名無しさん (ワンミングク MMef-8wQM)
16/04/16 00:33:12.94 /5mBf/vNM.net
>>106
え?何で?
111:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 06:08:39.46 4BDbPdkp0.net
>>106
自分こそ老害であるとは思わないのかw
老人用オムツつけてるんじゃないのかおい
112:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 11:08:08.36 Wk1F8zu40.net
placement newの戻り値をdeleteしちゃう低能には難しかったようだ
alignas(aho) char buf1[sizeof(aho)];
113:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 12:14:16.20 Wk1F8zu40.net
ついでにPODでなければバイナリーレベルでコピーできないという訳ではない
struct a() { // 非PODだがメモリコピー可能
public: double v;
private: double w;
};
114:デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
16/04/16 12:23:56.26 KhM6yuxr0.net
privateにあるデータ表現に依存するのは隠蔽の観点からはNGだけどね
115:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 13:45:45.95 4BDbPdkp0.net
>>109
やけに自信満々で勿体ぶってると思ったらそれだったかwオムツ着用じいちゃん
std::array<char, N>で得られる領域は1バイトアライメントになるとでも思い込んでいそうだな
116:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK77-vtUn)
16/04/16 14:01:09.62 ri69Z7UDK.net
カスタムアロケータのちょっとした練習です。
URLリンク(ideone.com)
117:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 14:05:28.67 4BDbPdkp0.net
>>110
そんなこと言い出したらis_pod<T>::valueがfalseになるのに実はメモリコピーして問題ないなんて例はいくらでも出せるわ
>>99のhogeはメモリコピー不可なのは明らかなのによくそんな難癖つけられるもんだな
ナウでいけてるヤングはメモリコピー可能なオブジェクトかどうかはis_pod<T>::valueで判断する
118:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 14:42:33.12 4BDbPdkp0.net
てか
>struct a() {
なんなんだよ()って?そんな文法知らないし、コンパイルできないんですけどw
俺が書いた
>placement new/deleteすれば問題ない
のdeleteを「placement newの戻り値をdeleteしちゃう」と解釈しちゃうくらいのアスペなら
こういうところは間違わないほうがいいよ
119:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 14:43:42.03 Wk1F8zu40.net
規格にはコピー可能かどうかの判断基準としてstd::is_trivially_copyable_vが用意されていると言うのに
trivially copyableの概念が確立されていなかった時代のJIS規格票()で見かけたPODを信じちゃったんだろうな低能は
120:デフォルトの名無しさん (スプー Sd2f-Gtsw)
16/04/16 14:48:58.78 i8qYlRuXd.net
>>110
よくわかんないけどそれPODと呼べないんだっけ?
121:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 14:54:31.09 Wk1F8zu40.net
>>117
★の条件が満たせない
PODの条件
standard-layout
すべてが非vritual
アクセス制御が一通り★
:
トリビアルなクラス
トリビアルなデフォルトコンストラクター
trivially copyable
トリビアルなコピー/ムーブコンストラクター
トリビアルな代入/ムーブ演算子
トリビアルなデストラクター
122:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 15:01:12.47 Wk1F8zu40.net
>アスペならこういうところは間違わないほうがいいよ
ちょっとワロタ
その理屈は正しいw
123:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 15:07:51.48 4BDbPdkp0.net
>>116
>std::is_trivially_copyable_v
またやっちゃたようだな。is_trivially_copyable_vなんてあるか?
is_trivially_copyableならあるが
せっかく知識はあるのにしょうもないところで墓穴を掘るタイプだな
124:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 15:13:47.13 4BDbPdkp0.net
アハ!誰か分かっちゃったwww
125:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/16 15:16:16.66 Wk1F8zu40.net
>>120
悪ぃ悪ぃ、規格じゃなくてN4567見てたわ
で、
>std::array<char, N>で得られる領域は1バイトアライメントになるとでも思い込んでいそうだな
思ってたけど、違うの?
URLリンク(ideone.com)
126:デフォルトの名無しさん (アウアウ Sa67-33s9)
16/04/16 18:10:30.85 Xvqhm3pva.net
誰だ!
127:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/16 19:32:32.34 4BDbPdkp0.net
>>122
std::arrayのアライメントの件についてはあなたが正しかったことを�
128:S面的に認めます new char[N]なら規格の5.3.4/10で "an integral multiple of the strictest fundamental alignment requirement" になることが保証されているのと混同してた よって、std::arrayで確保した領域でalignof(T)が1以外のオブジェクトをplacement newするのはあなたの指摘通り許されません std::arrayの代わりにstd::aligned_storageを使うべきですね
129:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/17 01:00:29.55 xPbVippa0.net
>>113
ここはお前の日記帳じゃない
ゴミを垂れるな
誰かがそのウンコードを真似したらどうすんだ
130:デフォルトの名無しさん (ワッチョイ d37b-pOi2)
16/04/17 08:26:09.36 b+eVByZe0.net
>>76
整数型の正しい使い方を定義できないゴブリン脳が一匹いる
>>58だ
131:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/17 11:50:26.61 xPbVippa0.net
long longとint_least64_tの使い分けがややこしい
132:デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
16/04/17 13:17:00.83 xNZ/zNBq0.net
ビット数の保証がいらんときといるときで使い分けることの何がややこしいんだよ
133:デフォルトの名無しさん (ワッチョイ 7b54-bJ9H)
16/04/17 14:09:07.52 oaifAOu80.net
実装上ではほぼ同義だからだろ
まあ規格にある int_least64_tだけ使えば良いと思うけど
134:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/17 14:23:59.21 xPbVippa0.net
>>128
long longとint_least64_tの違いは
それより小さくて64ビット以上の他の型が存在するかどうかなのだが
何を言っているんだお前は
135:デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
16/04/17 14:51:46.39 efZowWH00.net
128ビットになたら long long long になるん??
136:デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
16/04/17 15:06:35.52 l5b4C1Fn0.net
そこはint128_tで良くね?
137:デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
16/04/17 15:09:31.34 l5b4C1Fn0.net
まあ、いろいろ考えるとleastとfast系しか使えなくなっちゃうんだけど。
138:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/17 15:24:52.93 xPbVippa0.net
最低の保証ならchar/short/long/long longでも一応事足りるし
何より2の補数表現が保証されたint??_tは捨てがたい
139:デフォルトの名無しさん (ワッチョイ b7cf-cFRK)
16/04/17 15:30:50.77 JUdcx65W0.net
誰か >>130 が何を言ってるか分かる人、解説を。
140:デフォルトの名無しさん (ブーイモ MM47-Gtsw)
16/04/17 15:48:10.23 nxW4nqqmM.net
>>135
お前日本人?
64bitより小さくて、かつ、64bit以上の型が存在するかってことだろ?
つまり、
えっ?
141:デフォルトの名無しさん (ワッチョイ 0b91-Gtsw)
16/04/17 15:52:23.49 CNQH8xMB0.net
安くて購入段階でLinuxぶち込んである申し分ないノートPCない?
一台増やそうと思うんだが
142:デフォルトの名無しさん (ワッチョイ 7b54-Gtsw)
16/04/17 16:02:37.24 oaifAOu80.net
long long(128bitかもしれない)以下で64bit型以上(intが64bitかもしれない)の型が存在してるような環境
かつlong longとも異なら無ければ使う意味はないよ
だって大きさの定義はlong longと同じだから
143:デフォルトの名無しさん (ワッチョイ 7b54-Gtsw)
16/04/17 16:03:57.71 oaifAOu80.net
間違い
使う意味が無いではなく、使い分ける意味がない
144:デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
16/04/17 16:30:44.23 l5b4C1Fn0.net
int??_tって、存在自体が処理系依存なんだよねー。
低レベル用途には必須だけど、アプリ用途だとleast/fastの方が使いやすいと思った。
145:片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ d38f-2SUX)
16/04/17 16:40:45.16 EFtPKpBL0.net
よお、お兄ちゃん。新しい武器が入ったぞ。装備していけよ。
URLリンク(github.com)
146:デフォルトの名無しさん (ワッチョイ eb7b-Jz3o)
16/04/17 18:32:32.08 ZM27BkVH0.net
>>140
C99, C++11は規格になってるだろ
147:デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
16/04/17 20:04:12.55 l5b4C1Fn0.net
>>142
規格で処理系依存ってなってたと思うけど、違った?
148:デフォルトの名無しさん (ワッチョイ 0b7b-8wQM)
16/04/17 20:33:26.12 BVEBxeTg0.net
たしか必須じゃないよね
とは言っても対応してない環境は余程特殊なものだろうから無いことを心配するより他の心配した方がいいんじゃないかと思う
149:デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
16/04/17 22:04:32.45 l5b4C1Fn0.net
>>144
どう判断するかは個々人の問題なので。
150:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/17 22:52:17.63 xPbVippa0.net
まあ規格はstd::stringすら処理系定義だったりするけど
Cのint64_tはかなりネガティブな書き方がしてあるから仕方ない
sprintf_sに至っては虫の息
151:デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)
16/04/18 00:56:20.08 5Ir4szOL0.net
int??_t じゃなく int や long を使うべきときってある?
152:デフォルトの名無しさん (ワッチョイ cf53-q6hj)
16/04/18 06:24:07.28 0gSzJGDh0.net
>>137
URLリンク(kakaku.com)
153:デフォルトの名無しさん (オッペケ Sr27-Gtsw)
16/04/18 18:05:37.23 geM4ik0Wr.net
>>147
ループ変数にintじゃなくstd::int64_tとか使ってたら
変人だと思うわ
154:デフォルトの名無しさん (ドコグロ MM0f-Gtsw)
16/04/18 19:50:05.92 C+iDXaNwM.net
>>149
必要なら普通に使うけど?
155:デフォルトの名無しさん (ワンミングク MMef-Gtsw)
16/04/18 20:19:07.03 y+UdHKG3M.net
特になんもなければstd::size_t使ってるわ
といってもrange-baseしか最近使ってないけどね
156:デフォルトの名無しさん (ワッチョイ 3fa6-Jz3o)
16/04/18 21:08:16.98 Qvk/GJ/v0.net
auto?
157:デフォルトの名無しさん (アウアウ Sa67-pOi2)
16/04/19 03:50:29.85 sEKB8saBa.net
auto i = 0ull;
158:デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
16/04/19 08:38:50.82 SvHoNoSF0.net
>>151
よう!俺。
159:デフォルトの名無しさん (ワッチョイ cf20-q6hj)
16/04/19 09:17:49.99 Mp5r7P9F0.net
hashの出力がsize_tとかやめて欲しい
uint_least160_tつーか、uint_least<160>がねえのもおかしいし
160:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/19 09:55:09.78 nL6Ii7Gq0.net
>>155
バーカ
161:デフォルトの名無しさん (ワッチョイ db38-TaqW)
16/04/19 10:08:58.32 FK9rMfbT0.net
>>156
喧嘩したけりゃ他行きな小僧
162:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/19 10:30:19.44 nL6Ii7Gq0.net
>>157
俺はこのバカに少なくとも「バーカ」って言ってあげた
それでお前はこのバカになにが出来るの?
なにも出来ないならお前が消えな
163:デフォルトの名無しさん (ワッチョイ db38-TaqW)
16/04/19 10:58:38.53 FK9rMfbT0.net
>>158
喧嘩したけりゃ他行きな小僧
164:デフォルトの名無しさん (ワッチョイ 3742-Jz3o)
16/04/19 11:04:51.69 pETlWi8B0.net
ID:nL6Ii7Gq0 は いらない子!
165:デフォルトの名無しさん (ワッチョイ 277b-GRux)
16/04/19 11:13:16.48 nL6Ii7Gq0.net
俺は喧嘩売ってるつもりはないし、>>155という度し難いバカに親切にも「バーカ」って言ってあげただけだよ
俺に喧嘩売ってるのがFK9rMfbT0、pETlWi8B0
本当に役に立たないゴミだな
166:デフォルトの名無しさん (ワッチョイ db38-TaqW)
16/04/19 11:15:39.94 FK9rMfbT0.net
>>161
喧嘩したけりゃ他行きな小僧
167:デフォルトの名無しさん (ワッチョイ 0b7b-8wQM)
16/04/19 11:22:46.44 qXd1Jas40.net
荒らしに構うなって前世紀から言われてるだろ
168:tasuketekesuta (ワッチョイ d3d5-j49k)
16/04/19 21:50:00.65 spYNmTFF0.net
DataSet/DataAdapterの仕様についてご教授下さい。
■DataSet/DataAdapterの仕様
DataAdapter には、SELECT、UPDATE、INSERT、DELETEのSQL文が設定できます。
Fillメソッドを実行するとSELECTのSQL文の基づいてDataSetにデータを読み込みます。このときDataSetの各行には「編集なし」のマークがついています。
値を更新するとそのマークが「更新済」、削除すると「削除済」、データを追加すると「追加済」のマークに変わります。
Updateメソッドを実行すると、DataSetの各行のマークに応じて、設定してあるUPDATE、INSERT、DELETEのSQL文を実行します。
169:tasuketekesuta (ワッチョイ d3d5-j49k)
16/04/19 21:51:02.12 spYNmTFF0.net
>>164 の続き
■実施したい事【概要】
DataAdapterのFillメソッドで取得したDataSet内のDataTableに対して、
挿入/更新操作をかけていき、全ての処理が終わったら、UPDATEを行う。
その際、DataTableに挿入した順番でDBへの挿入SQLが流れてほしい。
170:tasuketekesuta (ワッチョイ d3d5-j49k)
16/04/19 21:51:29.36 spYNmTFF0.net
■実施したい事【詳細】
DataTable^ tbl;//←DataAdapterのFillメソッドで取得したDataSet内のDataTableだとします
while(10000行程度ループ){
DataRow^ tg_row = tbl->Rows->Find(ループ毎に変わる値);
if( static_cast<DataRow^>(tg_row)==nullptr){
DataRow^ row = tbl->NewRow();
row["hogehoge"] = ループ毎に変わる値;
tbl->Rows->Add(row);//←★★★★★★初期挿入★★★★★★★
}
else{
row["hogehoge"] = ループ毎に変わる値;
}
}
上記のソースで5000行のレコードが出来たと仮定します。
※つまり"ループ毎に変わる値"の重複が半分あったということ
この状態でUPDATEを行うと、
なぜか、初期挿入した順番通りにinsert文が発行されません。
※DB上で見ると順番がごちゃまぜです
171:デフォルトの名無しさん (ワッチョイ d3d5-j49k)
16/04/19 21:52:10.39 spYNmTFF0.net
>>164 の続き
■質問①
なぜ、初期挿入した順番通りにinsert文が発行されないのでしょうか?
tbl->Rows->Findで取得したレコードの値を変更すると順番が変更になってしまうのでしょうか?
■質問②
初期挿入した順番にinsert文が発行されようにするには、
どの様にしたら良いでしょうか?
解決策をご教授下さい。
172:デフォルトの名無しさん (ワッチョイ b763-Gtsw)
16/04/19 21:59:51.04 4s2SrkGy0.net
ID:spYNmTFF0
荒らしは去れ
173:デフォルトの名無しさん (アークセー Sx27-bDYe)
16/04/20 03:23:29.57 y2Y1qnWRx.net
>>167
データベースに依存した問題
てか、SQLのほうの話題だろ
174:デフォルトの名無しさん (ワッチョイ cf13-kHia)
16/04/20 05:58:33.09 Ysvgw+BH0.net
>>167
そもそも、挿入順とDB上での順番が一致することは保証されていない。
URLリンク(q.hatena.ne.jp)
175:デフォルトの名無しさん (アウアウ Sa67-33s9)
16/04/20 07:18:51.45 dTPS4iPYa.net
そもそも格納順番とかそっちに任せるから、とにかく最新情報科学技術の粋を結集して高速にデータを参照させてくれってのがデータベースでしょ
176:デフォルトの名無しさん (オッペケ Sr27-Gtsw)
16/04/20 07:58:13.83 thevk6F2r.net
いいえ違います
177:デフォルトの名無しさん (オッペケ Sr27-Gtsw)
16/04/20 08:01:43.93 thevk6F2r.net
クエリーでなくリーレション(アトリビュートのドメインの直積)にはそもそも概念モデルとして順序の概念が無いし
178:デフォルトの名無しさん (ワンミングク MMef-Gtsw)
16/04/20 09:22:54.95 8iJwmy9eM.net
まぁデータベースは表ではなくて集合を表現したものだからな
179:デフォルトの名無しさん (ワッチョイ 4b40-u1fT)
16/04/20 23:06:05.59 sW5MEHFW0.net
不慣れなプログラマが作る全ソースが全ヘッダを読み込むので困る。ちょっと弄ると全ビルド
180:デフォルトの名無しさん (ワッチョイ 0b7b-y51b)
16/04/20 23:42:45.99 ZQBKVnsi0.net
すぐテンプレ使いたがる馬鹿のコードなんてそんなもんよ。
181:デフォルトの名無しさん (ワッチョイ 19e3-zfCm)
16/04/21 22:25:29.05 3sH/HRos0.net
翻訳環境にとんでもない化け物がお手頃で使えるようになった今、
理想的には、実行イメージ全体が1つの翻訳単位に収まっていることだね
翻訳単位の境界をまたげない最適化が結構もったいないことになってるから
182:デフォルトの名無しさん (ワッチョイ 4db4-z8Ax)
16/04/22 16:20:21.52 VK3N1B+b0.net
つまり cc と ld を一つのコンパイル単位にまとめてコンパイルすれば Linux カーネルが3秒でビルドできる爆速コンパイラに
183:デフォルトの名無しさん (ワッチョイ 3e16-zfCm)
16/04/22 16:27:16.85 trDHzPiw0.net
いやコンパイラが爆速かどうかではなくバイナリを爆速にするって話
最適化をがっつりやるならその分の時間はかかるだろうし
184:デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
16/04/22 17:55:39.19 bwUeH041M.net
テンプレート書くよりその都度コピペした方が色々はやいよねコンパイル時間とか
185:デフォルトの名無しさん (JP 0H41-SZE8)
16/04/22 19:18:24.79 cAq2nbH2H.net
そして地震がきた時にクソコードの山に押し潰されるのを待つのだ
186:デフォルトの名無しさん (ワッチョイ 4b02-gALo)
16/04/22 19:35:18.98 LlaEs4+z0.net
テンプレートはコンテナ以外で明確に使った方が良いケースはどんなのがある?
187:デフォルトの名無しさん (ワッチョイ 4b3c-FmnC)
16/04/22 19:47:23.35 x1AcDznE0.net
アルゴリズムとか
188:デフォルトの名無しさん (アウアウ Sa05-1g4J)
16/04/22 21:06:06.11 7+eL8tO2a.net
保守性のために標準ライブラリを使うんだろ
コーディング速度や実行速度の為ではない
189:デフォルトの名無しさん (ワンミングク MMd0-3Kaz)
16/04/22 21:27:17.03 +uE+J+gQM.net
標準ライブラリを使う使わないの話はお前以外してない
190:デフォルトの名無しさん (ワッチョイ 217b-xSxp)
16/04/23 02:40:57.38 m/KBeaUS0.net
>>182
信号処理とかだとテンプレートなしではもう無理
論理的に同じ処理をするのに、整数、float、doubleで別々のコードを書かなきゃいけないなんて
やってられない
191:デフォルトの名無しさん (ワッチョイ f1e1-gALo)
16/04/23 08:43:35.78 F/8DDl4q0.net
>>182
テンプレート引数にテンプレートを指定する手法が必要な時。
192:デフォルトの名無しさん (ワッチョイ 6be7-FmnC)
16/04/23 08:46:03.16 bKfgUY2x0.net
ファクトリーメソッドとかかなぁ。
193:デフォルトの名無しさん (ワッチョイ 4db4-z8Ax)
16/04/23 14:18:29.26 nvSaEwLX0.net
>>186 はまさに >>183 の例だな
型の振る舞いだけに着目して抽象的な操作を記述できるようにする
だから静的型付けの言語でテンプレートやらジェネリクスやらをまともに使うには型制約が必須なんだけど、
未だに型制約を記述するための支援がない言語があるらしい
194:デフォルトの名無しさん (ワッチョイ 57e6-zfCm)
16/04/23 19:16:14.77 tcao+QTV0.net
>>186でFA
195:デフォルトの名無しさん (ワッチョイ 1030-gALo)
16/04/23 20:18:32.35 hfDo0ds00.net
例をあげようって話の流れで、なんで一例に対してファイナルになるんだよ
196:デフォルトの名無しさん (ワッチョイ 57e6-zfCm)
16/04/23 21:02:12.70 tcao+QTV0.net
> 整数、float、doubleで別々のコードを書かなきゃいけないなんて
やってられない
じゃあ、これ以上の答えがあるってのか?
197:デフォルトの名無しさん (ワッチョイ 1ec0-v6Xr)
16/04/23 21:36:34.80 zzpDuGYL0.net
1st アンサーかも
198:デフォルトの名無しさん (ワッチョイ 1030-gALo)
16/04/23 23:38:40.69 hfDo0ds00.net
>>192
それはテンプレートの基本機能じゃね?
199:デフォルトの名無しさん (ワッチョイ 5cec-zfCm)
16/04/24 06:26:37.85 936uZ4pr0.net
あとは重箱の隅みたいな細かいことばかりだと思うが?
200:デフォルトの名無しさん (ワッチョイ 1030-gALo)
16/04/24 09:20:15.79 bi4aOyNo0.net
いやだから、例をあげろっていう話の流れだったんじゃ
201:デフォルトの名無しさん (ワッチョイ 6be7-FmnC)
16/04/24 09:37:21.56 qrH7Oshx0.net
唯一解が出ちゃってぽしゃったんだよ。
202:デフォルトの名無しさん (スプー Sdf8-DbIH)
16/04/24 09:53:33.85 PJXOgY3Xd.net
>>195
非型は?
203:デフォルトの名無しさん (アウアウ Sa05-L+iy)
16/04/24 14:18:35.81 nyww5Nv/a.net
コンパイル時に計算したい場合か
204:デフォルトの名無しさん (オッペケ Sr8d-DbIH)
16/04/24 22:23:36.21 tmf17AXnr.net
オナニー以外に使い道は無い
205:デフォルトの名無しさん (ワッチョイ 4b02-gALo)
16/04/24 22:35:15.43 C4if0ujR0.net
オーバーロードで事足りる程度でもテンプレートなら行数を圧縮することはできる
206:デフォルトの名無しさん (ワッチョイ f140-FmnC)
16/04/25 02:07:03.74 4nVWf6Tg0.net
行数を圧縮すると成果物が少ないと評価される…
207:デフォルトの名無しさん (アウアウ Sa05-1g4J)
16/04/25 08:14:09.84 4toUZyy7a.net
糞査定なんとかしないと
208:デフォルトの名無しさん (スプー Sdf8-DbIH)
16/04/25 08:48:18.03 RM4kY/BSd.net
C++11になってVariadicと右辺値/左辺値が登場したので、型のバリエーションだけじゃなくてもっといろんな
パターンについてのバリエーションをtemplateで表現できるようになった。
俺はヘタレなのでかなり難しくなったと感じている。
209:デフォルトの名無しさん (ワッチョイ 5c42-zfCm)
16/04/25 13:43:44.73 d+bG+pO00.net
>>201
無数にあっちゃいけない関数はオーバーロード一択でそ
210:デフォルトの名無しさん (JP 0H41-uQxx)
16/04/25 14:15:42.28 FkG7uZgrH.net
質問失礼します。
'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' を読み込みました。Cannot find or open the PDB file
'abc.exe': 'C:\Visual Studio 2008\Projects\xyz.dll' をアンロード
このアンロードはどうやって止めるのでしょうか?
実行した際に、dll内のメソッドを参照できないようで、以下のエラーとなります。
ハンドルされていない例外: System.IO.FileNotFoundException: ファイルまたはアセン
ブリ 'hoge.dll'、またはその依存関係の 1 つが読み込めませんでした。
指定されたモジュールが見つかりません。
場所 hoge.hogeclass..ctor()
場所 main(Int32 argc, SByte** argv)
場所 _mainCRTStartup()
コンパイルはできています。
よろしくお願いします。
(なんか急にできなくなった気がします。前は、問題無だったはずなのになぁ)
211:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK9b-0LZu)
16/04/25 14:21:48.07 9Ydy9LbhK.net
>>206
ファイル'hoge.dll'が見付からないからエラーになってる。'hoge.dll'はどこにある?
212:デフォルトの名無しさん (JP 0H41-uQxx)
16/04/25 16:01:11.85 FkG7uZgrH.net
回答ありがとうございます。
exeと、同じフォルダにあります。
読み込みました」って、出てるから、いったん読み込みはできてると思うのですが。
Cannot find or open the PDB file
(このPDBについてのメッセージは、関係ないと思います)
よろしくおねがいします。
213:デフォルトの名無しさん (ワッチョイ 98ff-nTsV)
16/04/25 16:14:18.30 Y5eHwd9i0.net
C++/CLIのほうで聞いたほうがいいかも
そのパスはほんとにそのまま?日本語混ざってたりしないよね
214:デフォルトの名無しさん (ワントンキン MMd0-DbIH)
16/04/25 16:17:09.73 nodCWmX5M.net
pdbも同じとこにおきゃいいじゃん
215:デフォルトの名無しさん (JP 0H41-uQxx)
16/04/25 16:33:35.80 FkG7uZgrH.net
回答ありがとうございます。
>209
日本語は、入っていません。
>210
拾ってきたdllでして、pdbがありません。
他にも、以下のような、謎のメッセージも出ています。
'abc.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'abc.exe': 'ImageAtBase0x10000000' をアンロード
よろしくおねがいします。
216:デフォルトの名無しさん (ワッチョイ 397b-DbIH)
16/04/25 17:20:39.11 Vz/PfYjH0.net
拾い物のdll名を出せない理由は?
盗品だから?
217:デフォルトの名無しさん (ワッチョイ 66a6-zfCm)
16/04/25 18:20:21.95 zMzD7cFX0.net
どーでもいいわ、んなこと
218:デフォルトの名無しさん (ワッチョイ 3e4e-DbIH)
16/04/25 21:18:39.53 nQ9xWXS00.net
>>211
まさかデバッガでステップインしようとしてる?
219:デフォルトの名無しさん (ワッチョイ 3ee5-v6Xr)
16/04/25 22:09:57.56 p2RYg3GI0.net
右辺値なんて無くてもいいよね
220:デフォルトの名無しさん (ワントンキン MMd0-DbIH)
16/04/25 22:22:09.27 nodCWmX5M.net
>>211
ビルドの設定が違うとかじゃないの
ランタイムをマルチスレッドにするかマルチスレッドDLLにするかとか
depedency walkerかなんかで必要なdll探してみて足りなきゃ置く、ランタイムのバージョンそろえる、そもそもランタイムの要否を調べてみたら
221:デフォルトの名無しさん (ワッチョイ 6aa6-gALo)
16/04/25 22:25:01.35 gNn0n/ow0.net
>>215
なんでどさくさに紛れて変なこと言うの?www
222:デフォルトの名無しさん (ワッチョイ 7063-DbIH)
16/04/25 22:35:01.48 yNWSO4Dk0.net
>>206
.NET Frameworkの質問をC++スレでするな低能
知らない奴がdepedency walkerとか言い出しちゃうだろ
223:デフォルトの名無しさん (ワッチョイ 3951-DxlG)
16/04/25 23:23:42.73 yWovrPca0.net
>>206
xyz.dllが使ってる他のdllが見つからなかったからxyz.dllのロードも失敗したってことだろ。
224:デフォルトの名無しさん (ドコグロ MM5c-DbIH)
16/04/26 07:05:42.42 9Pm0YF2lM.net
>>215
理解できないものはないものとして使わない
って言うのは正しい姿勢
なので
> 右辺値なんて無くてもいいよね
と君が考えるのは正しい
225:デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
16/04/26 08:03:25.27 uoCWhHDE0.net
他人に同意を求めるつもりで書いたなら正しくないけどな
226:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 08:08:11.99 X2oLSlFmd.net
右辺値がない?
227:デフォルトの名無しさん (ワントンキン MMd0-DbIH)
16/04/26 08:30:56.28 15Xmlz4WM.net
俺も右辺値参照いまいちよくわかってないんだけど、
doubleとかを返す関数で、return前に
double calc() {
double&& res = ...
return std::move(res);
}
は意味ないよね?
std::vector<double> calc() {
std::vector<double>&& res = {};
//ごにょごにょ
return std::move(res);
};
も意味ないよね?
const std::vector<double>& calc() {
std::vector<double>&& res = {};
//ごにょごにょ
return std::move(res);
};
は意味ある
でも、
std::vector<double> v = calc();
だと結局コピーが起きてもったいない?
const std::vector<double>& v = calc();
だと意味ある
こんな認識なんだけど正しいのだろうか
228:デフォルトの名無しさん (ワッチョイ 8dec-zfCm)
16/04/26 08:46:32.55 rGhmFmB70.net
なんでresを右辺値参照にしてるんだ? そこは関係ないぞ。
C++98ではテンポラリを束縛する参照にconstが必須だったが、
それではムーブ動作させるのにconst_castが必要というアフォなことになっていて、
じゃあconst任意の参照を新設しましょうって出てきたのが右辺値参照で、
使うときの考え方は参照先がテンポラリの場合に使うものだ。
229:デフォルトの名無しさん (アウアウ Sa05-L+iy)
16/04/26 09:47:41.48 A4vuhbbUa.net
const T&で大体十分
230:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 10:46:34.53 X2oLSlFmd.net
どんな場合もローカル変数を参照で返してはいかんよ
231:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 10:48:10.37 IHpx3UMhd.net
んなこたない
232:デフォルトの名無しさん (ワッチョイ 3ee5-v6Xr)
16/04/26 11:06:37.75 GLJzO2KH0.net
そもそも右辺値参照みたいな変な事をしなくても良いコードを書けば良い。
233:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 11:34:25.19 X2oLSlFmd.net
>>227
いかんでしょ
234:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 11:35:38.49 IHpx3UMhd.net
んなこたない
235:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 11:52:48.14 X2oLSlFmd.net
>>230
いやいかんでしょ
236:デフォルトの名無しさん (ワッチョイ 3ee5-v6Xr)
16/04/26 11:57:22.86 GLJzO2KH0.net
右辺値参照を使わざるを得ない状況なんて無いよね。
237:デフォルトの名無しさん (ワッチョイ 4306-gALo)
16/04/26 17:12:26.21 sp7HDy2O0.net
お前がそう思うんならそうなんだろう お前ん中ではな
っつぅか
チューリング完全ならなんでも書けるんだからC++自体いらないよね、K&Rで充分
っつぅか
238:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 17:55:22.27 X2oLSlFmd.net
>>232
それってRVOでなんとかなるの意?
239:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 19a8-gALo)
16/04/26 18:01:58.79 1VUmXePL0.net
言語機能の多くは抽象化の道具なんだよ。
一旦書いたら中身は忘れてしまいたいから壁を作ってその向こうに押しやる道具が必要なんだ。
240:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 18:03:13.30 X2oLSlFmd.net
まーた
241:デフォルトの名無しさん (オッペケ Sr8d-DbIH)
16/04/26 18:17:56.12 jVopD7Dvr.net
>>223
2番目はコピーが発生しないようムーブしているから意味はある
ただ安易なmoveや参照の使用は最適化を阻害するため推奨はされない
推奨される書き方はこう
std::vector<double> calc() {
std::vector<double> res = {};
return res;
}
std::vector<double> v = calc();
242:デフォルトの名無しさん (ワッチョイ 4b02-gALo)
16/04/26 18:57:35.91 tQCMt5AL0.net
>>232
アセンブラを使わずにギリギリまでチューニングしたいときに使えるんじゃないの
知らないけど
243:デフォルトの名無しさん (ワッチョイ 4db4-gALo)
16/04/26 19:07:46.09 1BXtyTOd0.net
戻り値最適化って「本当に最適化されてんのか」っていっつも不安になる
244:デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
16/04/26 19:31:52.57 uoCWhHDE0.net
意味があるのはこういう時
std::vector<double> v = {};
o.assign(std::move(v));//これ以降vは使わない
でもこれも出来るのであればstd::vector<double>を返す関数作って関数の返り値を直接引数に渡せば不要
あと、std::vectorに入れるクラスの場合(nothrowな)move operator書いた方がパフォーマンスあがる事が多い
245:デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
16/04/26 19:38:27.71 uoCWhHDE0.net
ちょっと補足
この場合のassignの定義は
void assign(std::vector<double> v){
member.swap(v);
}
こんな感じのものね
246:デフォルトの名無しさん (ワッチョイ 7063-DbIH)
16/04/26 20:22:16.94 gEJwYSMG0.net
↑糞コード
247:デフォルトの名無しさん (ワッチョイ 7063-DbIH)
16/04/26 22:14:51.75 gEJwYSMG0.net
糞コードを発明する前にstring::assignとかの標準ライブラリが
どうなってるか調べようとしないんだろか
因みにスコットメイヤーの本には値渡しはhigher costとあるな
248:デフォルトの名無しさん (スプー Sda8-DbIH)
16/04/26 22:30:23.02 X2oLSlFmd.net
まあいいじゃないか。実行時性能なんか、どうだって。
249:デフォルトの名無しさん (ワッチョイ 7063-DbIH)
16/04/26 22:53:39.31 gEJwYSMG0.net
>>239
もし最適化されてなかったら困るのか?
別にコピーが走る訳じゃない
250:デフォルトの名無しさん (アウアウ Sa05-1g4J)
16/04/26 23:32:52.19 JB7K2U7Pa.net
最適化はC++erの大好物だ
251:デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
16/04/27 01:49:55.63 GuBYWkr/0.net
こういうのは値渡しでswapした方がいいって事知らねえの?
252:デフォルトの名無しさん (ワッチョイ 19a8-gALo)
16/04/27 01:53:22.01 0mhH1Qow0.net
実際に遅いことがわかってからチューニングにとりかかっても遅くはない。
まあライブラリはどういう状況で使われるかわからんから積極的に性能も意識して欲しくはあるが。
253:デフォルトの名無しさん (ワッチョイ 617b-7Ba6)
16/04/27 02:12:47.40 GuBYWkr/0.net
>>243
例えば
void assign(const std::vector<double>& v){
member = v;
}
こうだと必ず1度コピーが動く。
void assign(std::vector<double> v){
member.swap(v);
}
こうだと引数がrvalueの場合最適化でコピーが動かない場合があるし、
C++11ならmoveになる。
swapのコストが低いのは言わなくてもわかるよね。
lvalueの場合でもコピーは1度
C++11以降で
void assign(const std::vector<double>& v);
void assign(std::vector<double>&& v);
二つ書いたときとのコスト差はswapのみ
254:デフォルトの名無しさん (オッペケ Sr8d-DbIH)
16/04/27 19:30:14.55 2yCvnT+mr.net
>>249
>コスト差はswapのみ
ムブコンのコストはどこ行ったのよ
255:デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
16/04/27 19:52:26.36 turQDkKlM.net
>>250
rvalue渡したらどっちもmoveになる
256:デフォルトの名無しさん (オッペケ Sr8d-DbIH)
16/04/27 20:04:17.37 2yCvnT+mr.net
>>251
いやならないし
参照ならassign呼び出し時のmoveは起こらない
257:デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
16/04/27 20:09:13.21 turQDkKlM.net
値渡しの方がmoveコンストラクタ自体動かない場合もあるからswapコストより差は小さくなる可能性があるという話であれば、否定はしない。
値渡し=高コスト=糞コード
と考えもせずに言う奴の反論したかっただけだからそこまで細かい説明するのであればご自由に
258:デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
16/04/27 20:16:31.83 turQDkKlM.net
>>252
想像より下だったか…
void assign(std::vector<double> v);
これにrvalue渡したらmove一回swap一回
lvalue渡したらコピー1回swap一回
void assign(const std::vector<double>& v);
void assign(std::vector<double>&& v);
これにrvalue渡したら下のが呼ばれて中でmove一回
lvalue渡したら中でコピー1回
259:デフォルトの名無しさん (ワッチョイ 6aa6-gALo)
16/04/27 20:33:00.00 56VYowtZ0.net
void assign(std::vector<double> v);
これ定義しちゃうとオーバーロードきかないんだっけ?
260:デフォルトの名無しさん (ワッチョイ 7063-DbIH)
16/04/27 23:4
261:1:06.04 ID:2JVtUYOe0.net
262:一時オブジェクトのムーブ生成(メモリ確保+ムーブ) swap内のムーブ代入(破棄+ムーブ) swap内のムーブ代入(破棄+ムーブ) f(X && p); ムーブ代入(破棄+ムーブ) 左辺値を渡した時 f(X p); 関数呼び出しのコピー生成(メモリ確保+コピー) swap内の一時オブジェクトのムーブ生成(メモリ確保+ムーブ) swap内のムーブ代入(破棄+ムーブ) swap内のムーブ代入(破棄+ムーブ) f(X const & p); コピー代入(破棄+コピー)
263:デフォルトの名無しさん (ワッチョイ 6aa6-gALo)
16/04/27 23:48:41.61 56VYowtZ0.net
>>256
メモリ確保って一口に言ってるけど
264:デフォルトの名無しさん (ワッチョイ 753c-C5As)
16/04/27 23:54:55.96 XwQarpQA0.net
std::cout << 0["2ch"];
これは合法ですか?
265:デフォルトの名無しさん (ワッチョイ 7063-DbIH)
16/04/27 23:57:03.40 2JVtUYOe0.net
むしろ、何か違法だとでも?
266:デフォルトの名無しさん (ワッチョイ 753c-C5As)
16/04/27 23:58:40.17 XwQarpQA0.net
2chは違法だと聞きました。
267:デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
16/04/28 00:08:31.03 2BwMw+ri0.net
>>256
std::vector::swapでmoveが呼ばれるとは初耳ですわ
268:デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
16/04/28 00:14:58.53 2BwMw+ri0.net
>>256
聞いて解らなくてもちょっと試してみればすぐ分かる話なのに…
269:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/28 00:22:32.02 iQ2WswSv0.net
ああ、vectorか
確かにswapは内部のポインターの交換だけで済むな。
だが値渡しがswap以外に一時オブジェクトのメモリ確保が一回多いことに変わりはない
270:デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
16/04/28 00:27:19.07 2BwMw+ri0.net
>>263
それをメモリ確保と呼ぶなら参照渡しのアドレスわスタックに積むのもメモリ確保になっちゃうけど?
271:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/28 00:39:59.18 iQ2WswSv0.net
>>264
お前の脳内ではなるのかも知れないが規格ではそう呼ばれていないし
特に関数テンプレートのようなインライン展開を期待する文脈ではスタックを消費しないだろう
std::move(obj)とか
272:デフォルトの名無しさん (ワッチョイ cb7b-RA4N)
16/04/28 00:50:17.80 2BwMw+ri0.net
理解力の乏しいやつのために書いてやったぞ
URLリンク(ideone.com)
273:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/28 01:06:21.52 iQ2WswSv0.net
中身みてないけど、言い出すと思った
そりゃ規格で省略が許容されてるから環境依存でそうなることもあるだろう
だが「標準ライブラリは>>247方式のassignを採用していない」という事実は変わらないぞ
274:デフォルトの名無しさん (ワッチョイ 37cf-JnPK)
16/04/28 01:09:47.90 0YjJiZ000.net
>>267
主張変わった? >>263 の「値渡しがswap以外に一時オブジェクトのメモリ確保が一回多い」は
取り下げってことでいいんだよね?
275:デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
16/04/28 01:23:16.15 2BwMw+ri0.net
>>267
環境依存て規格にある程度準拠してて最適化有効にしてこうならないコンパイラあるの?
標準ライブラリ云々は誰もそんな主張してないしそんな当たり前の事言われてもだから何としか
276:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/28 07:09:49.88 iQ2WswSv0.net
>>268のような日本も読めない低能は
もう生きているのもつらいだろうな
277:デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
16/04/28 07:37:37.05 2BwMw+ri0.net
>>270
俺はお前が可哀想だと思うけどね
278:デフォルトの名無しさん (スプー Sdaf-hBSK)
16/04/28 08:34:17.99 qBtwGihyd.net
>>257で既に指摘されてるけどメモリ確保って何なのさ?
279:片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ f38f-Ecb7)
16/04/28 12:08:14.63 22WGF77t0.net
よぉ、C++erの兄ちゃん。すごい武器を入手したぞ。装備していけよ。
こいつは、デバッガが使えないような環境でもトレースや呼び出し
履歴を取れる代物だ。重宝するぜ。
footmark for C++ debugging
URLリンク(github.com)
280:デフォルトの名無しさん (ワンミングク MM6f-HcEB)
16/04/28 19:31:48.39 f4tKx6/8M.net
逃げちゃったかな?
281:デフォルトの名無しさん (ワッチョイ 57cb-OoOA)
16/04/28 20:41:41.67 Fdy34kc40.net
C++11でもswapイディオムって使うんですか
282:デフォルトの名無しさん (オッペケ Sre7-hBSK)
16/04/28 21:03:01.76 DqjglUBWr.net
>>272
途中で途切れた文章が指摘だったとは知らなかったぞ
オブジェクトの領域をストレージに確保することのつもりで書いた。
ここでのオブジェクトは規格の1.8のオブジェクトのことだが
フリーストアでの確保ではなく自動ストレージ期間のオブジェクトになる
283:デフォルトの名無しさん (ワッチョイ 5b3c-89Kw)
16/04/28 22:24:39.75 vUtl/OeK0.net
日本では、秋葉原に走ってメモリー確保することもありますからね。
284:デフォルトの名無しさん (ワッチョイ 4b66-nlgT)
16/04/28 22:46:39.38 wGgKuj3r0.net
MB8164-12か。何もかも皆懐かしい。
285:デフォルトの名無しさん (ワンミングク MM6f-HcEB)
16/04/28 23:19:45.20 f4tKx6/8M.net
>>276
値渡しの場合にお前の言うメモリ確保が余計に実行される例そろそろ書いたら?
286:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/28 23:54:08.87 iQ2WswSv0.net
規格であり得るとされる挙動を立証するなど時間の無駄
低能にはちょっと難しかったかもしれないが、
コンストラクターが最大何回呼ばれうるかは意識した方がいいと思う
287:デフォルトの名無しさん (ワンミングク MM6f-HcEB)
16/04/29 00:13:53.74 Wehf76ZnM.net
ダメだこいつ…
書くのも無駄な例を意識しろってもう何言ってんのかわかんねぇわ
288:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/29 00:49:18.09 QcOA+a6j0.net
まあ、そもそも日本語がわからないようなオツムでは致し方ないな
URLリンク(ideone.com)
289:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/29 02:37:05.42 GPvE7zg30.net
>>282
どこのマヌケがコピーコンストラクタとコピー演算子で差のでるような実装すんの?
290:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/29 02:40:06.76 +q+2SQ0C0.net
扱ってるオブジェクトがstd::vectorでswapするとき一時オブジェクト作るときにメモリ確保するよ。
という話のように思うのだが。
C++は常にANY扱ってるわけじゃねーんだから、中身のことまでケアしてください。
291:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/29 02:43:54.15 GPvE7zg30.net
>>284
一種遅れやな
292:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/29 02:45:03.22 +q+2SQ0C0.net
ちなみに俺はあんまり経験ないけど、
moveするときは、メンバ変数はスワップしてmove元をクリアして終わりだな。
確かmove元が使えなくなってもOKだったと思うし。
293:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/29 02:45:57.22 +q+2SQ0C0.net
>>285
あ、マジで。
294:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/29 02:46:41.31 GPvE7zg30.net
>>284
std::vector::swapの一時オブジェクトのコストどれだけか解って言ってる?
295:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/29 02:48:27.73 +q+2SQ0C0.net
>>288
オーダーは知らないが、推測では全コピーするから相当重い。
296:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/29 02:50:08.54 +q+2SQ0C0.net
もしくはカスタムロジックで魔法でもあるのか。
297:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/29 02:51:25.67 GPvE7zg30.net
>>289
一周遅れ所じゃないぞ、そんなのでよく
>中身のことまでケアしてください
なんて言えたな…
298:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/29 02:53:25.35 +q+2SQ0C0.net
>>291
それは悪かった。
じゃあ、何の話をしてるか整理しないと、認識度が段々でかみ合ってないぞ。
299:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/29 03:15:26.74 GPvE7zg30.net
コピー&swap一つ実装したときと、
const参照と右辺値参照2つ実装したときのコスト差はswap分か最適化によってはそれ以下って言ったら >>256 これ
まさか一時オブジェクトの為にスタックの場所取るのにコストかかるとでもおもってるような
300:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/29 08:14:20.77 QcOA+a6j0.net
>>284
スワップの話ではないぞ。スワップ以外でオブジェクト生成がされうるかどうかだ
>>249 「コスト差はswapのみ」
↓
>>250「ムブコンのコストはどこ行った」
>>263で「値渡しがswap以外に一時オブジェクトのメモリ確保が一回多いことに変わりはない」
↓
>>279「値渡しの場合にお前の言うメモリ確保が余計に実行される例そろそろ書いたら?」
↓
>>282
>>293
オブジェクトが余分に生成されその分デストラクターが呼び出されているんだからコストは発生しているぞ
swapの処理以外に1バイトも無駄な実行コードが生成されない確証でも出してみたらどうだ?
ちなみにスワップ以外の話をしているんだからスワップの過程で行うムーブの話はするなよ
301:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/29 08:49:49.69 QcOA+a6j0.net
なるほどわかった。
最初に>>250でムーブ関連の小さなコストの見逃しを指摘してやったのだが
糖質はvectorの中身のコピーが行われるという指摘を受けた幻覚を見てしまってんだな。
途中で自動ストレージとかの単語が出た時点で気づきそうなものだが
~最初の指摘(>>250)~
> >>249
> >コスト差はswapのみ
> ムブコンのコストはどこ行ったのよ
302:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/29 10:12:54.25 GPvE7zg30.net
最初からデストラクタ(の中の条件文)一個分のコストの事言ってたとは思えないけど、それのこと言ってたならそうですね。
くっそどうでもいいけど。
303:デフォルトの名無しさん (ワッチョイ 5b3c-89Kw)
16/04/29 10:19:20.00 +JsGJ08I0.net
バトルプログラマー葉子(G パスカル ザカリー著 闘うプログラマーに出てくる女性)も
こうして議論したのかなあ。
304:デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
16/04/29 10:22:08.43 5uxjIDtf0.net
ハードウェアがもっと進歩して時間と空間のコストが厳密にゼロになるときが早く来ればいいのに...
305:デフォルトの名無しさん (ワッチョイ cf02-nlgT)
16/04/29 11:27:56.89 GKcYz8vk0.net
物理現象の伝搬は最速でも光速度までで
何をするにもプランク時間はどうしてもかかる
306:デフォルトの名無しさん (ワッチョイ 9302-OoOA)
16/04/29 11:45:21.07 uF4QxRQl0.net
人間の認識時間を遅らせればいいんだ
体感で1秒が0.1秒に感じるように
307:デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
16/04/29 11:51:40.12 5uxjIDtf0.net
大きさが厳密にゼロの領域の中でコトを済ませる方向で。。。
可算ステップの任意のアルゴリズムが時間ゼロで終了すればハッピーだ。
308:デフォルトの名無しさん (アウアウ Sa27-7WOp)
16/04/29 12:53:39.12 w38rMPYqa.net
>>300
宇宙人に侵略される
309:デフォルトの名無しさん (ワッチョイ 9302-OoOA)
16/04/29 13:01:53.27 uF4QxRQl0.net
そうだ宇宙全体の物質の素粒子レベルの運動をコンパイル時に計算すればいいんだ
そうすれば今後起こる事象全てを定数化できてあらゆる実行時の処理のオーダーは1になる
C++は宇宙を制する
310:デフォルトの名無しさん (ワッチョイ 4fc0-6p9G)
16/04/29 20:45:07.19 JN7XYE/q0.net
そろそろよそでやれ
311:デフォルトの名無しさん (アウアウ Sa27-7WOp)
16/04/29 21:21:37.28 SAOt+riJa.net
それでは本題に戻りましょう
312:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/04/30 01:32:01.04 2zZXg3Qa0.net
PURE関数が汝を救う一端になろうぞ。
313:デフォルトの名無しさん (ワッチョイ cb7b-iSeV)
16/04/30 11:10:13.98 /qrbaLqo0.net
swap だとかコピーだとかこんな下らん事で言い争いするくらいなら黙って
C 言語でポインタ使ってりゃいいのにと思う。
314:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/30 11:37:07.49 olAQ2y8z0.net
言い争いは問題でなく、言語仕様が他の言語に比べて複雑なことに起因してると思うが。
基本は「嫌なら使うな」の言語
315:デフォルトの名無しさん (ワッチョイ cb7b-iSeV)
16/04/30 11:45:40.10 /qrbaLqo0.net
嫌だからおれは使わんけど、馬鹿が使って迷惑かけて、
あげく言語仕様ではこうなのにその通りに動かないコンパイラが悪いだの言い出すのが
一番の問題。
316:デフォルトの名無しさん
16/04/30 11:58:56.90 jPcGH/bCm
もうRustでよくね?
317:デフォルトの名無しさん (ワッチョイ a77b-uqHn)
16/04/30 11:56:01.21 Nr00vcAW0.net
どうでもいいけどc++11とか14に対応したクックブックが凄く欲しい。
あとg++のwcoutのロケール対応は最新版だとどうなっているか誰か教えて。
318:デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
16/04/30 14:00:29.09 uVz81x780.net
GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
319:デフォルトの名無しさん (ワッチョイ b730-OoOA)
16/04/30 14:12:28.07 kBEc2ffr0.net
アスペ関係あるのかそれ
320:デフォルトの名無しさん (オッペケ Sre7-hBSK)
16/04/30 14:15:22.52 FztpmG49r.net
>>312
マルチの荒らしは去れ
321:デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
16/04/30 14:23:05.68 uVz81x780.net
アスぺは関係ないw
322:デフォルトの名無しさん (ワッチョイ 27bf-ZWIR)
16/04/30 15:24:25.97 EkpjLvdA0.net
じゃあ荒らしは去れになっちゃうなww
323:デフォルトの名無しさん (アウアウ Sa27-7WOp)
16/04/30 16:32:02.70 dTOuLsNga.net
暗号通信は犯罪に使われるので政府用バックドアが必要になる。
しかしそうすると職権乱用が懸念される。
そこで、次善の策として、国際的に承認が必要にするというのはどうか?
復号には常任理事国全ての政府の承認が必要不可欠とするというものだ
アメリカがYesと言っても中国(或いはロシア)がNoというかもしれないので安易に覗き見はできなくなるだろう
324:デフォルトの名無しさん (スプー Sd2f-hBSK)
16/04/30 18:16:59.09 OJjCBDMXd.net
なるほどC++らしい
325:デフォルトの名無しさん (ワッチョイ cb7b-olYR)
16/04/30 20:20:59.06 mxQluw9J0.net
>>307
C言語でポインタ使うのが同じくらい書くのが楽なら使うよ
それにC言語でも環境やコンパイラによってこう書いた方が効率いいとか、冗長な記述減らせるけど実行コストそれほど変わらないという議論あるよね?
326:デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
16/04/30 20:35:53.60 uVz81x780.net
>>317
Covenantの目的はインターネットにおける権力による抑圧を排除することが最終的な目標です。
そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
327:デフォルトの名無しさん (JP 0H07-89Kw)
16/04/30 23:13:30.56 +bg/IZ99H.net
- stdafx.h -
#pragma once
#include <iostream>
#include <random>
-------------------------------
#include "stdafx.h"
using namespace std;
int main()
{
random_device rnd;
// メルセンヌ・ツイスター法による乱数発生
// mt19937 engine; // 32bitパソコン用
uniform_int_distribution<int> distribution( 0, 9 ) ; // 整数
// uniform_real_distribution<double> distribution (0.0, 9.9); // 実数
for(int i = 0 ; i!= 10 ; ++i) cout<<distribution(engine)<<endl ;
cout << endl<< "Press Enter!";
cin.get();
return 0;
}
VC++2015では毎回違う乱数が出るのに,TDM GCC(gcc5.1.0)では
同じ乱数しか出ない. gccのオプションSWの問題?
328:デフォルトの名無しさん (JP 0H07-89Kw)
16/04/30 23:15:38.21 +bg/IZ99H.net
// mt19937 engine; // 32bitパソコン用
↓
mt19937_64 engine(rnd());
329:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/04/30 23:22:10.38 olAQ2y8z0.net
何か以前、同じ悩みのレスを見たような
330:デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
16/05/01 00:54:26.52 pgSGezQj0.net
>random_device rnd;
これを何にも使っていないからだな
>>322のように使え
331:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/01 00:58:35.24 fsqM/cei0.net
疑似乱数なんて、とある初期値を元に決まった数列を生成するだけだからな。
初期値が変わらないと数列も変わらん。
332:デフォルトの名無しさん (JP 0H07-89Kw)
16/05/01 01:08:56.51 JjM58K48H.net
>>324
だから訂正した上で乱数が同じ値になってしまうと言ってる。
頭悪いな
333:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/01 01:15:39.33 fsqM/cei0.net
うんじゃー、ランダムデバイスは環境定義だから、ランダムデバイスもMTなんじゃね?
普通はCPUのランダム取ってくるんだけど。
334:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/01 01:27:29.62 fsqM/cei0.net
URLリンク(ideone.com)
URLリンク(ideone.com)
イデオンってGCCだよな。たしか。
335:デフォルトの名無しさん (アウアウ Sa27-ohpd)
16/05/01 08:19:16.64 4ccqRarua.net
random_deviceの実装見ろ
336:デフォルトの名無しさん (JP 0H07-89Kw)
16/05/01 09:02:25.15 JjM58K48H.net
>>329 あほか。
ひょっとしたらgccをbuildする時のTDM-GCC(MinGW)の問題かもしれん。
URLリンク(github.com)
しかし、英文が微妙なニュアンスでわからん。
-frandom-seedのオプションを指定しないといけないとあるようだが。
obj/%.o: %.cpp $(HEADERS)
$(CXX) -c -frandom-seed=$@ $(CFLAGS) -o $@ $<
しかし、後の方には
We don't use frandom-seed at all anymore after #4724, closing this.
とある.うーん、わからん。
337:デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
16/05/01 09:11:05.64 pgSGezQj0.net
>>326
ああ >>321==>>322 だったかごめんごめん
338:デフォルトの名無しさん (JP 0H07-89Kw)
16/05/01 09:11:57.94 JjM58K48H.net
URLリンク(qiita.com)
もあるな。しかし、もうこの話題はやめた
339:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/05/01 09:48:18.92 p2YCnIW80.net
>>330
『It is used to generate certain symbol names that have to be different in every compiled file. It is also used to place unique stamps in coverage data files and the object files that produce them.』
「アホか。」はお前のことだろう
340:デフォルトの名無しさん (JP 0H07-89Kw)
16/05/01 09:53:17.94 JjM58K48H.net
いいからお前はひっこんでろ
341:デフォルトの名無しさん (ワッチョイ cb7b-1+8h)
16/05/01 10:40:34.11 8qUfiok/0.net
random_deviceは規格通りに実装されてないケースがあるから
std::mt19937 engine(std::chrono::system_clock::now().time_since_epoch().count());
とかにしておいたほうが無難だよ以下参照
スレリンク(tech板:782番)
342:デフォルトの名無しさん (ワッチョイ 37d9-0GMy)
16/05/01 10:50:50.22 tY30d3V60.net
random_deviceが毎回異なる擬似乱数を返すかどうかは
random_device::entropy()の値をチェックする
これが 0 なら毎回同じ数列を返すので>>335みたいにするといい
343:デフォルトの名無しさん (ワッチョイ cb7b-1+8h)
16/05/01 11:01:18.00 8qUfiok/0.net
entropy()==0じゃチェックできないよ
規格通りならentropy()==0でもoperator()は「非決定性」の値を返さなきゃいけない
何度起動しても同じ数列が返るならそれは実装のバグ
344:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/05/01 11:02:50.07 p2YCnIW80.net
>>336
それだと
>>335の先の>>828に書いてある規格の要求を満たしていないだろう
ちなみに>>335の先のID:theP84i7は俺のようだ思い出した
345:デフォルトの名無しさん (JP 0H07-89Kw)
16/05/01 11:04:15.55 JjM58K48H.net
>>335
ありがとうございます。助かります。
346:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/05/01 23:34:15.98 p2YCnIW80.net
>>227
具体的にはどのような場合?
静的変数の参照を返すとか?
347:デフォルトの名無しさん (ワッチョイ 3b64-nlgT)
16/05/02 00:24:24.91 rK2U+l6Y0.net
グローバルでない変数って色々あるからなあ
348:デフォルトの名無しさん (ワッチョイ 2f94-Huko)
16/05/02 01:15:48.64 lijKCiQb0.net
入門者です。初心者用スレがない様なのでこちらで質問します
min()の戻り値が「マイナス」max......という風になっているのですがこれはどういった意味があるのでしょうか
n1 = 2,n2 = 3,n3 = 4で、max()の戻り値は4、minの戻り値は2となっています。大小逆の数を返すのですが
マイナスに具体的にどういった役割があるのか、何と検索すればいいのか教えていただきたいです
#include "minmax.h"
// 最大値を返す
int MinMax::max(int n1, int n2, int n3) {
if (n1 > n2 && n1 > n3) {
return n1;
}
else if (n2 > n3 && n2 > n1){
return n2;
}
else if (n1 > n3 && n1 > n2){
return n1;
}
return n3;
}
// 最小値を返す
int MinMax::min(int n1, int n2, int n3) {
return -max(-n1, -n2, -n3);
}
初めて見るのでうまく説明できませんが、必要な情報は随時追加しますのでエスパーできる人
教えてください
349:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 01:22:22.63 GdZkeqisK.net
>>342
正の数は絶対値が大きいなら大きい数になる。
逆に負の数は絶対値が小さいなら大きい数になる。
絶対値だけを見るなら正の数の大小関係は負の数の大小関係の逆になる。
350:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/02 01:27:04.99 LofVFQLs0.net
検索手法だと思うが、
普通MinMaxって最小値と最大値をウエイトにするもんだと思うので、カスタムロジックなんじゃないか?
実装したやつに聞いてみろー。
発展としてアルファベータカットっていうものもあるよ。
MINMAX検索の一番のキモは、
最大値が最適解とは限らない。かつ、最小値が最適解とは限らない。という条件で最適な解を探す。
というもの。
それと、C++11で可変引数版、std::minとmax入ったからそっち使ったほうが読みやすい。
351:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/02 01:30:07.03 LofVFQLs0.net
あれ?俺勘違いしてるか?
352:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 01:33:46.98 GdZkeqisK.net
数学で考えよう。簡単のためにまずは二項について
-min(-x,-y)=max(x,y)
を証明したい。左辺は
-(-x<-y?-x:-y)=-(x>y?-x:-y) …(1)
=(x>y?x:y) …(2)
=右辺
となる。
※(1):不等号にマイナス1を掛ける。
※(2):マイナスをカッコの中に作用させる。
証明終わり。三項についても同様。
353:デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
16/05/02 01:37:24.80 dUwljW2j0.net
>>342
本題と関係ないかもしれないが
そのMinMax::max関数の実装オカシイだろ
354:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/02 01:38:07.25 LofVFQLs0.net
解説サンクス。
あら。元に戻っちゃった。
MINの条件はあってるのか。
そーりー。
355:デフォルトの名無しさん (アウアウ Sa27-7WOp)
16/05/02 01:49:33.84 87lwCP4Ca.net
>>342
数直線書いてみれば一発だろ
n3
n1
n2
───
-n2
-n1
-n3
上方向が正、─が0ラインな。
負にして最大を取れば、最小を負にした値(-n2)が返る。あとはこれを負にすれば元の値に戻る。確かにn2は最小だ。
工学の理念、一つ!『車輪の再発明はするな』
工学の理念、一つ!『使える車輪は使い倒せ』
maxができたのにminも同じように構築するのでは理念に反する
maxを使ってminを表現できるならそうするべき。別々に作れば、もしかするとmaxにバグがあるかも知れない、minにバグがあるかも知れない。
しかしminをmaxで実装すれば、minは事実上書いていないのでバグは存在しない。maxにバグがあるかどうかだけ心配だけすればいい。
バグを防ぐコツはコードを書かないことだ。
356:デフォルトの名無しさん (アウアウ Sa27-7WOp)
16/05/02 01:51:28.06 87lwCP4Ca.net
『使える車輪は(使い)回せ』に訂正するぅっ!
357:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/02 01:59:45.92 LofVFQLs0.net
解説ありがと。
数学ダメなんだよね~。Orz
バグを防ぐコツは同意だ。
まぁ、車輪は使い方はマスターするべき。
そのためにも泥臭いことを否定してはいけない。(戒め)
358:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
16/05/02 02:12:35.32 GdZkeqisK.net
次のような等式が成り立つことが知られている。
max(x,y,z)=max(max(x,y),z)=max(x,max(y,z)).
min(x,y,z)=min(min(x,y),z)=min(x,min(y,z)).
359:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
16/05/02 02:15:13.64 GdZkeqisK.net
なお、>>342のmin,max関数は最適化されておらず、無駄な比較を
行っているので、教育上あまり好ましくない。
360:デフォルトの名無しさん (ワッチョイ 0b75-lQqR)
16/05/02 02:43:59.63 5VxisSG80.net
>>349
>maxを使ってminを表現できるならそうするべき。別々に作れば、もしかするとmaxにバグがあるかも知れない、minにバグがあるかも知れない。
>しかしminをmaxで実装すれば、minは事実上書いていないのでバグは存在しない。maxにバグがあるかどうかだけ心配だけすればいい。
いやいや 341のminはバグってるし。minにINT_MINを渡したらどうなるか考えてみ。
361:デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
16/05/02 02:45:04.65 dUwljW2j0.net
maxも思いっきりバグってるが
362:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/02 02:48:14.57 LofVFQLs0.net
std::max<int>({1,2,3}); を使おう。(キリッ
363:デフォルトの名無しさん (ワッチョイ 0bdc-VEo+)
16/05/02 05:44:22.58 8/8nC51l0.net
>>342 の MinMax:: に乗せてくれ(車輪の話だけに)。
>>347 >>355
max()は、引数に同じ値が2つ与えられるとダメなのね。
n1 = 2, n2 = 2, n3 = 1 といった場合。
比較演算子を > でなく >= にすればいいのかな。
(小手先で修正してまで使うとも思えないけど一応)
>>354 の INT_MIN の符号反転の問題はいつも見逃すなぁ。
intが32bitもあると「億なんてデカい値は使わないし…」で
境界条件を考慮し忘れる。
おかげで俺の部屋は悪魔ハーレム状態。
364:デフォルトの名無しさん (ワッチョイ ab51-JnPK)
16/05/02 06:18:00.27 zu7MqjLX0.net
仕様で「入力がINT_MINの場合は正しい値を返さない」とするだけでプログラムがすっきり。
365:デフォルトの名無しさん (ワッチョイ 2f94-Huko)
16/05/02 10:03:31.77 lijKCiQb0.net
342です
皆さんありがとうございます.一応参考サイトは以下です(若干プログラムが違いますが)
URLリンク(cpp-lang.sevendays-study.com)
366:デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
16/05/02 10:30:56.03 LofVFQLs0.net
ぶー。検索関係なかった。Orz
367:デフォルトの名無しさん (ワッチョイ 3bb4-OoOA)
16/05/02 16:31:01.42 1reykZlZ0.net
std::unordered_set の要素をイテレータで取ろうとしたら自動で const 修飾されます
多分オブジェクトの内部状態が変わることでハッシュ値が変わることを考えてのことだと思うんですが、
いまの場合ハッシュ関数を自分で定義していて、操作の前後でハッシュ値が変化しないことは
(自分には)わかっています。
これをコンパイラに教えてあげるにはどうすればいいんでしょうか?
368:デフォルトの名無しさん (ワッチョイ 3763-hBSK)
16/05/02 16:56:44.90 IsbB/noh0.net
諦める
そしてconst_castを使う
369:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 17:29:08.43 V/Rz0lGL6.net
カレントディレクトリの設定が上手くいかないです。
test1の下にtest.exeとディレクトリtest2
370:があるとして、 test1.exeで SetCurrentDirectly(”test2”) ofstream fout1(”test.dat”) fout1 << ”test” << endl; としても、test.datがtest2の下ではなく、test1の下に出来てしまいます。どうすればtest2の下に出来ますか?
371:360 (ワッチョイ 3bb4-OoOA)
16/05/02 17:48:25.88 1reykZlZ0.net
>>362
ありがとうございます
結局 mutable にして切り抜けました
372:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 17:50:59.68 GdZkeqisK.net
>>363
"test2"は相対パスだから、現在のディレクトリを確認しろ。
また、戻り値とエラーコードもチェックしろ。
373:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 18:04:07.30 V/Rz0lGL6.net
>>365
ありがとうございます。
確認してみたところ、falseが帰ってきていました。
そして、getcurrentdirectlyして表示してみたところ
C
とだけ表示されました。
Cドライブの直下ということですか?
それだと、C:\と出そうなものですが…
374:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
16/05/02 18:18:14.94 GdZkeqisK.net
>>366
おそらくUnicode文字列とANSI文字列の指定が間違っている。
型に関する警告が出ていないか確認せよ。
375:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
16/05/02 18:29:59.21 GdZkeqisK.net
Unicode文字列(いわゆるワイド文字列)のリテラルは先頭にLを付ける。WCHAR型の配列またはポインタになる。
例) L"Unicode"
Unicode APIは関数名の最後にWが付く。ANSI APIはAが付く。
例) GetCurrentDirectoryW
Unicode文字列とANSI文字列を自動的に切り替えるにはリテラルを
TEXT( )で囲む。TCHAR型の配列またはポインタになる。
376:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
16/05/02 18:40:56.68 GdZkeqisK.net
ANSI文字列を指定すべきところにUnicode文字列を指定することはできない。逆も同様。
例えば、printfの%sにワイド文字列を指定することはできない。
警告が出るか、分かりにくい論理エラーの原因になる。
377:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 18:44:54.84 V/Rz0lGL6.net
>>367
ありがとうございます。
確認してみると、確かに警告が出ていました。
なので、
SetCurrentDirectly(”test2”)
の部分を
SetCurrentDirectly((LPCWSTR)”test2”)
としてみると警告が消えましたが、結果は変わりませんでした。
378:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 18:47:42.10 GdZkeqisK.net
SetCurrentDirectoryA("test2");
SetCurrentDirectoryW(L"test2");
SetCurrentDirectory(TEXT("test2"));
379:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
16/05/02 18:57:39.76 GdZkeqisK.net
配列や文字列リテラルを型キャストしても、型が変わるだけで、
中身のデータレイアウトが変わる訳ではない。
文字列を柔軟に扱いたいならATLとかMFCなどの外部ライブラリを使うことになる。
380:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 19:04:58.94 V/Rz0lGL6.net
>>372
ご指摘の通りで、無事に解決しました。
何度もありがとうこざいました。大変参考になりました。
381:デフォルトの名無しさん (ワッチョイ a77b-1+8h)
16/05/02 19:07:51.78 btgv3pKW0.net
>>363
test2ディレクトリをどこに作りたいのか知らないけど
絶対パスで指定しなきゃダメ
起動時のカレントディレクトリがどこになってるかについて仮定しちゃいけない
382:デフォルトの名無しさん (ササクッテロ Spe7-ZWIR)
16/05/02 19:19:38.69 eom7L+e5p.net
.dllの配置場所ですが、
通常だと.exeと同じ階層に置いておかないと呼んでくれませんよね?
しかし、.exeのショートカットを作成してプロパティから作業フォルダーを指定すればそこから読んでくれるようです。
この作業フォルダーの指定をプログラム中で行う方法はありませんか?
vc14で、デバックモードで作業ディレクトリを指定の設定ならあるのですが、リリースした時の設定方法が分かりませんでした。
383:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 19:21:00.96 V/Rz0lGL6.net
ちなみにdllは環境変数Pathに入っていないものを指定する場合です。(配布するときなど)
384:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 19:25:12.54 V/Rz0lGL6.net
>>374
test2は最初からtest1の下に用意されているものです。
絶対パスは、配布する場合などに使えないので相対パスで指定の方法を考えていました。
今は教えてもらった通りで動いていますが、動かなくこともありますか?
385:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 19:29:01.28 GdZkeqisK.net
【ディレクトリ・パス関連のAPI(テストに出るかも)】
GetCurrentDirectory
SetCurrentDirectory
GetModuleFileName
GetWindowsDirectory
GetSystemDirectory
GetTempPath
GetTempFileName
GetFullPathName
SHGetSpecialFolderLocation
SHGetSpecialFolderPath
SHGetPathFromIDList
386:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 19:31:57.84 GdZkeqisK.net
このGetModuleFileName を使えば、読み込んだDLLのフルパスや現在実行中のEXEのフルパスが得られる。
387:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 19:41:24.27 V/Rz0lGL6.net
>>379
何度もすみません。
exeの方の使い方は分かりましたが、
.dllのフルパスを取得してもどうすればいいのか分かりません。
調べると、.dllもカレントディレクトリから呼ばれる、とあったので、プログラムでsetcurrentdirectlyをしたついでに、.dllも読み込んでくれるかと新しいディレクトリの方に.dllを全部移してみたのですが、dllがないというエラーが吐かれました。
388:デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
16/05/02 19:49:22.82 rwpIh2xK0.net
>>375
遅延読み込みするDLLを除いて通常の方法ではmain/WinMain関数に
制御が渡った時点でDLLのロードは終わって居るのでプログラムから制御するには
かなり特殊な手段を用いることになる
⇒ だから一般的にはやらないし、無理って言う人も居る
あと、スレ違いだから
389:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 19:57:48.05 V/Rz0lGL6.net
>>381
ショートカット作成のプロパティから簡単に出来るので、プログラムでも簡単に出来るかと思ったのですが、難しいのですか…
スレ違いなのは分からずすみませんでした。
よければ、どこのスレに行けばいいのか分かりませんので教えて貰えますでしょうか?
390:片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
16/05/02 19:58:23.64 GdZkeqisK.net
スレチなのでスレ誘導します↓
Win32API質問箱 Build122
スレリンク(tech板)
391:デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
16/05/02 19:58:58.17 3YV7E0Ft0.net
>>377
>>374 はアホだから気にしなくていい
392:デフォルトの名無しさん (ガックシ 068f-ZWIR)
16/05/02 19:59:04.30 V/Rz0lGL6.net
>>383
ありがとうございます、移動します。
お騒がせしましたどうもすみません。
393:デフォルトの名無しさん (ワッチョイ a77b-1+8h)
16/05/02 20:31:02.13 btgv3pKW0.net
>>384
別に決め打ちの絶対パスで指定しろとは言ってないからね
そう解釈したならアホはお前
実行ファイルからの相対パスを指定したいならGetModuleFileNameで実行ファイルのパスを取って
目的とするファイルの絶対パスを作るのが定石