1 :
デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7fc9-G+K4)
2016/04/03(日) 00:22:24.07 ID:ZT/2NYWz0
2 :
デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)
2016/04/03(日) 00:23:36.87 ID:ZT/2NYWz0
3 :
デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)
2016/04/03(日) 00:24:40.13 ID:ZT/2NYWz0
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
4 :
デフォルトの名無しさん (ワッチョイ 7fc9-G+K4)
2016/04/03(日) 00:25:56.22 ID:ZT/2NYWz0
---- テンプレ ここまで ----
5 :
デフォルトの名無しさん (ワッチョイ b742-G+K4)
2016/04/04(月) 01:31:35.53 ID:QWzclXen0
乙。
これは
>>1乙じゃなくて\0終端を表すzeroの頭文字なんだからね!
6 :
デフォルトの名無しさん (ガックシ 0+af-e5NB)
2016/04/04(月) 16:33:22.23 ID:vx7kDnRQ+
7 :
デフォルトの名無しさん (ワッチョイ b7a8-ppXo)
2016/04/04(月) 17:51:25.41 ID:K+tP/W6A0
Uがcomplex<U>
これは無理だろ
8 :
デフォルトの名無しさん (オッペケ Sref-G+K4)
2016/04/04(月) 19:03:53.18 ID:C11O14/Yr
> decltype( std::declval<T>() * std::declval<U>() )>
代わりにstd::common_type_t<T, U>にしたらいかんの?
9 :
デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
2016/04/04(月) 19:30:33.08 ID:ogDZeBJL0
>>6 何をやりたいのか勘違いしてるかも知れないけど「Uがcomplex<U>」は書き間違いだとして、
そもそも
complex<double> z1;
complex<float> z2;
z1*z2;
とかは標準のままじゃ出来ないだろ。演算子定義してる?
リンク先の現象とは別のものだと思うけど?
10 :
デフォルトの名無しさん (jp 0Haf-e5NB)
2016/04/04(月) 20:11:57.58 ID:jBujPHQXH
>>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>' から減少できませんでした
・・・みたいなのがわんさか出る.
11 :
デフォルトの名無しさん (jp 0Haf-e5NB)
2016/04/04(月) 20:15:55.07 ID:jBujPHQXH
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への型キャストが起こる。
12 :
デフォルトの名無しさん (jp 0Haf-e5NB)
2016/04/04(月) 20:31:24.66 ID:jBujPHQXH
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はもう使わないからいいか。お騒がせしました。
13 :
デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
2016/04/04(月) 20:36:09.73 ID:ogDZeBJL0
>std::complex< decltype(std::declval<T>()*std::declval<U>() )>
これがもうダメだろ。例えばTがcomplex<double>、Uがcomplex<float>なら*の結果の型が定義されていないんだから
VS2015の警告はこれに関しては全く正しいよ
14 :
デフォルトの名無しさん (jp 0Haf-e5NB)
2016/04/04(月) 20:41:55.46 ID:jBujPHQXH
しかし、何でintなんですか?(デフォルト?)
それと結果の型をどうやって定義するんですか?
MPLかなんか知らんけど、そんなことするくらいならBlitz++を開発した
人のプリプロセッサ命令使うわ
15 :
デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
2016/04/04(月) 21:04:57.93 ID:ogDZeBJL0
>しかし、何でintなんですか?(デフォルト?)
あなたがそうさせたから
だから標準ではcomplex<double>*complex<float>とか
complex<double>*floatとか、complex<double>*intとかは定義されていないの
そこにあなたがcomplex<T>*intを定義したもんだから
complex<double>*floatがcomplex<double>*intに変換されたてしまったというだけ
型変換ルールは難しいよね
このままC++でプログラミングを続けると躓きまくるパターンだな
16 :
デフォルトの名無しさん (jp 0Haf-e5NB)
2016/04/04(月) 21:16:48.03 ID:jBujPHQXH
それだけか? 何にも知らないくせに
あんたみたいな奴に上から目線で言われたくない。馬鹿
17 :
デフォルトの名無しさん (ワッチョイ b77b-Kvzb)
2016/04/04(月) 21:18:22.81 ID:ogDZeBJL0
あーあクソバカの相手して時間の無駄した
18 :
デフォルトの名無しさん (ワッチョイ 9fa6-eoZT)
2016/04/04(月) 21:36:28.38 ID:aM9lztCf0
通りすがりのアホな自分にも
>>15の説明はよくわかる
19 :
デフォルトの名無しさん (ワッチョイ 6fcc-G+K4)
2016/04/05(火) 14:56:46.43 ID:FzTJXf040
時空のおっさんは虚数空間に居るらしいな
20 :
デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
2016/04/07(木) 09:40:32.57 ID:sYQgs7of0
てす
21 :
デフォルトの名無しさん (スプー Sdb8-xmDs)
2016/04/07(木) 11:23:16.83 ID:AC5hJBPJd
大学でプログラミング始めようと思うので機材に関して質問
状況:授業の必修でJavaがあるからなんなら同時進行でC++もやろうと思う
家に母艦となりうる富士通Esprimoという一体型PCあり
家との距離や買い物サークルの関係で図書館利用が多いのでノートパソコンでの学習を希望
質問一 どのレベルのノーパソコンだとストレスフリーか?
できれば住民の使ってるものも教えてもらいたい
質問二 また他の機材はいるか?
質問三 参考書としてどうしても必要なものと入門書について
22 :
デフォルトの名無しさん (スプー Sdc8-Ixw5)
2016/04/07(木) 11:28:08.01 ID:geZU7+Zhd
VisualStudioスレってないの?
23 :
デフォルトの名無しさん (ワントンキン MM40-xmDs)
2016/04/07(木) 12:36:54.37 ID:XWAdlud5M
>>21 回答一 最低でも100万円クラスのものが必要となる
回答二 専用キーボードとデバッグ用ディスプレイというものが必須である
また、オプションではあるがコード解析用RAMがあったほうがよい
回答三 C++のJIS規格書が必要である
参考書はThe Art of Computer programming、Structure and Interpretation of Computer Programs、Numerical Recipesなどを読むことが望ましい
24 :
デフォルトの名無しさん (スプー Sdc8-Ixw5)
2016/04/07(木) 12:47:48.05 ID:geZU7+Zhd
JIS規格書
25 :
デフォルトの名無しさん (ガラプー KK8d-nXV3)
2016/04/07(木) 13:50:27.18 ID:D9AesW8PK
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死んでくれ
26 :
デフォルトの名無しさん (JP 0H8d-90FX)
2016/04/07(木) 14:37:39.73 ID:/RqFI3WhH
でも JavaとC++を並行でやるのはダメ、ゼッタイ
表面上似ているからかえって混同してどっちも使いものにならないよ
27 :
デフォルトの名無しさん (ワッチョイ 7c7b-N9sV)
2016/04/07(木) 14:43:04.17 ID:qpo8uFCK0
職業プログラマになるつもりなら早いうちから複数言語を並列でやることに慣れていたほうが良いと思うけど。
どちかに固まってしまうほうがまずい。
28 :
デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
2016/04/07(木) 14:51:19.83 ID:sYQgs7of0
>>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
29 :
デフォルトの名無しさん (ワッチョイ 7c7b-N9sV)
2016/04/07(木) 15:00:08.34 ID:qpo8uFCK0
プリンタ依存も避けたほうが良いと思うけどね。紙だと横幅の問題もあるし。
それに俺が使ってるエディタ上では色ついてるし。
30 :
デフォルトの名無しさん (スプー Sdb8-xmDs)
2016/04/07(木) 15:09:43.34 ID:QhAHKtTed
参考になりました
ありがとうございます
31 :
デフォルトの名無しさん (ワッチョイ 9dcb-sG86)
2016/04/07(木) 17:11:02.42 ID:8Ibgsdhs0
gcc6でconceptが使えるようになってんね
32 :
デフォルトの名無しさん (JP 0H8d-90FX)
2016/04/07(木) 20:52:38.47 ID:/RqFI3WhH
>>27 夢見すぎ
独学でどっちか片方それなりにでも身についてれば御の字
33 :
デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
2016/04/07(木) 21:12:54.17 ID:sYQgs7of0
俺なんかBASICとマシン語を並列で憶えたぞ
マシン語もZ80と6800を並列で(当時の俺にとって2つの別言語)
N-BASICとF-BASICと大型のBASICも脳の別領域を使ってたし
34 :
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 95a8-j/+h)
2016/04/07(木) 21:20:11.88 ID:DadLuQug0
>>23 JIS の C++ は C++03 だぞ。
35 :
デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
2016/04/07(木) 21:36:31.97 ID:sYQgs7of0
志村〜後ろ後ろ、かw
36 :
デフォルトの名無しさん (ブーイモ MM8d-xmDs)
2016/04/07(木) 23:00:34.69 ID:KjNJiL53M
>>28 うちのプロジェクト500万ステップオーバーなんだけど、どうか印刷しないでくれよな。
37 :
デフォルトの名無しさん (ワッチョイ 7c16-QzB1)
2016/04/07(木) 23:11:01.88 ID:sYQgs7of0
SYSABENDみたいなことはそうそうしないから安心してくれ
38 :
デフォルトの名無しさん (ワッチョイ 74d4-+kqq)
2016/04/07(木) 23:28:30.78 ID:EsZr6lr20
32bitOSで使用してたアプリを64bitOSに移して、
time_tで日付表示しようとすると全然違う日付になるんだけど、
long型の宣言を何に変えればいいんでしょうか
39 :
デフォルトの名無しさん (ワンミングク MM40-m9JC)
2016/04/07(木) 23:32:49.64 ID:s1RKY7ZgM
40 :
デフォルトの名無しさん (オッペケ Sr29-xmDs)
2016/04/07(木) 23:54:11.99 ID:OOVH0iNWr
変えなくてはいけないコードがそもそもおかしくね?
41 :
デフォルトの名無しさん (ワッチョイ 3d7b-m9JC)
2016/04/08(金) 00:13:14.18 ID:tJM0u/og0
42 :
デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
2016/04/08(金) 13:25:37.92 ID:nRvqcDPq0
char, wchar_t, short, int, long, lomg long, intptr_t, ptrdiff_t, size_t, off_t, time_t
符合有無
を正しく使い分けなきゃならない
43 :
デフォルトの名無しさん (オッペケ Sr29-xmDs)
2016/04/08(金) 19:57:04.15 ID:BVnlFcaMr
off_tは知らないけど
それは全部区別ついてないとだめだろ
44 :
デフォルトの名無しさん (ワッチョイ f68b-vY2k)
2016/04/08(金) 22:08:41.94 ID:WlvNU3n40
size_tは符号無し、ptrdiff_t、int、long、long longは符号付き、ということが確定じゃなかったっけ
違ったっけ
charが符号付か否かは処理系依存
ただし表示可能文字(isprint()が非0を返す文字)は正であることはC言語の規格で決まっている、
45 :
デフォルトの名無しさん (ワッチョイ fac9-xmDs)
2016/04/09(土) 00:37:51.56 ID:0tLp+Ivi0
ここはC++スレだがそんな決まりは初耳だ
46 :
デフォルトの名無しさん (ワッチョイ bbce-xmDs)
2016/04/09(土) 18:54:14.11 ID:ALj0g4vo0
ssize_t が無いのが微妙に不便。
47 :
デフォルトの名無しさん (オッペケ Sr29-xmDs)
2016/04/10(日) 10:27:04.69 ID:y7qpDauWr
むしろsize_tは符号付きにするべきだった
48 :
デフォルトの名無しさん (ワッチョイ 9d53-QzB1)
2016/04/10(日) 23:05:48.42 ID:DxYgjy+n0
なんで?
ptrdiff_tの話を間違った?
49 :
デフォルトの名無しさん (ワッチョイ fac9-xmDs)
2016/04/10(日) 23:40:34.03 ID:XJxT0yj80
intとの比較でいちいち警告出されたらたまらん
50 :
デフォルトの名無しさん (ブーイモ MM8d-xmDs)
2016/04/11(月) 12:18:23.22 ID:0MIRpDyTM
そもそもサイズは一般的にはマイナスの概念も含むものじゃないかと思う。
51 :
デフォルトの名無しさん (スプー Sdb8-xmDs)
2016/04/11(月) 12:21:40.37 ID:I1gJlU3cd
unsignedが出現するとイライラする
52 :
デフォルトの名無しさん (ワッチョイ 7c36-QzB1)
2016/04/11(月) 16:45:35.21 ID:uv6GH2mg0
>>49 それはコンパイラの問題であって、規格に文句を言うのはお門違いってやつだ
規格合致プログラムなのに難癖つける余計なお節介が邪魔なら、
それをやめさせる方法を探すか、窓から投げ捨てるかは、おまえ自身の問題だし
53 :
デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
2016/04/11(月) 18:25:06.27 ID:cJbV017h0
>>52 お前バカだろう。
>>42を正しく使い分けるためにコンパイラにチェックさせるんだよ。
54 :
デフォルトの名無しさん (ガラプー KKbf-nXV3)
2016/04/11(月) 19:31:17.66 ID:RH3X14PwK
「サイズがマイナスの概念を持つもの」はさすがに。
詳しくは知らないけど測度論?でもやってんのかと言いたい。
バナッハ・タルスキのあれな。
現実には存在しえないだろ負値。
55 :
デフォルトの名無しさん (ワッチョイ 88cb-j/+h)
2016/04/11(月) 20:14:37.61 ID:F0n0MoRl0
存在し得ない値を表すのにマイナスが欲しい
56 :
デフォルトの名無しさん (アウアウ Sac1-L6fk)
2016/04/11(月) 20:26:21.31 ID:Whc/9IOHa
HaskellのMaybeみたいなデータ構造があればいい
あとは効率次第
57 :
デフォルトの名無しさん (スプー Sdb8-xmDs)
2016/04/11(月) 20:46:28.59 ID:liIxp6L/d
>>54 バナタルは測度が定義できない部分集合に分解
58 :
デフォルトの名無しさん (ワッチョイ fe98-QzB1)
2016/04/11(月) 22:15:52.94 ID:DS0BshJK0
>>53 正しく使い分けるを定義しろ
いちいち明示的にキャストすることか
それとも変換も昇格も一切使わないことか
59 :
デフォルトの名無しさん (ワントンキン MM40-xmDs)
2016/04/11(月) 22:20:20.19 ID:t8dajl0XM
struct ssize_t { bool _sign; std::size_t _val};
60 :
デフォルトの名無しさん (オッペケ Sr29-SddS)
2016/04/11(月) 22:41:24.20 ID:+GeXodTxr
>>52 コンパイラーは意図があって警告を出してるのであって
その意図に照らし合わせて規格がこうあるべきだったと言っているのに、
規格通りなら文句言うなとか、アスペなの?
61 :
デフォルトの名無しさん (アウアウ Sac1-L6fk)
2016/04/11(月) 23:05:12.91 ID:Whc/9IOHa
『アスペルガー障害なの?』っていう侮蔑用語、そろそろ卒業しような。
62 :
デフォルトの名無しさん (ワッチョイ e042-j/+h)
2016/04/11(月) 23:07:04.91 ID:4BrCfwua0
覚えたばかりで使いたい年頃
63 :
デフォルトの名無しさん (ワッチョイ a030-j/+h)
2016/04/11(月) 23:19:25.81 ID:x/V8tc7c0
>>61 アスペ全然関係ねぇだろって状況でしか
使われるの見たことないなそういやw
64 :
デフォルトの名無しさん (ワッチョイ 413c-SddS)
2016/04/12(火) 00:26:59.20 ID:0UTgzyp30
65 :
デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
2016/04/12(火) 01:17:31.61 ID:sQLQIwRw0
>>58 定義してもらわなきゃわからない素人は引っ込んでようね
66 :
デフォルトの名無しさん (ドコグロ MM1c-SddS)
2016/04/12(火) 08:30:13.78 ID:xYAotuK9M
67 :
デフォルトの名無しさん (ワッチョイ 9da8-QzB1)
2016/04/12(火) 08:42:37.79 ID:xvAFE9Om0
>>65 定義できないんだろ?
自分の主張をきちんと整理できないのは
素人以前に論客としての基本ができてないんだよ
恥を知ろうね
68 :
デフォルトの名無しさん (オッペケ Sr29-SddS)
2016/04/12(火) 18:30:33.78 ID:Pt+c78dMr
最終的なサイズは0以上でも、サイズを計算する過程で
intを使った演算をしたいことはある。
キャストしなきゃいけないのは流石に不便
69 :
デフォルトの名無しさん (ガラプー KKbf-nXV3)
2016/04/12(火) 20:26:27.00 ID:EvPGf+vtK
シフト演算や未定義動作の関係で、unsignedにすることはあるけど逆はないなぁ
具体的にどんな操作ですか?
70 :
デフォルトの名無しさん (ワッチョイ 7f7b-DytT)
2016/04/13(水) 00:00:27.02 ID:z3tTaqtH0
>>67 そんなに教えて欲しいのか?
添削してやるから定義してみな。
71 :
デフォルトの名無しさん (ワッチョイ 9da8-QzB1)
2016/04/13(水) 00:28:53.46 ID:CqRnSqIY0
>>70 定義するのはおまえだよ
小学生以下のすり替えしてんじゃねえ
つーか誰が何を主張してるのか整理できない
掛け値なし小学生以下の論客くずれじゃしゃーねーかw
72 :
デフォルトの名無しさん (ワッチョイ d37b-pOi2)
2016/04/14(木) 03:08:20.77 ID:PjjDqAVF0
>>71 教えをこう時は「お願いいたします」と頭を下げるのが、小学生でも知ってる常識だ
バカめ
73 :
デフォルトの名無しさん (アウアウ Sa67-rJyw)
2016/04/14(木) 03:47:34.18 ID:/Il1GiFba
パンパカパ〜ン
74 :
デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)
2016/04/14(木) 13:08:33.42 ID:bhJKkgbs0
もし一週間後にこの世から C++ が消滅するとして、
お前らはどの言語にいくの?
D? Rust?
75 :
デフォルトの名無しさん (ワッチョイ db38-TaqW)
2016/04/14(木) 13:11:50.21 ID:rJmmubWG0
76 :
デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
2016/04/14(木) 13:18:07.01 ID:/lkdV6bx0
>>72 おまえに教えを請うバカは全宇宙に1人もいねーよど低脳
おまえの主張が俺に伝わらなくて困るのはおまえだろ
俺にとって顔も知らん池沼のあうあうあーが意味わかんなくても当たり前だし
77 :
デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
2016/04/14(木) 13:30:04.13 ID:RrIZ4ynPM
関数にexternを付ける意味って何ですか?
普通、外部リンケージの関数を使うときはプロトタイプ宣言をすればすむ話ですよね
78 :
デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
2016/04/14(木) 13:38:38.96 ID:EGbMBKF8M
extern cを付けるなら意味あるよ
79 :
デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)
2016/04/14(木) 14:18:48.75 ID:OJhwzOCe0
俗語として、"A" は接吻、"B"はペッティング、"C" は性器同士の接触を伴う性行為、すなわちセックスである
一方で C++ において extern 修飾子はそれを外部に公開することを示す
したがって extern "C" とは
80 :
デフォルトの名無しさん (スプー Sd2f-Gtsw)
2016/04/14(木) 14:48:57.71 ID:r/b7CawPd
エクスタシー
81 :
デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
2016/04/14(木) 15:46:36.79 ID:RrIZ4ynPM
>>78 それはそうですが、externだけの場合の話です
>>79 感心しました。C#もお願いします
82 :
デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
2016/04/14(木) 16:05:37.53 ID:Bx+gDZ8M0
extern+関数は関数内部で未定義の外部参照関数を一時的に宣言したりする場合に使う
83 :
デフォルトの名無しさん (ワッチョイ 6ba8-Jz3o)
2016/04/14(木) 16:21:43.87 ID:LtT4shjO0
>>74 Rust で C++ コンパイラの開発を試みます。
84 :
デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
2016/04/14(木) 16:51:00.65 ID:RrIZ4ynPM
>>82 プロトタイプ宣言との違いが分かりません
すみませんが例を示していただけないでしょうか?
85 :
デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
2016/04/14(木) 17:34:52.06 ID:Bx+gDZ8M0
関数内部でプロトタイプと同じ書き方してみろよ
extern記述しないとできないから
86 :
デフォルトの名無しさん (スプー Sdaf-VZXL)
2016/04/14(木) 17:41:13.29 ID:tV4LbGhWd
デキタァ…
87 :
デフォルトの名無しさん (ワッチョイ 4bdc-WXps)
2016/04/14(木) 17:51:08.75 ID:Y6Qtie590
C++では外部関数を宣言する時のexternは省略可能じゃなかったっけ?
付けても害はないし、つけなくても意味は同じ。
古いCとの互換性とかで残ってるんだと思ったが、
Cにおいても「externなしだと曖昧になる場面」てのが思い浮かばない。
g++ では関数内での外部関数宣言もexternなしで通ったよ。
88 :
デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
2016/04/14(木) 17:55:10.24 ID:Bx+gDZ8M0
ま、今は色々仕様が確定してきてそこら辺ユルユルになってきているけどな
89 :
デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
2016/04/14(木) 17:56:53.73 ID:Bx+gDZ8M0
昔は関数の内部に構造体書いたり関数の宣言とか出来なかったんだぜ
90 :
デフォルトの名無しさん (ワッチョイ 4bdc-WXps)
2016/04/14(木) 20:24:15.71 ID:Y6Qtie590
そういえば下のような感じで、外部関数のプロトタイプ宣言と
引数型の簡単な変換のインライン定義とを並べて書くときに…
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" の字数が同じだから。
91 :
デフォルトの名無しさん (ワッチョイ 5f13-mNwz)
2016/04/14(木) 20:43:24.46 ID:f1hhftJp0
>>89 へえ‥今は関数の内部に構造体の定義が書けるんだ‥新鮮だね
92 :
デフォルトの名無しさん (JP 0H07-DByn)
2016/04/14(木) 21:23:16.59 ID:BY7gxQ6DH
関数内関数は return 有無の見間違えとか面倒くさいから嫌い
93 :
デフォルトの名無しさん (ワッチョイ a742-VZXL)
2016/04/14(木) 21:30:57.47 ID:4DxPT4rq0
94 :
デフォルトの名無しさん (オッペケ Sr27-Gtsw)
2016/04/14(木) 21:43:18.93 ID:sprOrblAr
95 :
デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
2016/04/14(木) 22:38:49.39 ID:/lkdV6bx0
staticな関数原型と衝突したことを検出するために
自分の関数原型と関数定義をexternにするとか?
今となってはD組の話、とタカをくくると思わぬところで足をすくわれる
# 死刑執行がおせーんだよ >WG21
96 :
デフォルトの名無しさん (ワンミングク MMef-8wQM)
2016/04/15(金) 00:42:56.90 ID:MuKGbCphM
asioはいつ標準に入るんだ
97 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/15(金) 08:37:52.62 ID:wcmNmqit0
static void f();
extern void f();
一体何を検知したいのか
98 :
デフォルトの名無しさん (ブーイモ MM2f-Gtsw)
2016/04/15(金) 15:29:12.25 ID:wsA6y7yQM
>>87 自分もそう理解してました
実はコードはC++でなくCなのですが、まぁそこは同じですよね
NASA、エアバス、ボーイングなどが参画してる某OSSなんですが、
あまり洗練されたコードじゃないので深く意味を考えないほうがいいかも
99 :
デフォルトの名無しさん (スプー Sdaf-VZXL)
2016/04/15(金) 15:37:21.93 ID:rmsnL02Wd
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はオブジェクトとして使っても大丈夫ですか
100 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/15(金) 15:53:10.39 ID:CjDQhw6r0
ダメ
101 :
デフォルトの名無しさん (スプー Sdaf-VZXL)
2016/04/15(金) 16:08:36.54 ID:rmsnL02Wd
なにゆえですか
102 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/15(金) 16:14:01.72 ID:wcmNmqit0
> new( buf.data() ) hoge
これが許されない
103 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/15(金) 16:18:15.70 ID:wcmNmqit0
ハゲ「デストラクタを持つようなクラスがメモリレベルでコピーできるわけないだろハゲ」
104 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/15(金) 16:22:54.24 ID:CjDQhw6r0
>>101 これ
buf2 = buf;
これではstd::stringをメンバとして含む非PODオブジェクトをバイナリコピーしちゃってる
2つを別々にplacement new/deleteすれば問題ないと思うけど
105 :
デフォルトの名無しさん (ワンミングク MMef-8wQM)
2016/04/16(土) 00:18:14.54 ID:/5mBf/vNM
aはいいでしょ。
デストラクタ呼んでないからリークするけど。
bは駄目
106 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 00:28:56.13 ID:Wk1F8zu40
二つ前のレスでわざわざplacement newに問題があると教えてやってるのに
問題無いと盲信するのは労害に違いない。
まあオツムの進化がPODで止まっているようでは仕方ない
107 :
デフォルトの名無しさん (ワンミングク MMef-8wQM)
2016/04/16(土) 00:33:12.94 ID:/5mBf/vNM
108 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 06:08:39.46 ID:4BDbPdkp0
>>106 自分こそ老害であるとは思わないのかw
老人用オムツつけてるんじゃないのかおい
109 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 11:08:08.36 ID:Wk1F8zu40
placement newの戻り値をdeleteしちゃう低能には難しかったようだ
alignas(aho) char buf1[sizeof(aho)];
110 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 12:14:16.20 ID:Wk1F8zu40
ついでにPODでなければバイナリーレベルでコピーできないという訳ではない
struct a() { // 非PODだがメモリコピー可能
public: double v;
private: double w;
};
111 :
デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
2016/04/16(土) 12:23:56.26 ID:KhM6yuxr0
privateにあるデータ表現に依存するのは隠蔽の観点からはNGだけどね
112 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 13:45:45.95 ID:4BDbPdkp0
>>109 やけに自信満々で勿体ぶってると思ったらそれだったかwオムツ着用じいちゃん
std::array<char, N>で得られる領域は1バイトアライメントになるとでも思い込んでいそうだな
113 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK77-vtUn)
2016/04/16(土) 14:01:09.62 ID:ri69Z7UDK
114 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 14:05:28.67 ID:4BDbPdkp0
>>110 そんなこと言い出したらis_pod<T>::valueがfalseになるのに実はメモリコピーして問題ないなんて例はいくらでも出せるわ
>>99のhogeはメモリコピー不可なのは明らかなのによくそんな難癖つけられるもんだな
ナウでいけてるヤングはメモリコピー可能なオブジェクトかどうかはis_pod<T>::valueで判断する
115 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 14:42:33.12 ID:4BDbPdkp0
てか
>struct a() {
なんなんだよ()って?そんな文法知らないし、コンパイルできないんですけどw
俺が書いた
>placement new/deleteすれば問題ない
のdeleteを「placement newの戻り値をdeleteしちゃう」と解釈しちゃうくらいのアスペなら
こういうところは間違わないほうがいいよ
116 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 14:43:42.03 ID:Wk1F8zu40
規格にはコピー可能かどうかの判断基準としてstd::is_trivially_copyable_vが用意されていると言うのに
trivially copyableの概念が確立されていなかった時代のJIS規格票()で見かけたPODを信じちゃったんだろうな低能は
117 :
デフォルトの名無しさん (スプー Sd2f-Gtsw)
2016/04/16(土) 14:48:58.78 ID:i8qYlRuXd
>>110 よくわかんないけどそれPODと呼べないんだっけ?
118 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 14:54:31.09 ID:Wk1F8zu40
>>117 ★の条件が満たせない
PODの条件
standard-layout
すべてが非vritual
アクセス制御が一通り★
:
トリビアルなクラス
トリビアルなデフォルトコンストラクター
trivially copyable
トリビアルなコピー/ムーブコンストラクター
トリビアルな代入/ムーブ演算子
トリビアルなデストラクター
119 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 15:01:12.47 ID:Wk1F8zu40
>アスペならこういうところは間違わないほうがいいよ
ちょっとワロタ
その理屈は正しいw
120 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 15:07:51.48 ID:4BDbPdkp0
>>116 >std::is_trivially_copyable_v
またやっちゃたようだな。is_trivially_copyable_vなんてあるか?
is_trivially_copyableならあるが
せっかく知識はあるのにしょうもないところで墓穴を掘るタイプだな
121 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 15:13:47.13 ID:4BDbPdkp0
アハ!誰か分かっちゃったwww
122 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/16(土) 15:16:16.66 ID:Wk1F8zu40
123 :
デフォルトの名無しさん (アウアウ Sa67-33s9)
2016/04/16(土) 18:10:30.85 ID:Xvqhm3pva
誰だ!
124 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/16(土) 19:32:32.34 ID:4BDbPdkp0
>>122 std::arrayのアライメントの件についてはあなたが正しかったことを全面的に認めます
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を使うべきですね
125 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/17(日) 01:00:29.55 ID:xPbVippa0
>>113 ここはお前の日記帳じゃない
ゴミを垂れるな
誰かがそのウンコードを真似したらどうすんだ
126 :
デフォルトの名無しさん (ワッチョイ d37b-pOi2)
2016/04/17(日) 08:26:09.36 ID:b+eVByZe0
127 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/17(日) 11:50:26.61 ID:xPbVippa0
long longとint_least64_tの使い分けがややこしい
128 :
デフォルトの名無しさん (ワッチョイ 27a8-q6hj)
2016/04/17(日) 13:17:00.83 ID:xNZ/zNBq0
ビット数の保証がいらんときといるときで使い分けることの何がややこしいんだよ
129 :
デフォルトの名無しさん (ワッチョイ 7b54-bJ9H)
2016/04/17(日) 14:09:07.52 ID:oaifAOu80
実装上ではほぼ同義だからだろ
まあ規格にある int_least64_tだけ使えば良いと思うけど
130 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/17(日) 14:23:59.21 ID:xPbVippa0
>>128 long longとint_least64_tの違いは
それより小さくて64ビット以上の他の型が存在するかどうかなのだが
何を言っているんだお前は
131 :
デフォルトの名無しさん (ワッチョイ 6fcc-Gtsw)
2016/04/17(日) 14:51:46.39 ID:efZowWH00
128ビットになたら long long long になるん??
132 :
デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
2016/04/17(日) 15:06:35.52 ID:l5b4C1Fn0
そこはint128_tで良くね?
133 :
デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
2016/04/17(日) 15:09:31.34 ID:l5b4C1Fn0
まあ、いろいろ考えるとleastとfast系しか使えなくなっちゃうんだけど。
134 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/17(日) 15:24:52.93 ID:xPbVippa0
最低の保証ならchar/short/long/long longでも一応事足りるし
何より2の補数表現が保証されたint??_tは捨てがたい
135 :
デフォルトの名無しさん (ワッチョイ b7cf-cFRK)
2016/04/17(日) 15:30:50.77 ID:JUdcx65W0
誰か
>>130 が何を言ってるか分かる人、解説を。
136 :
デフォルトの名無しさん (ブーイモ MM47-Gtsw)
2016/04/17(日) 15:48:10.23 ID:nxW4nqqmM
>>135 お前日本人?
64bitより小さくて、かつ、64bit以上の型が存在するかってことだろ?
つまり、
えっ?
137 :
デフォルトの名無しさん (ワッチョイ 0b91-Gtsw)
2016/04/17(日) 15:52:23.49 ID:CNQH8xMB0
安くて購入段階でLinuxぶち込んである申し分ないノートPCない?
一台増やそうと思うんだが
138 :
デフォルトの名無しさん (ワッチョイ 7b54-Gtsw)
2016/04/17(日) 16:02:37.24 ID:oaifAOu80
long long(128bitかもしれない)以下で64bit型以上(intが64bitかもしれない)の型が存在してるような環境
かつlong longとも異なら無ければ使う意味はないよ
だって大きさの定義はlong longと同じだから
139 :
デフォルトの名無しさん (ワッチョイ 7b54-Gtsw)
2016/04/17(日) 16:03:57.71 ID:oaifAOu80
間違い
使う意味が無いではなく、使い分ける意味がない
140 :
デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
2016/04/17(日) 16:30:44.23 ID:l5b4C1Fn0
int??_tって、存在自体が処理系依存なんだよねー。
低レベル用途には必須だけど、アプリ用途だとleast/fastの方が使いやすいと思った。
141 :
片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ d38f-2SUX)
2016/04/17(日) 16:40:45.16 ID:EFtPKpBL0
142 :
デフォルトの名無しさん (ワッチョイ eb7b-Jz3o)
2016/04/17(日) 18:32:32.08 ID:ZM27BkVH0
>>140 C99, C++11は規格になってるだろ
143 :
デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
2016/04/17(日) 20:04:12.55 ID:l5b4C1Fn0
>>142 規格で処理系依存ってなってたと思うけど、違った?
144 :
デフォルトの名無しさん (ワッチョイ 0b7b-8wQM)
2016/04/17(日) 20:33:26.12 ID:BVEBxeTg0
たしか必須じゃないよね
とは言っても対応してない環境は余程特殊なものだろうから無いことを心配するより他の心配した方がいいんじゃないかと思う
145 :
デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
2016/04/17(日) 22:04:32.45 ID:l5b4C1Fn0
146 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/17(日) 22:52:17.63 ID:xPbVippa0
まあ規格はstd::stringすら処理系定義だったりするけど
Cのint64_tはかなりネガティブな書き方がしてあるから仕方ない
sprintf_sに至っては虫の息
147 :
デフォルトの名無しさん (ワッチョイ 7bb4-w4ft)
2016/04/18(月) 00:56:20.08 ID:5Ir4szOL0
int??_t じゃなく int や long を使うべきときってある?
148 :
デフォルトの名無しさん (ワッチョイ cf53-q6hj)
2016/04/18(月) 06:24:07.28 ID:0gSzJGDh0
149 :
デフォルトの名無しさん (オッペケ Sr27-Gtsw)
2016/04/18(月) 18:05:37.23 ID:geM4ik0Wr
>>147 ループ変数にintじゃなくstd::int64_tとか使ってたら
変人だと思うわ
150 :
デフォルトの名無しさん (ドコグロ MM0f-Gtsw)
2016/04/18(月) 19:50:05.92 ID:C+iDXaNwM
151 :
デフォルトの名無しさん (ワンミングク MMef-Gtsw)
2016/04/18(月) 20:19:07.03 ID:y+UdHKG3M
特になんもなければstd::size_t使ってるわ
といってもrange-baseしか最近使ってないけどね
152 :
デフォルトの名無しさん (ワッチョイ 3fa6-Jz3o)
2016/04/18(月) 21:08:16.98 ID:Qvk/GJ/v0
auto?
153 :
デフォルトの名無しさん (アウアウ Sa67-pOi2)
2016/04/19(火) 03:50:29.85 ID:sEKB8saBa
auto i = 0ull;
154 :
デフォルトの名無しさん (ワッチョイ 27d9-Gtsw)
2016/04/19(火) 08:38:50.82 ID:SvHoNoSF0
155 :
デフォルトの名無しさん (ワッチョイ cf20-q6hj)
2016/04/19(火) 09:17:49.99 ID:Mp5r7P9F0
hashの出力がsize_tとかやめて欲しい
uint_least160_tつーか、uint_least<160>がねえのもおかしいし
156 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/19(火) 09:55:09.78 ID:nL6Ii7Gq0
157 :
デフォルトの名無しさん (ワッチョイ db38-TaqW)
2016/04/19(火) 10:08:58.32 ID:FK9rMfbT0
158 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/19(火) 10:30:19.44 ID:nL6Ii7Gq0
>>157 俺はこのバカに少なくとも「バーカ」って言ってあげた
それでお前はこのバカになにが出来るの?
なにも出来ないならお前が消えな
159 :
デフォルトの名無しさん (ワッチョイ db38-TaqW)
2016/04/19(火) 10:58:38.53 ID:FK9rMfbT0
160 :
デフォルトの名無しさん (ワッチョイ 3742-Jz3o)
2016/04/19(火) 11:04:51.69 ID:pETlWi8B0
ID:nL6Ii7Gq0 は いらない子!
161 :
デフォルトの名無しさん (ワッチョイ 277b-GRux)
2016/04/19(火) 11:13:16.48 ID:nL6Ii7Gq0
俺は喧嘩売ってるつもりはないし、
>>155という度し難いバカに親切にも「バーカ」って言ってあげただけだよ
俺に喧嘩売ってるのがFK9rMfbT0、pETlWi8B0
本当に役に立たないゴミだな
162 :
デフォルトの名無しさん (ワッチョイ db38-TaqW)
2016/04/19(火) 11:15:39.94 ID:FK9rMfbT0
163 :
デフォルトの名無しさん (ワッチョイ 0b7b-8wQM)
2016/04/19(火) 11:22:46.44 ID:qXd1Jas40
荒らしに構うなって前世紀から言われてるだろ
164 :
tasuketekesuta (ワッチョイ d3d5-j49k)
2016/04/19(火) 21:50:00.65 ID:spYNmTFF0
DataSet/DataAdapterの仕様についてご教授下さい。
■DataSet/DataAdapterの仕様
DataAdapter には、SELECT、UPDATE、INSERT、DELETEのSQL文が設定できます。
Fillメソッドを実行するとSELECTのSQL文の基づいてDataSetにデータを読み込みます。このときDataSetの各行には「編集なし」のマークがついています。
値を更新するとそのマークが「更新済」、削除すると「削除済」、データを追加すると「追加済」のマークに変わります。
Updateメソッドを実行すると、DataSetの各行のマークに応じて、設定してあるUPDATE、INSERT、DELETEのSQL文を実行します。
165 :
tasuketekesuta (ワッチョイ d3d5-j49k)
2016/04/19(火) 21:51:02.12 ID:spYNmTFF0
>>164 の続き
■実施したい事【概要】
DataAdapterのFillメソッドで取得したDataSet内のDataTableに対して、
挿入/更新操作をかけていき、全ての処理が終わったら、UPDATEを行う。
その際、DataTableに挿入した順番でDBへの挿入SQLが流れてほしい。
166 :
tasuketekesuta (ワッチョイ d3d5-j49k)
2016/04/19(火) 21:51:29.36 ID:spYNmTFF0
■実施したい事【詳細】
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上で見ると順番がごちゃまぜです
167 :
デフォルトの名無しさん (ワッチョイ d3d5-j49k)
2016/04/19(火) 21:52:10.39 ID:spYNmTFF0
>>164 の続き
■質問@
なぜ、初期挿入した順番通りにinsert文が発行されないのでしょうか?
tbl->Rows->Findで取得したレコードの値を変更すると順番が変更になってしまうのでしょうか?
■質問A
初期挿入した順番にinsert文が発行されようにするには、
どの様にしたら良いでしょうか?
解決策をご教授下さい。
168 :
デフォルトの名無しさん (ワッチョイ b763-Gtsw)
2016/04/19(火) 21:59:51.04 ID:4s2SrkGy0
ID:spYNmTFF0
荒らしは去れ
169 :
デフォルトの名無しさん (アークセー Sx27-bDYe)
2016/04/20(水) 03:23:29.57 ID:y2Y1qnWRx
>>167 データベースに依存した問題
てか、SQLのほうの話題だろ
170 :
デフォルトの名無しさん (ワッチョイ cf13-kHia)
2016/04/20(水) 05:58:33.09 ID:Ysvgw+BH0
171 :
デフォルトの名無しさん (アウアウ Sa67-33s9)
2016/04/20(水) 07:18:51.45 ID:dTPS4iPYa
そもそも格納順番とかそっちに任せるから、とにかく最新情報科学技術の粋を結集して高速にデータを参照させてくれってのがデータベースでしょ
172 :
デフォルトの名無しさん (オッペケ Sr27-Gtsw)
2016/04/20(水) 07:58:13.83 ID:thevk6F2r
いいえ違います
173 :
デフォルトの名無しさん (オッペケ Sr27-Gtsw)
2016/04/20(水) 08:01:43.93 ID:thevk6F2r
クエリーでなくリーレション(アトリビュートのドメインの直積)にはそもそも概念モデルとして順序の概念が無いし
174 :
デフォルトの名無しさん (ワンミングク MMef-Gtsw)
2016/04/20(水) 09:22:54.95 ID:8iJwmy9eM
まぁデータベースは表ではなくて集合を表現したものだからな
175 :
デフォルトの名無しさん (ワッチョイ 4b40-u1fT)
2016/04/20(水) 23:06:05.59 ID:sW5MEHFW0
不慣れなプログラマが作る全ソースが全ヘッダを読み込むので困る。ちょっと弄ると全ビルド
176 :
デフォルトの名無しさん (ワッチョイ 0b7b-y51b)
2016/04/20(水) 23:42:45.99 ID:ZQBKVnsi0
すぐテンプレ使いたがる馬鹿のコードなんてそんなもんよ。
177 :
デフォルトの名無しさん (ワッチョイ 19e3-zfCm)
2016/04/21(木) 22:25:29.05 ID:3sH/HRos0
翻訳環境にとんでもない化け物がお手頃で使えるようになった今、
理想的には、実行イメージ全体が1つの翻訳単位に収まっていることだね
翻訳単位の境界をまたげない最適化が結構もったいないことになってるから
178 :
デフォルトの名無しさん (ワッチョイ 4db4-z8Ax)
2016/04/22(金) 16:20:21.52 ID:VK3N1B+b0
つまり cc と ld を一つのコンパイル単位にまとめてコンパイルすれば Linux カーネルが3秒でビルドできる爆速コンパイラに
179 :
デフォルトの名無しさん (ワッチョイ 3e16-zfCm)
2016/04/22(金) 16:27:16.85 ID:trDHzPiw0
いやコンパイラが爆速かどうかではなくバイナリを爆速にするって話
最適化をがっつりやるならその分の時間はかかるだろうし
180 :
デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
2016/04/22(金) 17:55:39.19 ID:bwUeH041M
テンプレート書くよりその都度コピペした方が色々はやいよねコンパイル時間とか
181 :
デフォルトの名無しさん (JP 0H41-SZE8)
2016/04/22(金) 19:18:24.79 ID:cAq2nbH2H
そして地震がきた時にクソコードの山に押し潰されるのを待つのだ
182 :
デフォルトの名無しさん (ワッチョイ 4b02-gALo)
2016/04/22(金) 19:35:18.98 ID:LlaEs4+z0
テンプレートはコンテナ以外で明確に使った方が良いケースはどんなのがある?
183 :
デフォルトの名無しさん (ワッチョイ 4b3c-FmnC)
2016/04/22(金) 19:47:23.35 ID:x1AcDznE0
アルゴリズムとか
184 :
デフォルトの名無しさん (アウアウ Sa05-1g4J)
2016/04/22(金) 21:06:06.11 ID:7+eL8tO2a
保守性のために標準ライブラリを使うんだろ
コーディング速度や実行速度の為ではない
185 :
デフォルトの名無しさん (ワンミングク MMd0-3Kaz)
2016/04/22(金) 21:27:17.03 ID:+uE+J+gQM
標準ライブラリを使う使わないの話はお前以外してない
186 :
デフォルトの名無しさん (ワッチョイ 217b-xSxp)
2016/04/23(土) 02:40:57.38 ID:m/KBeaUS0
>>182 信号処理とかだとテンプレートなしではもう無理
論理的に同じ処理をするのに、整数、float、doubleで別々のコードを書かなきゃいけないなんて
やってられない
187 :
デフォルトの名無しさん (ワッチョイ f1e1-gALo)
2016/04/23(土) 08:43:35.78 ID:F/8DDl4q0
>>182 テンプレート引数にテンプレートを指定する手法が必要な時。
188 :
デフォルトの名無しさん (ワッチョイ 6be7-FmnC)
2016/04/23(土) 08:46:03.16 ID:bKfgUY2x0
ファクトリーメソッドとかかなぁ。
189 :
デフォルトの名無しさん (ワッチョイ 4db4-z8Ax)
2016/04/23(土) 14:18:29.26 ID:nvSaEwLX0
>>186 はまさに
>>183 の例だな
型の振る舞いだけに着目して抽象的な操作を記述できるようにする
だから静的型付けの言語でテンプレートやらジェネリクスやらをまともに使うには型制約が必須なんだけど、
未だに型制約を記述するための支援がない言語があるらしい
190 :
デフォルトの名無しさん (ワッチョイ 57e6-zfCm)
2016/04/23(土) 19:16:14.77 ID:tcao+QTV0
191 :
デフォルトの名無しさん (ワッチョイ 1030-gALo)
2016/04/23(土) 20:18:32.35 ID:hfDo0ds00
例をあげようって話の流れで、なんで一例に対してファイナルになるんだよ
192 :
デフォルトの名無しさん (ワッチョイ 57e6-zfCm)
2016/04/23(土) 21:02:12.70 ID:tcao+QTV0
> 整数、float、doubleで別々のコードを書かなきゃいけないなんて
やってられない
じゃあ、これ以上の答えがあるってのか?
193 :
デフォルトの名無しさん (ワッチョイ 1ec0-v6Xr)
2016/04/23(土) 21:36:34.80 ID:zzpDuGYL0
1st アンサーかも
194 :
デフォルトの名無しさん (ワッチョイ 1030-gALo)
2016/04/23(土) 23:38:40.69 ID:hfDo0ds00
195 :
デフォルトの名無しさん (ワッチョイ 5cec-zfCm)
2016/04/24(日) 06:26:37.85 ID:936uZ4pr0
あとは重箱の隅みたいな細かいことばかりだと思うが?
196 :
デフォルトの名無しさん (ワッチョイ 1030-gALo)
2016/04/24(日) 09:20:15.79 ID:bi4aOyNo0
いやだから、例をあげろっていう話の流れだったんじゃ
197 :
デフォルトの名無しさん (ワッチョイ 6be7-FmnC)
2016/04/24(日) 09:37:21.56 ID:qrH7Oshx0
唯一解が出ちゃってぽしゃったんだよ。
198 :
デフォルトの名無しさん (スプー Sdf8-DbIH)
2016/04/24(日) 09:53:33.85 ID:PJXOgY3Xd
199 :
デフォルトの名無しさん (アウアウ Sa05-L+iy)
2016/04/24(日) 14:18:35.81 ID:nyww5Nv/a
コンパイル時に計算したい場合か
200 :
デフォルトの名無しさん (オッペケ Sr8d-DbIH)
2016/04/24(日) 22:23:36.21 ID:tmf17AXnr
オナニー以外に使い道は無い
201 :
デフォルトの名無しさん (ワッチョイ 4b02-gALo)
2016/04/24(日) 22:35:15.43 ID:C4if0ujR0
オーバーロードで事足りる程度でもテンプレートなら行数を圧縮することはできる
202 :
デフォルトの名無しさん (ワッチョイ f140-FmnC)
2016/04/25(月) 02:07:03.74 ID:4nVWf6Tg0
行数を圧縮すると成果物が少ないと評価される…
203 :
デフォルトの名無しさん (アウアウ Sa05-1g4J)
2016/04/25(月) 08:14:09.84 ID:4toUZyy7a
糞査定なんとかしないと
204 :
デフォルトの名無しさん (スプー Sdf8-DbIH)
2016/04/25(月) 08:48:18.03 ID:RM4kY/BSd
C++11になってVariadicと右辺値/左辺値が登場したので、型のバリエーションだけじゃなくてもっといろんな
パターンについてのバリエーションをtemplateで表現できるようになった。
俺はヘタレなのでかなり難しくなったと感じている。
205 :
デフォルトの名無しさん (ワッチョイ 5c42-zfCm)
2016/04/25(月) 13:43:44.73 ID:d+bG+pO00
>>201 無数にあっちゃいけない関数はオーバーロード一択でそ
206 :
デフォルトの名無しさん (JP 0H41-uQxx)
2016/04/25(月) 14:15:42.28 ID:FkG7uZgrH
質問失礼します。
'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()
コンパイルはできています。
よろしくお願いします。
(なんか急にできなくなった気がします。前は、問題無だったはずなのになぁ)
207 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK9b-0LZu)
2016/04/25(月) 14:21:48.07 ID:9Ydy9LbhK
>>206 ファイル'hoge.dll'が見付からないからエラーになってる。'hoge.dll'はどこにある?
208 :
デフォルトの名無しさん (JP 0H41-uQxx)
2016/04/25(月) 16:01:11.85 ID:FkG7uZgrH
回答ありがとうございます。
exeと、同じフォルダにあります。
読み込みました」って、出てるから、いったん読み込みはできてると思うのですが。
Cannot find or open the PDB file
(このPDBについてのメッセージは、関係ないと思います)
よろしくおねがいします。
209 :
デフォルトの名無しさん (ワッチョイ 98ff-nTsV)
2016/04/25(月) 16:14:18.30 ID:Y5eHwd9i0
C++/CLIのほうで聞いたほうがいいかも
そのパスはほんとにそのまま?日本語混ざってたりしないよね
210 :
デフォルトの名無しさん (ワントンキン MMd0-DbIH)
2016/04/25(月) 16:17:09.73 ID:nodCWmX5M
pdbも同じとこにおきゃいいじゃん
211 :
デフォルトの名無しさん (JP 0H41-uQxx)
2016/04/25(月) 16:33:35.80 ID:FkG7uZgrH
回答ありがとうございます。
>209
日本語は、入っていません。
>210
拾ってきたdllでして、pdbがありません。
他にも、以下のような、謎のメッセージも出ています。
'abc.exe': 'ImageAtBase0x10000000' を読み込みました。含める/除外する設定により、読み込みは無効になっています。
'abc.exe': 'ImageAtBase0x10000000' をアンロード
よろしくおねがいします。
212 :
デフォルトの名無しさん (ワッチョイ 397b-DbIH)
2016/04/25(月) 17:20:39.11 ID:Vz/PfYjH0
拾い物のdll名を出せない理由は?
盗品だから?
213 :
デフォルトの名無しさん (ワッチョイ 66a6-zfCm)
2016/04/25(月) 18:20:21.95 ID:zMzD7cFX0
どーでもいいわ、んなこと
214 :
デフォルトの名無しさん (ワッチョイ 3e4e-DbIH)
2016/04/25(月) 21:18:39.53 ID:nQ9xWXS00
>>211 まさかデバッガでステップインしようとしてる?
215 :
デフォルトの名無しさん (ワッチョイ 3ee5-v6Xr)
2016/04/25(月) 22:09:57.56 ID:p2RYg3GI0
右辺値なんて無くてもいいよね
216 :
デフォルトの名無しさん (ワントンキン MMd0-DbIH)
2016/04/25(月) 22:22:09.27 ID:nodCWmX5M
>>211 ビルドの設定が違うとかじゃないの
ランタイムをマルチスレッドにするかマルチスレッドDLLにするかとか
depedency walkerかなんかで必要なdll探してみて足りなきゃ置く、ランタイムのバージョンそろえる、そもそもランタイムの要否を調べてみたら
217 :
デフォルトの名無しさん (ワッチョイ 6aa6-gALo)
2016/04/25(月) 22:25:01.35 ID:gNn0n/ow0
>>215 なんでどさくさに紛れて変なこと言うの?www
218 :
デフォルトの名無しさん (ワッチョイ 7063-DbIH)
2016/04/25(月) 22:35:01.48 ID:yNWSO4Dk0
>>206 .NET Frameworkの質問をC++スレでするな低能
知らない奴がdepedency walkerとか言い出しちゃうだろ
219 :
デフォルトの名無しさん (ワッチョイ 3951-DxlG)
2016/04/25(月) 23:23:42.73 ID:yWovrPca0
>>206 xyz.dllが使ってる他のdllが見つからなかったからxyz.dllのロードも失敗したってことだろ。
220 :
デフォルトの名無しさん (ドコグロ MM5c-DbIH)
2016/04/26(火) 07:05:42.42 ID:9Pm0YF2lM
>>215 理解できないものはないものとして使わない
って言うのは正しい姿勢
なので
> 右辺値なんて無くてもいいよね
と君が考えるのは正しい
221 :
デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
2016/04/26(火) 08:03:25.27 ID:uoCWhHDE0
他人に同意を求めるつもりで書いたなら正しくないけどな
222 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 08:08:11.99 ID:X2oLSlFmd
右辺値がない?
223 :
デフォルトの名無しさん (ワントンキン MMd0-DbIH)
2016/04/26(火) 08:30:56.28 ID:15Xmlz4WM
俺も右辺値参照いまいちよくわかってないんだけど、
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();
だと意味ある
こんな認識なんだけど正しいのだろうか
224 :
デフォルトの名無しさん (ワッチョイ 8dec-zfCm)
2016/04/26(火) 08:46:32.55 ID:rGhmFmB70
なんでresを右辺値参照にしてるんだ? そこは関係ないぞ。
C++98ではテンポラリを束縛する参照にconstが必須だったが、
それではムーブ動作させるのにconst_castが必要というアフォなことになっていて、
じゃあconst任意の参照を新設しましょうって出てきたのが右辺値参照で、
使うときの考え方は参照先がテンポラリの場合に使うものだ。
225 :
デフォルトの名無しさん (アウアウ Sa05-L+iy)
2016/04/26(火) 09:47:41.48 ID:A4vuhbbUa
const T&で大体十分
226 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 10:46:34.53 ID:X2oLSlFmd
どんな場合もローカル変数を参照で返してはいかんよ
227 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 10:48:10.37 ID:IHpx3UMhd
んなこたない
228 :
デフォルトの名無しさん (ワッチョイ 3ee5-v6Xr)
2016/04/26(火) 11:06:37.75 ID:GLJzO2KH0
そもそも右辺値参照みたいな変な事をしなくても良いコードを書けば良い。
229 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 11:34:25.19 ID:X2oLSlFmd
230 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 11:35:38.49 ID:IHpx3UMhd
んなこたない
231 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 11:52:48.14 ID:X2oLSlFmd
232 :
デフォルトの名無しさん (ワッチョイ 3ee5-v6Xr)
2016/04/26(火) 11:57:22.86 ID:GLJzO2KH0
右辺値参照を使わざるを得ない状況なんて無いよね。
233 :
デフォルトの名無しさん (ワッチョイ 4306-gALo)
2016/04/26(火) 17:12:26.21 ID:sp7HDy2O0
お前がそう思うんならそうなんだろう お前ん中ではな
っつぅか
チューリング完全ならなんでも書けるんだからC++自体いらないよね、K&Rで充分
っつぅか
234 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 17:55:22.27 ID:X2oLSlFmd
235 :
はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 19a8-gALo)
2016/04/26(火) 18:01:58.79 ID:1VUmXePL0
言語機能の多くは抽象化の道具なんだよ。
一旦書いたら中身は忘れてしまいたいから壁を作ってその向こうに押しやる道具が必要なんだ。
236 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 18:03:13.30 ID:X2oLSlFmd
まーた
237 :
デフォルトの名無しさん (オッペケ Sr8d-DbIH)
2016/04/26(火) 18:17:56.12 ID:jVopD7Dvr
>>223 2番目はコピーが発生しないようムーブしているから意味はある
ただ安易なmoveや参照の使用は最適化を阻害するため推奨はされない
推奨される書き方はこう
std::vector<double> calc() {
std::vector<double> res = {};
return res;
}
std::vector<double> v = calc();
238 :
デフォルトの名無しさん (ワッチョイ 4b02-gALo)
2016/04/26(火) 18:57:35.91 ID:tQCMt5AL0
>>232 アセンブラを使わずにギリギリまでチューニングしたいときに使えるんじゃないの
知らないけど
239 :
デフォルトの名無しさん (ワッチョイ 4db4-gALo)
2016/04/26(火) 19:07:46.09 ID:1BXtyTOd0
戻り値最適化って「本当に最適化されてんのか」っていっつも不安になる
240 :
デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
2016/04/26(火) 19:31:52.57 ID:uoCWhHDE0
意味があるのはこういう時
std::vector<double> v = {};
o.assign(std::move(v));//これ以降vは使わない
でもこれも出来るのであればstd::vector<double>を返す関数作って関数の返り値を直接引数に渡せば不要
あと、std::vectorに入れるクラスの場合(nothrowな)move operator書いた方がパフォーマンスあがる事が多い
241 :
デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
2016/04/26(火) 19:38:27.71 ID:uoCWhHDE0
ちょっと補足
この場合のassignの定義は
void assign(std::vector<double> v){
member.swap(v);
}
こんな感じのものね
242 :
デフォルトの名無しさん (ワッチョイ 7063-DbIH)
2016/04/26(火) 20:22:16.94 ID:gEJwYSMG0
↑糞コード
243 :
デフォルトの名無しさん (ワッチョイ 7063-DbIH)
2016/04/26(火) 22:14:51.75 ID:gEJwYSMG0
糞コードを発明する前にstring::assignとかの標準ライブラリが
どうなってるか調べようとしないんだろか
因みにスコットメイヤーの本には値渡しはhigher costとあるな
244 :
デフォルトの名無しさん (スプー Sda8-DbIH)
2016/04/26(火) 22:30:23.02 ID:X2oLSlFmd
まあいいじゃないか。実行時性能なんか、どうだって。
245 :
デフォルトの名無しさん (ワッチョイ 7063-DbIH)
2016/04/26(火) 22:53:39.31 ID:gEJwYSMG0
>>239 もし最適化されてなかったら困るのか?
別にコピーが走る訳じゃない
246 :
デフォルトの名無しさん (アウアウ Sa05-1g4J)
2016/04/26(火) 23:32:52.19 ID:JB7K2U7Pa
最適化はC++erの大好物だ
247 :
デフォルトの名無しさん (ワッチョイ 617b-3Kaz)
2016/04/27(水) 01:49:55.63 ID:GuBYWkr/0
こういうのは値渡しでswapした方がいいって事知らねえの?
248 :
デフォルトの名無しさん (ワッチョイ 19a8-gALo)
2016/04/27(水) 01:53:22.01 ID:0mhH1Qow0
実際に遅いことがわかってからチューニングにとりかかっても遅くはない。
まあライブラリはどういう状況で使われるかわからんから積極的に性能も意識して欲しくはあるが。
249 :
デフォルトの名無しさん (ワッチョイ 617b-7Ba6)
2016/04/27(水) 02:12:47.40 ID:GuBYWkr/0
>>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のみ
250 :
デフォルトの名無しさん (オッペケ Sr8d-DbIH)
2016/04/27(水) 19:30:14.55 ID:2yCvnT+mr
>>249 >コスト差はswapのみ
ムブコンのコストはどこ行ったのよ
251 :
デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
2016/04/27(水) 19:52:26.36 ID:turQDkKlM
>>250 rvalue渡したらどっちもmoveになる
252 :
デフォルトの名無しさん (オッペケ Sr8d-DbIH)
2016/04/27(水) 20:04:17.37 ID:2yCvnT+mr
>>251 いやならないし
参照ならassign呼び出し時のmoveは起こらない
253 :
デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
2016/04/27(水) 20:09:13.21 ID:turQDkKlM
値渡しの方がmoveコンストラクタ自体動かない場合もあるからswapコストより差は小さくなる可能性があるという話であれば、否定はしない。
値渡し=高コスト=糞コード
と考えもせずに言う奴の反論したかっただけだからそこまで細かい説明するのであればご自由に
254 :
デフォルトの名無しさん (ワントンキン MMd0-3Kaz)
2016/04/27(水) 20:16:31.83 ID:turQDkKlM
>>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回
255 :
デフォルトの名無しさん (ワッチョイ 6aa6-gALo)
2016/04/27(水) 20:33:00.00 ID:56VYowtZ0
void assign(std::vector<double> v);
これ定義しちゃうとオーバーロードきかないんだっけ?
256 :
デフォルトの名無しさん (ワッチョイ 7063-DbIH)
2016/04/27(水) 23:41:06.04 ID:2JVtUYOe0
>>254 どこをどう数えたらswapの違いになるのか
右辺値を渡した時
f(X p);
関数呼び出しのムーブ生成(メモリ確保+ムーブ)
swap内の一時オブジェクトのムーブ生成(メモリ確保+ムーブ)
swap内のムーブ代入(破棄+ムーブ)
swap内のムーブ代入(破棄+ムーブ)
f(X && p);
ムーブ代入(破棄+ムーブ)
左辺値を渡した時
f(X p);
関数呼び出しのコピー生成(メモリ確保+コピー)
swap内の一時オブジェクトのムーブ生成(メモリ確保+ムーブ)
swap内のムーブ代入(破棄+ムーブ)
swap内のムーブ代入(破棄+ムーブ)
f(X const & p);
コピー代入(破棄+コピー)
257 :
デフォルトの名無しさん (ワッチョイ 6aa6-gALo)
2016/04/27(水) 23:48:41.61 ID:56VYowtZ0
258 :
デフォルトの名無しさん (ワッチョイ 753c-C5As)
2016/04/27(水) 23:54:55.96 ID:XwQarpQA0
std::cout << 0["2ch"];
これは合法ですか?
259 :
デフォルトの名無しさん (ワッチョイ 7063-DbIH)
2016/04/27(水) 23:57:03.40 ID:2JVtUYOe0
むしろ、何か違法だとでも?
260 :
デフォルトの名無しさん (ワッチョイ 753c-C5As)
2016/04/27(水) 23:58:40.17 ID:XwQarpQA0
2chは違法だと聞きました。
261 :
デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
2016/04/28(木) 00:08:31.03 ID:2BwMw+ri0
>>256 std::vector::swapでmoveが呼ばれるとは初耳ですわ
262 :
デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
2016/04/28(木) 00:14:58.53 ID:2BwMw+ri0
>>256 聞いて解らなくてもちょっと試してみればすぐ分かる話なのに…
263 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/28(木) 00:22:32.02 ID:iQ2WswSv0
ああ、vectorか
確かにswapは内部のポインターの交換だけで済むな。
だが値渡しがswap以外に一時オブジェクトのメモリ確保が一回多いことに変わりはない
264 :
デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
2016/04/28(木) 00:27:19.07 ID:2BwMw+ri0
>>263 それをメモリ確保と呼ぶなら参照渡しのアドレスわスタックに積むのもメモリ確保になっちゃうけど?
265 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/28(木) 00:39:59.18 ID:iQ2WswSv0
>>264 お前の脳内ではなるのかも知れないが規格ではそう呼ばれていないし
特に関数テンプレートのようなインライン展開を期待する文脈ではスタックを消費しないだろう
std::move(obj)とか
266 :
デフォルトの名無しさん (ワッチョイ cb7b-RA4N)
2016/04/28(木) 00:50:17.80 ID:2BwMw+ri0
267 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/28(木) 01:06:21.52 ID:iQ2WswSv0
中身みてないけど、言い出すと思った
そりゃ規格で省略が許容されてるから環境依存でそうなることもあるだろう
だが「標準ライブラリは
>>247方式のassignを採用していない」という事実は変わらないぞ
268 :
デフォルトの名無しさん (ワッチョイ 37cf-JnPK)
2016/04/28(木) 01:09:47.90 ID:0YjJiZ000
>>267 主張変わった?
>>263 の「値渡しがswap以外に一時オブジェクトのメモリ確保が一回多い」は
取り下げってことでいいんだよね?
269 :
デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
2016/04/28(木) 01:23:16.15 ID:2BwMw+ri0
>>267 環境依存て規格にある程度準拠してて最適化有効にしてこうならないコンパイラあるの?
標準ライブラリ云々は誰もそんな主張してないしそんな当たり前の事言われてもだから何としか
270 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/28(木) 07:09:49.88 ID:iQ2WswSv0
>>268のような日本も読めない低能は
もう生きているのもつらいだろうな
271 :
デフォルトの名無しさん (ワッチョイ cb7b-HcEB)
2016/04/28(木) 07:37:37.05 ID:2BwMw+ri0
272 :
デフォルトの名無しさん (スプー Sdaf-hBSK)
2016/04/28(木) 08:34:17.99 ID:qBtwGihyd
>>257で既に指摘されてるけどメモリ確保って何なのさ?
273 :
片山博文MZ ◆T6xkBnTXz7B0 (ワッチョイ f38f-Ecb7)
2016/04/28(木) 12:08:14.63 ID:22WGF77t0
274 :
デフォルトの名無しさん (ワンミングク MM6f-HcEB)
2016/04/28(木) 19:31:48.39 ID:f4tKx6/8M
逃げちゃったかな?
275 :
デフォルトの名無しさん (ワッチョイ 57cb-OoOA)
2016/04/28(木) 20:41:41.67 ID:Fdy34kc40
C++11でもswapイディオムって使うんですか
276 :
デフォルトの名無しさん (オッペケ Sre7-hBSK)
2016/04/28(木) 21:03:01.76 ID:DqjglUBWr
>>272 途中で途切れた文章が指摘だったとは知らなかったぞ
オブジェクトの領域をストレージに確保することのつもりで書いた。
ここでのオブジェクトは規格の1.8のオブジェクトのことだが
フリーストアでの確保ではなく自動ストレージ期間のオブジェクトになる
277 :
デフォルトの名無しさん (ワッチョイ 5b3c-89Kw)
2016/04/28(木) 22:24:39.75 ID:vUtl/OeK0
日本では、秋葉原に走ってメモリー確保することもありますからね。
278 :
デフォルトの名無しさん (ワッチョイ 4b66-nlgT)
2016/04/28(木) 22:46:39.38 ID:wGgKuj3r0
MB8164-12か。何もかも皆懐かしい。
279 :
デフォルトの名無しさん (ワンミングク MM6f-HcEB)
2016/04/28(木) 23:19:45.20 ID:f4tKx6/8M
>>276 値渡しの場合にお前の言うメモリ確保が余計に実行される例そろそろ書いたら?
280 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/28(木) 23:54:08.87 ID:iQ2WswSv0
規格であり得るとされる挙動を立証するなど時間の無駄
低能にはちょっと難しかったかもしれないが、
コンストラクターが最大何回呼ばれうるかは意識した方がいいと思う
281 :
デフォルトの名無しさん (ワンミングク MM6f-HcEB)
2016/04/29(金) 00:13:53.74 ID:Wehf76ZnM
ダメだこいつ…
書くのも無駄な例を意識しろってもう何言ってんのかわかんねぇわ
282 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/29(金) 00:49:18.09 ID:QcOA+a6j0
283 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/29(金) 02:37:05.42 ID:GPvE7zg30
>>282 どこのマヌケがコピーコンストラクタとコピー演算子で差のでるような実装すんの?
284 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/29(金) 02:40:06.76 ID:+q+2SQ0C0
扱ってるオブジェクトがstd::vectorでswapするとき一時オブジェクト作るときにメモリ確保するよ。
という話のように思うのだが。
C++は常にANY扱ってるわけじゃねーんだから、中身のことまでケアしてください。
285 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/29(金) 02:43:54.15 ID:GPvE7zg30
286 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/29(金) 02:45:03.22 ID:+q+2SQ0C0
ちなみに俺はあんまり経験ないけど、
moveするときは、メンバ変数はスワップしてmove元をクリアして終わりだな。
確かmove元が使えなくなってもOKだったと思うし。
287 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/29(金) 02:45:57.22 ID:+q+2SQ0C0
288 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/29(金) 02:46:41.31 ID:GPvE7zg30
>>284 std::vector::swapの一時オブジェクトのコストどれだけか解って言ってる?
289 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/29(金) 02:48:27.73 ID:+q+2SQ0C0
>>288 オーダーは知らないが、推測では全コピーするから相当重い。
290 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/29(金) 02:50:08.54 ID:+q+2SQ0C0
もしくはカスタムロジックで魔法でもあるのか。
291 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/29(金) 02:51:25.67 ID:GPvE7zg30
>>289 一周遅れ所じゃないぞ、そんなのでよく
>中身のことまでケアしてください
なんて言えたな…
292 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/29(金) 02:53:25.35 ID:+q+2SQ0C0
>>291 それは悪かった。
じゃあ、何の話をしてるか整理しないと、認識度が段々でかみ合ってないぞ。
293 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/29(金) 03:15:26.74 ID:GPvE7zg30
コピー&swap一つ実装したときと、
const参照と右辺値参照2つ実装したときのコスト差はswap分か最適化によってはそれ以下って言ったら
>>256 これ
まさか一時オブジェクトの為にスタックの場所取るのにコストかかるとでもおもってるような
294 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/29(金) 08:14:20.77 ID:QcOA+a6j0
>>284 スワップの話ではないぞ。スワップ以外でオブジェクト生成がされうるかどうかだ
>>249 「コスト差はswapのみ」
↓
>>250「ムブコンのコストはどこ行った」
>>263で「値渡しがswap以外に一時オブジェクトのメモリ確保が一回多いことに変わりはない」
↓
>>279「値渡しの場合にお前の言うメモリ確保が余計に実行される例そろそろ書いたら?」
↓
>>282 >>293 オブジェクトが余分に生成されその分デストラクターが呼び出されているんだからコストは発生しているぞ
swapの処理以外に1バイトも無駄な実行コードが生成されない確証でも出してみたらどうだ?
ちなみにスワップ以外の話をしているんだからスワップの過程で行うムーブの話はするなよ
295 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/29(金) 08:49:49.69 ID:QcOA+a6j0
なるほどわかった。
最初に
>>250でムーブ関連の小さなコストの見逃しを指摘してやったのだが
糖質はvectorの中身のコピーが行われるという指摘を受けた幻覚を見てしまってんだな。
途中で自動ストレージとかの単語が出た時点で気づきそうなものだが
〜最初の指摘(
>>250)〜
>
>>249 > >コスト差はswapのみ
> ムブコンのコストはどこ行ったのよ
296 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/29(金) 10:12:54.25 ID:GPvE7zg30
最初からデストラクタ(の中の条件文)一個分のコストの事言ってたとは思えないけど、それのこと言ってたならそうですね。
くっそどうでもいいけど。
297 :
デフォルトの名無しさん (ワッチョイ 5b3c-89Kw)
2016/04/29(金) 10:19:20.00 ID:+JsGJ08I0
バトルプログラマー葉子(G パスカル ザカリー著 闘うプログラマーに出てくる女性)も
こうして議論したのかなあ。
298 :
デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
2016/04/29(金) 10:22:08.43 ID:5uxjIDtf0
ハードウェアがもっと進歩して時間と空間のコストが厳密にゼロになるときが早く来ればいいのに...
299 :
デフォルトの名無しさん (ワッチョイ cf02-nlgT)
2016/04/29(金) 11:27:56.89 ID:GKcYz8vk0
物理現象の伝搬は最速でも光速度までで
何をするにもプランク時間はどうしてもかかる
300 :
デフォルトの名無しさん (ワッチョイ 9302-OoOA)
2016/04/29(金) 11:45:21.07 ID:uF4QxRQl0
人間の認識時間を遅らせればいいんだ
体感で1秒が0.1秒に感じるように
301 :
デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
2016/04/29(金) 11:51:40.12 ID:5uxjIDtf0
大きさが厳密にゼロの領域の中でコトを済ませる方向で。。。
可算ステップの任意のアルゴリズムが時間ゼロで終了すればハッピーだ。
302 :
デフォルトの名無しさん (アウアウ Sa27-7WOp)
2016/04/29(金) 12:53:39.12 ID:w38rMPYqa
303 :
デフォルトの名無しさん (ワッチョイ 9302-OoOA)
2016/04/29(金) 13:01:53.27 ID:uF4QxRQl0
そうだ宇宙全体の物質の素粒子レベルの運動をコンパイル時に計算すればいいんだ
そうすれば今後起こる事象全てを定数化できてあらゆる実行時の処理のオーダーは1になる
C++は宇宙を制する
304 :
デフォルトの名無しさん (ワッチョイ 4fc0-6p9G)
2016/04/29(金) 20:45:07.19 ID:JN7XYE/q0
そろそろよそでやれ
305 :
デフォルトの名無しさん (アウアウ Sa27-7WOp)
2016/04/29(金) 21:21:37.28 ID:SAOt+riJa
それでは本題に戻りましょう
306 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/04/30(土) 01:32:01.04 ID:2zZXg3Qa0
PURE関数が汝を救う一端になろうぞ。
307 :
デフォルトの名無しさん (ワッチョイ cb7b-iSeV)
2016/04/30(土) 11:10:13.98 ID:/qrbaLqo0
swap だとかコピーだとかこんな下らん事で言い争いするくらいなら黙って
C 言語でポインタ使ってりゃいいのにと思う。
308 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/30(土) 11:37:07.49 ID:olAQ2y8z0
言い争いは問題でなく、言語仕様が他の言語に比べて複雑なことに起因してると思うが。
基本は「嫌なら使うな」の言語
309 :
デフォルトの名無しさん (ワッチョイ cb7b-iSeV)
2016/04/30(土) 11:45:40.10 ID:/qrbaLqo0
嫌だからおれは使わんけど、馬鹿が使って迷惑かけて、
あげく言語仕様ではこうなのにその通りに動かないコンパイラが悪いだの言い出すのが
一番の問題。
310 :
デフォルトの名無しさん (ワッチョイ a77b-uqHn)
2016/04/30(土) 11:56:01.21 ID:Nr00vcAW0
どうでもいいけどc++11とか14に対応したクックブックが凄く欲しい。
あとg++のwcoutのロケール対応は最新版だとどうなっているか誰か教えて。
311 :
デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
2016/04/30(土) 14:00:29.09 ID:uVz81x780
GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
312 :
デフォルトの名無しさん (ワッチョイ b730-OoOA)
2016/04/30(土) 14:12:28.07 ID:kBEc2ffr0
アスペ関係あるのかそれ
313 :
デフォルトの名無しさん (オッペケ Sre7-hBSK)
2016/04/30(土) 14:15:22.52 ID:FztpmG49r
314 :
デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
2016/04/30(土) 14:23:05.68 ID:uVz81x780
アスぺは関係ないw
315 :
デフォルトの名無しさん (ワッチョイ 27bf-ZWIR)
2016/04/30(土) 15:24:25.97 ID:EkpjLvdA0
じゃあ荒らしは去れになっちゃうなww
316 :
デフォルトの名無しさん (アウアウ Sa27-7WOp)
2016/04/30(土) 16:32:02.70 ID:dTOuLsNga
暗号通信は犯罪に使われるので政府用バックドアが必要になる。
しかしそうすると職権乱用が懸念される。
そこで、次善の策として、国際的に承認が必要にするというのはどうか?
復号には常任理事国全ての政府の承認が必要不可欠とするというものだ
アメリカがYesと言っても中国(或いはロシア)がNoというかもしれないので安易に覗き見はできなくなるだろう
317 :
デフォルトの名無しさん (スプー Sd2f-hBSK)
2016/04/30(土) 18:16:59.09 ID:OJjCBDMXd
なるほどC++らしい
318 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/04/30(土) 20:20:59.06 ID:mxQluw9J0
>>307 C言語でポインタ使うのが同じくらい書くのが楽なら使うよ
それにC言語でも環境やコンパイラによってこう書いた方が効率いいとか、冗長な記述減らせるけど実行コストそれほど変わらないという議論あるよね?
319 :
デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
2016/04/30(土) 20:35:53.60 ID:uVz81x780
>>316 Covenantの目的はインターネットにおける権力による抑圧を排除することが最終的な目標です。
そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
320 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/04/30(土) 23:13:30.56 ID:+bg/IZ99H
- 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の問題?
321 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/04/30(土) 23:15:38.21 ID:+bg/IZ99H
// mt19937 engine; // 32bitパソコン用
↓
mt19937_64 engine(rnd());
322 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/04/30(土) 23:22:10.38 ID:olAQ2y8z0
何か以前、同じ悩みのレスを見たような
323 :
デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
2016/05/01(日) 00:54:26.52 ID:pgSGezQj0
>random_device rnd;
これを何にも使っていないからだな
>>321のように使え
324 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/01(日) 00:58:35.24 ID:fsqM/cei0
疑似乱数なんて、とある初期値を元に決まった数列を生成するだけだからな。
初期値が変わらないと数列も変わらん。
325 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/05/01(日) 01:08:56.51 ID:JjM58K48H
>>323 だから訂正した上で乱数が同じ値になってしまうと言ってる。
頭悪いな
326 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/01(日) 01:15:39.33 ID:fsqM/cei0
うんじゃー、ランダムデバイスは環境定義だから、ランダムデバイスもMTなんじゃね?
普通はCPUのランダム取ってくるんだけど。
327 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/01(日) 01:27:29.62 ID:fsqM/cei0
328 :
デフォルトの名無しさん (アウアウ Sa27-ohpd)
2016/05/01(日) 08:19:16.64 ID:4ccqRarua
random_deviceの実装見ろ
329 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/05/01(日) 09:02:25.15 ID:JjM58K48H
>>328 あほか。
ひょっとしたらgccをbuildする時のTDM-GCC(MinGW)の問題かもしれん。
https://github.com/bitcoin/bitcoin/issues/2290 しかし、英文が微妙なニュアンスでわからん。
-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.
とある.うーん、わからん。
330 :
デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
2016/05/01(日) 09:11:05.64 ID:pgSGezQj0
331 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/05/01(日) 09:11:57.94 ID:JjM58K48H
332 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/01(日) 09:48:18.92 ID:p2YCnIW80
>>329 『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.』
「アホか。」はお前のことだろう
333 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/05/01(日) 09:53:17.94 ID:JjM58K48H
いいからお前はひっこんでろ
334 :
デフォルトの名無しさん (ワッチョイ cb7b-1+8h)
2016/05/01(日) 10:40:34.11 ID:8qUfiok/0
335 :
デフォルトの名無しさん (ワッチョイ 37d9-0GMy)
2016/05/01(日) 10:50:50.22 ID:tY30d3V60
random_deviceが毎回異なる擬似乱数を返すかどうかは
random_device::entropy()の値をチェックする
これが 0 なら毎回同じ数列を返すので
>>334みたいにするといい
336 :
デフォルトの名無しさん (ワッチョイ cb7b-1+8h)
2016/05/01(日) 11:01:18.00 ID:8qUfiok/0
entropy()==0じゃチェックできないよ
規格通りならentropy()==0でもoperator()は「非決定性」の値を返さなきゃいけない
何度起動しても同じ数列が返るならそれは実装のバグ
337 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/01(日) 11:02:50.07 ID:p2YCnIW80
338 :
デフォルトの名無しさん (JP 0H07-89Kw)
2016/05/01(日) 11:04:15.55 ID:JjM58K48H
339 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/01(日) 23:34:15.98 ID:p2YCnIW80
>>227 具体的にはどのような場合?
静的変数の参照を返すとか?
340 :
デフォルトの名無しさん (ワッチョイ 3b64-nlgT)
2016/05/02(月) 00:24:24.91 ID:rK2U+l6Y0
グローバルでない変数って色々あるからなあ
341 :
デフォルトの名無しさん (ワッチョイ 2f94-Huko)
2016/05/02(月) 01:15:48.64 ID:lijKCiQb0
入門者です。初心者用スレがない様なのでこちらで質問します
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);
}
初めて見るのでうまく説明できませんが、必要な情報は随時追加しますのでエスパーできる人
教えてください
342 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 01:22:22.63 ID:GdZkeqisK
>>341 正の数は絶対値が大きいなら大きい数になる。
逆に負の数は絶対値が小さいなら大きい数になる。
絶対値だけを見るなら正の数の大小関係は負の数の大小関係の逆になる。
343 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/02(月) 01:27:04.99 ID:LofVFQLs0
検索手法だと思うが、
普通MinMaxって最小値と最大値をウエイトにするもんだと思うので、カスタムロジックなんじゃないか?
実装したやつに聞いてみろー。
発展としてアルファベータカットっていうものもあるよ。
MINMAX検索の一番のキモは、
最大値が最適解とは限らない。かつ、最小値が最適解とは限らない。という条件で最適な解を探す。
というもの。
それと、C++11で可変引数版、std::minとmax入ったからそっち使ったほうが読みやすい。
344 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/02(月) 01:30:07.03 ID:LofVFQLs0
あれ?俺勘違いしてるか?
345 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 01:33:46.98 ID:GdZkeqisK
数学で考えよう。簡単のためにまずは二項について
-min(-x,-y)=max(x,y)
を証明したい。左辺は
-(-x<-y?-x:-y)=-(x>y?-x:-y) …(1)
=(x>y?x:y) …(2)
=右辺
となる。
※(1):不等号にマイナス1を掛ける。
※(2):マイナスをカッコの中に作用させる。
証明終わり。三項についても同様。
346 :
デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
2016/05/02(月) 01:37:24.80 ID:dUwljW2j0
>>341 本題と関係ないかもしれないが
そのMinMax::max関数の実装オカシイだろ
347 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/02(月) 01:38:07.25 ID:LofVFQLs0
解説サンクス。
あら。元に戻っちゃった。
MINの条件はあってるのか。
そーりー。
348 :
デフォルトの名無しさん (アウアウ Sa27-7WOp)
2016/05/02(月) 01:49:33.84 ID:87lwCP4Ca
>>341 数直線書いてみれば一発だろ
n3
n1
n2
──────
-n2
-n1
-n3
上方向が正、──が0ラインな。
負にして最大を取れば、最小を負にした値(-n2)が返る。あとはこれを負にすれば元の値に戻る。確かにn2は最小だ。
工学の理念、一つ!『車輪の再発明はするな』
工学の理念、一つ!『使える車輪は使い倒せ』
maxができたのにminも同じように構築するのでは理念に反する
maxを使ってminを表現できるならそうするべき。別々に作れば、もしかするとmaxにバグがあるかも知れない、minにバグがあるかも知れない。
しかしminをmaxで実装すれば、minは事実上書いていないのでバグは存在しない。maxにバグがあるかどうかだけ心配だけすればいい。
バグを防ぐコツはコードを書かないことだ。
349 :
デフォルトの名無しさん (アウアウ Sa27-7WOp)
2016/05/02(月) 01:51:28.06 ID:87lwCP4Ca
『使える車輪は(使い)回せ』に訂正するぅっ!
350 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/02(月) 01:59:45.92 ID:LofVFQLs0
解説ありがと。
数学ダメなんだよね〜。Orz
バグを防ぐコツは同意だ。
まぁ、車輪は使い方はマスターするべき。
そのためにも泥臭いことを否定してはいけない。(戒め)
351 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 02:12:35.32 ID:GdZkeqisK
次のような等式が成り立つことが知られている。
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)).
352 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 02:15:13.64 ID:GdZkeqisK
なお、
>>341のmin,max関数は最適化されておらず、無駄な比較を
行っているので、教育上あまり好ましくない。
353 :
デフォルトの名無しさん (ワッチョイ 0b75-lQqR)
2016/05/02(月) 02:43:59.63 ID:5VxisSG80
>>348 >maxを使ってminを表現できるならそうするべき。別々に作れば、もしかするとmaxにバグがあるかも知れない、minにバグがあるかも知れない。
>しかしminをmaxで実装すれば、minは事実上書いていないのでバグは存在しない。maxにバグがあるかどうかだけ心配だけすればいい。
いやいや 341のminはバグってるし。minにINT_MINを渡したらどうなるか考えてみ。
354 :
デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
2016/05/02(月) 02:45:04.65 ID:dUwljW2j0
maxも思いっきりバグってるが
355 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/02(月) 02:48:14.57 ID:LofVFQLs0
std::max<int>({1,2,3}); を使おう。(キリッ
356 :
デフォルトの名無しさん (ワッチョイ 0bdc-VEo+)
2016/05/02(月) 05:44:22.58 ID:8/8nC51l0
>>341 の MinMax:: に乗せてくれ(車輪の話だけに)。
>>346 >>354 max()は、引数に同じ値が2つ与えられるとダメなのね。
n1 = 2, n2 = 2, n3 = 1 といった場合。
比較演算子を > でなく >= にすればいいのかな。
(小手先で修正してまで使うとも思えないけど一応)
>>353 の INT_MIN の符号反転の問題はいつも見逃すなぁ。
intが32bitもあると「億なんてデカい値は使わないし…」で
境界条件を考慮し忘れる。
おかげで俺の部屋は悪魔ハーレム状態。
357 :
デフォルトの名無しさん (ワッチョイ ab51-JnPK)
2016/05/02(月) 06:18:00.27 ID:zu7MqjLX0
仕様で「入力がINT_MINの場合は正しい値を返さない」とするだけでプログラムがすっきり。
358 :
デフォルトの名無しさん (ワッチョイ 2f94-Huko)
2016/05/02(月) 10:03:31.77 ID:lijKCiQb0
359 :
デフォルトの名無しさん (ワッチョイ 13e7-11Ad)
2016/05/02(月) 10:30:56.03 ID:LofVFQLs0
ぶー。検索関係なかった。Orz
360 :
デフォルトの名無しさん (ワッチョイ 3bb4-OoOA)
2016/05/02(月) 16:31:01.42 ID:1reykZlZ0
std::unordered_set の要素をイテレータで取ろうとしたら自動で const 修飾されます
多分オブジェクトの内部状態が変わることでハッシュ値が変わることを考えてのことだと思うんですが、
いまの場合ハッシュ関数を自分で定義していて、操作の前後でハッシュ値が変化しないことは
(自分には)わかっています。
これをコンパイラに教えてあげるにはどうすればいいんでしょうか?
361 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/02(月) 16:56:44.90 ID:IsbB/noh0
諦める
そしてconst_castを使う
362 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 17:29:08.43 ID:V/Rz0lGL6
カレントディレクトリの設定が上手くいかないです。
test1の下にtest.exeとディレクトリtest2があるとして、
test1.exeで
SetCurrentDirectly(”test2”)
ofstream fout1(”test.dat”)
fout1 << ”test” << endl;
としても、test.datがtest2の下ではなく、test1の下に出来てしまいます。どうすればtest2の下に出来ますか?
363 :
360 (ワッチョイ 3bb4-OoOA)
2016/05/02(月) 17:48:25.88 ID:1reykZlZ0
>>361 ありがとうございます
結局 mutable にして切り抜けました
364 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 17:50:59.68 ID:GdZkeqisK
>>362 "test2"は相対パスだから、現在のディレクトリを確認しろ。
また、戻り値とエラーコードもチェックしろ。
365 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 18:04:07.30 ID:V/Rz0lGL6
>>364 ありがとうございます。
確認してみたところ、falseが帰ってきていました。
そして、getcurrentdirectlyして表示してみたところ
C
とだけ表示されました。
Cドライブの直下ということですか?
それだと、C:\と出そうなものですが…
366 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 18:18:14.94 ID:GdZkeqisK
>>365 おそらくUnicode文字列とANSI文字列の指定が間違っている。
型に関する警告が出ていないか確認せよ。
367 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 18:29:59.21 ID:GdZkeqisK
Unicode文字列(いわゆるワイド文字列)のリテラルは先頭にLを付ける。WCHAR型の配列またはポインタになる。
例) L"Unicode"
Unicode APIは関数名の最後にWが付く。ANSI APIはAが付く。
例) GetCurrentDirectoryW
Unicode文字列とANSI文字列を自動的に切り替えるにはリテラルを
TEXT( )で囲む。TCHAR型の配列またはポインタになる。
368 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 18:40:56.68 ID:GdZkeqisK
ANSI文字列を指定すべきところにUnicode文字列を指定することはできない。逆も同様。
例えば、printfの%sにワイド文字列を指定することはできない。
警告が出るか、分かりにくい論理エラーの原因になる。
369 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 18:44:54.84 ID:V/Rz0lGL6
>>366 ありがとうございます。
確認してみると、確かに警告が出ていました。
なので、
SetCurrentDirectly(”test2”)
の部分を
SetCurrentDirectly((LPCWSTR)”test2”)
としてみると警告が消えましたが、結果は変わりませんでした。
370 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 18:47:42.10 ID:GdZkeqisK
SetCurrentDirectoryA("test2");
SetCurrentDirectoryW(L"test2");
SetCurrentDirectory(TEXT("test2"));
371 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 18:57:39.76 ID:GdZkeqisK
配列や文字列リテラルを型キャストしても、型が変わるだけで、
中身のデータレイアウトが変わる訳ではない。
文字列を柔軟に扱いたいならATLとかMFCなどの外部ライブラリを使うことになる。
372 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 19:04:58.94 ID:V/Rz0lGL6
>>371 ご指摘の通りで、無事に解決しました。
何度もありがとうこざいました。大変参考になりました。
373 :
デフォルトの名無しさん (ワッチョイ a77b-1+8h)
2016/05/02(月) 19:07:51.78 ID:btgv3pKW0
>>362 test2ディレクトリをどこに作りたいのか知らないけど
絶対パスで指定しなきゃダメ
起動時のカレントディレクトリがどこになってるかについて仮定しちゃいけない
374 :
デフォルトの名無しさん (ササクッテロ Spe7-ZWIR)
2016/05/02(月) 19:19:38.69 ID:eom7L+e5p
.dllの配置場所ですが、
通常だと.exeと同じ階層に置いておかないと呼んでくれませんよね?
しかし、.exeのショートカットを作成してプロパティから作業フォルダーを指定すればそこから読んでくれるようです。
この作業フォルダーの指定をプログラム中で行う方法はありませんか?
vc14で、デバックモードで作業ディレクトリを指定の設定ならあるのですが、リリースした時の設定方法が分かりませんでした。
375 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 19:21:00.96 ID:V/Rz0lGL6
ちなみにdllは環境変数Pathに入っていないものを指定する場合です。(配布するときなど)
376 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 19:25:12.54 ID:V/Rz0lGL6
>>373 test2は最初からtest1の下に用意されているものです。
絶対パスは、配布する場合などに使えないので相対パスで指定の方法を考えていました。
今は教えてもらった通りで動いていますが、動かなくこともありますか?
377 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 19:29:01.28 ID:GdZkeqisK
【ディレクトリ・パス関連のAPI(テストに出るかも)】
GetCurrentDirectory
SetCurrentDirectory
GetModuleFileName
GetWindowsDirectory
GetSystemDirectory
GetTempPath
GetTempFileName
GetFullPathName
SHGetSpecialFolderLocation
SHGetSpecialFolderPath
SHGetPathFromIDList
378 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 19:31:57.84 ID:GdZkeqisK
このGetModuleFileName を使えば、読み込んだDLLのフルパスや現在実行中のEXEのフルパスが得られる。
379 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 19:41:24.27 ID:V/Rz0lGL6
>>378 何度もすみません。
exeの方の使い方は分かりましたが、
.dllのフルパスを取得してもどうすればいいのか分かりません。
調べると、.dllもカレントディレクトリから呼ばれる、とあったので、プログラムでsetcurrentdirectlyをしたついでに、.dllも読み込んでくれるかと新しいディレクトリの方に.dllを全部移してみたのですが、dllがないというエラーが吐かれました。
380 :
デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
2016/05/02(月) 19:49:22.82 ID:rwpIh2xK0
>>374 遅延読み込みするDLLを除いて通常の方法ではmain/WinMain関数に
制御が渡った時点でDLLのロードは終わって居るのでプログラムから制御するには
かなり特殊な手段を用いることになる
⇒ だから一般的にはやらないし、無理って言う人も居る
あと、スレ違いだから
381 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 19:57:48.05 ID:V/Rz0lGL6
>>380 ショートカット作成のプロパティから簡単に出来るので、プログラムでも簡単に出来るかと思ったのですが、難しいのですか…
スレ違いなのは分からずすみませんでした。
よければ、どこのスレに行けばいいのか分かりませんので教えて貰えますでしょうか?
382 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKb7-09nV)
2016/05/02(月) 19:58:23.64 ID:GdZkeqisK
383 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/02(月) 19:58:58.17 ID:3YV7E0Ft0
384 :
デフォルトの名無しさん (ガックシ 068f-ZWIR)
2016/05/02(月) 19:59:04.30 ID:V/Rz0lGL6
>>382 ありがとうございます、移動します。
お騒がせしましたどうもすみません。
385 :
デフォルトの名無しさん (ワッチョイ a77b-1+8h)
2016/05/02(月) 20:31:02.13 ID:btgv3pKW0
>>383 別に決め打ちの絶対パスで指定しろとは言ってないからね
そう解釈したならアホはお前
実行ファイルからの相対パスを指定したいならGetModuleFileNameで実行ファイルのパスを取って
目的とするファイルの絶対パスを作るのが定石
386 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/02(月) 20:59:05.00 ID:3YV7E0Ft0
>>385 > 起動時のカレントディレクトリがどこになってるかについて仮定しちゃいけない
がバカって言われていることも理解できてないのかよ...
387 :
デフォルトの名無しさん (ワッチョイ 2f57-Huko)
2016/05/02(月) 20:59:28.28 ID:B7fwjF4l0
コロン二つはstd::cinのように名前空間で区別するために使いますが、これはクラスで区別するときにも使うのですか?
クラスtestで、void test::sample(){...}の様に、です。
388 :
デフォルトの名無しさん (ガラプー KKb7-09nV)
2016/05/02(月) 21:01:18.03 ID:GdZkeqisK
389 :
デフォルトの名無しさん (ワッチョイ a77b-1+8h)
2016/05/02(月) 21:06:07.95 ID:btgv3pKW0
>>386 で?仮定していいとでも思ってるの?
「バカって言われてる」ってそんなバカなこと言ってるのはお前しか見えないけどなw
390 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KKc7-09nV)
2016/05/02(月) 21:11:40.51 ID:GdZkeqisK
CreateProcessやショートカットの設定でexe起動時のカレント
ディレクトリーを変更できることは、知っておいても損しないだろう。
391 :
デフォルトの名無しさん (ワッチョイ 2f57-Huko)
2016/05/02(月) 21:15:09.99 ID:B7fwjF4l0
392 :
デフォルトの名無しさん (ワッチョイ 3f56-hBSK)
2016/05/02(月) 21:26:05.14 ID:14Ao2YKq0
393 :
デフォルトの名無しさん (ワッチョイ 2f57-Huko)
2016/05/02(月) 21:32:28.67 ID:B7fwjF4l0
おお、ありがとうございます
394 :
デフォルトの名無しさん (ワッチョイ 2742-OoOA)
2016/05/02(月) 21:32:59.60 ID:IfsZ2QOP0
このやりとりって、Windows限定なのか、それともOSを限定せずにプログラム一般での話なのか
どっちなの?
395 :
デフォルトの名無しさん (オッペケ Sre7-hBSK)
2016/05/02(月) 21:35:36.19 ID:zmzMdNqXr
Windowsとそれ以外で何か事情がかわるのだろうか
396 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/02(月) 21:35:54.15 ID:3YV7E0Ft0
>>389 誰も仮定してないんだが...
マジでバカなの?
397 :
デフォルトの名無しさん (ワッチョイ a77b-1+8h)
2016/05/02(月) 22:14:34.12 ID:btgv3pKW0
398 :
デフォルトの名無しさん (ワッチョイ 2742-OoOA)
2016/05/02(月) 22:33:31.86 ID:IfsZ2QOP0
何か知らないOS環境でもあってさ、そこでの動きが標準的な物と違っていて
それを根拠に、仮定するのは誤りだと結論を出してくるとか、ありそうだし
399 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/02(月) 22:45:30.28 ID:IsbB/noh0
>質問者の
>>362は仮定してるだろ
>>396の意図は不明だが、これは言葉のすり替えだな
「誰も」とは「俺は言ってない」ぐらいの意味だろう
400 :
デフォルトの名無しさん (ワッチョイ a77b-1+8h)
2016/05/02(月) 23:25:56.25 ID:btgv3pKW0
いやいや「誰も」=「俺は」こそ言葉のすり替えだな
>>396みたいな何を言いたいのかすら分からないイチャモンつけるような
明白なバカ・ドジ・マヌケが何考えてようがもうどうでもいいよ
401 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/05/03(火) 00:46:50.12 ID:yoJxNR5i0
カレントディレクトリがどこになってるか仮定しちゃいけないってどういう事?
402 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/03(火) 06:11:23.04 ID:m0WSkRh/0
>>401 > カレントディレクトリがどこになってるか仮定しちゃいけないってどういう事?
絶対にダメと言うわけじゃない
ただ必要もないのにカレントディレクトリがどこかにあることを仮定して作ると当然その場所にないとうまく動かないから使い辛いってこと
ちなみに
>>362 はカレントディレクトリの設定についての質問で「起動時の」カレントディレクトリについてはなんの仮定もおいてない
403 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/05/03(火) 06:32:35.85 ID:yoJxNR5i0
それって仮定しちゃいけないとかいう話じゃなくて、カレントディレクトリがシステムによってどう設定されてるか理解すべきって話じゃないの?
404 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/03(火) 07:08:25.20 ID:m0WSkRh/0
>>403 何を言ってるのかさっぱりわからん
カレントディレクトリなんて
>>390 の言うようにショートカット等でも変更できる
一時的に特定のカレントディレクトリで起動するためにコマンドプロンプトから実行したりもできる
405 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/05/03(火) 09:06:38.37 ID:yoJxNR5i0
理解出来ないならいいですわ
406 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/03(火) 09:44:09.25 ID:WLZfBkZE0
407 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/05/03(火) 09:59:16.67 ID:yoJxNR5i0
>>406 そりゃ質問がそうだからな、返答にそれを期待するのが当たり前
408 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/03(火) 11:14:03.25 ID:m0WSkRh/0
>>406 >>402 の後半は
>>401 に関係しないから読み飛ばしてもらっていいよ
ただ前半読んで
>>403 の質問出るのが意味不明
>>404 に書いたように起動時のカレントディレクトリはどうとでも設定できるから
> カレントディレクトリがシステムによってどう設定されてるか
って言われても、はあ?
としか返せんし、そもそも元の話は起動されたプログラムの話だし
409 :
デフォルトの名無しさん (ワッチョイ 6f3c-1woS)
2016/05/03(火) 19:39:34.60 ID:G9XEXQGe0
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中)
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)>
https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
6
410 :
デフォルトの名無しさん (ワッチョイ cb7b-olYR)
2016/05/03(火) 20:03:21.71 ID:yoJxNR5i0
>>408 起動時のカレントディレクトリがどうとでも設定できるのと仮定しちゃいけないが繋がらないのよ
ユーザーが作業中のディレクトリと仮定しないとrmとかlsとか基本的なコマンドすら実装出来んぞ
411 :
デフォルトの名無しさん (ワッチョイ cfe5-6p9G)
2016/05/03(火) 20:15:22.49 ID:Ga2JkeKt0
このところずっとカレントディレクトリの話題ばかりだな。飽きた
412 :
デフォルトの名無しさん (ワッチョイ 6f3c-hBSK)
2016/05/03(火) 20:34:36.80 ID:m0WSkRh/0
>>410 > 起動時のカレントディレクトリがどうとでも設定できるのと仮定しちゃいけないが繋がらないのよ
えっ?
ユーザーがどうとでも設定できるからどこかに固定的に設定してるって思っちゃダメ
ってだけの話なんだが理解できないの?
> ユーザーが作業中のディレクトリと仮定しないとrmとかlsとか基本的なコマンドすら実装出来んぞ
はあ、そうですね...
413 :
デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
2016/05/03(火) 22:10:52.96 ID:TF5VRcqZ0
これまでの流れに参加してなかったけどDllMainでGetModuleFileNameを呼び出せばいいことはわかった。
Dllがシンボリックリンクのときはリンク元じゃなくてそのファイルのパスが返ってくることもわかった。
414 :
デフォルトの名無しさん (ワッチョイ 3763-hBSK)
2016/05/03(火) 22:16:37.60 ID:WLZfBkZE0
へー、kwsk
415 :
デフォルトの名無しさん (ワッチョイ 3fa6-OoOA)
2016/05/03(火) 22:38:09.58 ID:TF5VRcqZ0
いや単に初めて使った感想というだけで...
416 :
デフォルトの名無しさん (スプー Sdaf-x9NC)
2016/05/04(水) 13:12:57.15 ID:opeX4EM+d
もっとそういうdll関連の勉強したいんだけどいい資料ってない?
msのドキュメントって断片的でピンとこないことご多いんだ
英語でもいいぞ
417 :
デフォルトの名無しさん (オッペケ Sre7-hBSK)
2016/05/04(水) 13:22:50.71 ID:49qgq2vTr
むしろ日本語のドキュメントは読んではいけない
418 :
デフォルトの名無しさん (ワッチョイ 137b-ohpd)
2016/05/04(水) 13:57:04.66 ID:8Bwnd+Rb0
MSのドキュメント(Dynamic-Lunk Library Functions)全部読む
パラメーターの意味まで全部読む
419 :
デフォルトの名無しさん (ワントンキン MM6f-hBSK)
2016/05/04(水) 14:04:17.38 ID:ThMOcBqYM
dllmainとか書いたことない
VisualStudioならターゲットプロジェクトをdllにして、__declspec(dllexport)でエクスポートするだけだろ
まぁ実際はVisualStudioが裏でdllmainを作ってくれてるんだろうけど
420 :
デフォルトの名無しさん (ワッチョイ b730-OoOA)
2016/05/04(水) 14:16:57.26 ID:qX1/u2G+0
定型処理やりたいなら便利だけど
それ以外なら使わないかもね
421 :
デフォルトの名無しさん (ワッチョイ ef9f-qtmS)
2016/05/04(水) 14:51:19.35 ID:buqbh7+Y0
スレチが分からない程度の奴には難しいと思う
422 :
デフォルトの名無しさん (アウアウ Sa27-7WOp)
2016/05/04(水) 18:21:57.24 ID:lMLuHG3fa
>>418 読みにくい! PDFで下さい! 印刷して読みます!
423 :
デフォルトの名無しさん (ワッチョイ 137b-ohpd)
2016/05/04(水) 19:13:29.48 ID:8Bwnd+Rb0
424 :
デフォルトの名無しさん (ワッチョイ 57cb-OoOA)
2016/05/04(水) 19:19:40.35 ID:D8cbd8TW0
印刷したのをメールで送ってやる
425 :
デフォルトの名無しさん (ワッチョイ 13f8-Ke/D)
2016/05/04(水) 19:31:12.53 ID:p+LvbHBp0
保護されたPDFが届く図
426 :
デフォルトの名無しさん (ワッチョイ ff73-2IYS)
2016/05/05(木) 13:30:55.57 ID:KKWEgRGW0
文字列で学ぶC++入門
http://qiita.com/7shi/items/cac7b3e9b90bf91b00cc vs2015で少し勉強しています
strcat_s(str,len+1,s.str);
を使用して文字列をつないでいます
strcat_sの説明にstrの格納領域とs.strの格納領域に重複がある場合
動作は不定ですとあります
自己複写
mystr a="abc";
a+=a;
はエラーで停止したので対処コードを書きました
重複がある場合素直にエラーで停止することにお任せでよいかな?
呼び出しする方の使い方が悪いってことで
427 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/05(木) 13:47:53.97 ID:O83ZUOpH0
>>426 仕様はこっちからどうこう言うべきじゃないけど、できないならできない反応をするべき。
エラー値返すとか例外投げるとか。
428 :
デフォルトの名無しさん (ワッチョイ 400b-Xnmr)
2016/05/06(金) 00:22:14.99 ID:uBaztVrf0
>>426 strcatは文字連結というより
ただのメモリの範囲コピーであることを考えれば
メモリ領域を重複させるのは意味不明でお菓子な動作を引き起こすことは常識的にわかる
それに対してmystrのa+=a;はaが文字列オブジェクトを名乗るなら
a=
429 :
デフォルトの名無しさん (ワッチョイ 400b-Xnmr)
2016/05/06(金) 00:23:49.40 ID:uBaztVrf0
切れた
a="abcabc"となるのを期待するのがふつう
なので対処コードを書くべき
430 :
デフォルトの名無しさん (スプー Sdb8-wv7z)
2016/05/06(金) 01:23:00.59 ID:U/b+V/yed
template< typename A, typename B > using hoge = A< B >;
こうしたいのですができません。
いい方法教えてください
431 :
デフォルトの名無しさん (ワッチョイ bd7b-fQUW)
2016/05/06(金) 04:40:09.49 ID:uf2wlWDJ0
432 :
デフォルトの名無しさん (ドコグロ MM74-wv7z)
2016/05/06(金) 05:19:27.01 ID:vu9mhOpwM
a += a; なんて未定義動作にしか見えないんだけど...
433 :
デフォルトの名無しさん (ワッチョイ bd7b-ecJ+)
2016/05/06(金) 05:44:36.56 ID:uf2wlWDJ0
>>432 そう?
std::stringは普通に動くよね?
実装上の問題もないし
434 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/06(金) 08:25:16.93 ID:dFoYv6n+0
○ a += a;
× a += a.c_str();
435 :
デフォルトの名無しさん (ワッチョイ ff73-xz+g)
2016/05/06(金) 12:31:28.89 ID:v84XfFkE0
>>426 文字列で学ぶはとても勉強になっています
あとは、うろ覚えの状態でカンニングしないように
mystrを自分でコーディングしてみる
基本的なエッセンスがギュって詰まってる
テンプレート機能とかは別の教材さがします。
436 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 16:38:31.12 ID:W8QBH6Wip
main(){
loop1();
while(1){
loop2の処理
}
return;
}
void loop1(){
while(1){
loop1の処理
}
}
のようにした時に、関数loop1の最中に並列でloop2の処理に向かってしまうようです。
loop1を呼んでいる最中に進まないようにする方法はありませんか?
437 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 16:43:28.12 ID:W8QBH6Wip
ちなみに補足すると、loop1は特定のキー入力でbreakします
そのキー入力でbreakするまではloop2に入って欲しくない、ということです。
438 :
デフォルトの名無しさん (ワッチョイ ff73-5iF2)
2016/05/06(金) 17:30:16.10 ID:v84XfFkE0
c++だよね、普通にブレークポイント入れて動作確認したら一発ちゃう
並列なライブラリでも使っているの??
439 :
デフォルトの名無しさん (ワッチョイ 5ecc-wv7z)
2016/05/06(金) 17:33:14.52 ID:zXXHgXCN0
forkでもしない限り並列化せんだろ
440 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 18:01:27.30 ID:W8QBH6Wip
すいません、よく確認するとloop2に入っているのではなく、
ボタンコールバック(loop2で使う)を拾っているだけで実際にはloop2には入っていませんでした。
で、このコールバックをloop1の最中に拾われるとエラーになるんですけどどうすればいいですか?
loop1はいわゆる確認ダイアログ的なやつで、無限ループにしてあって、マウスコールバックで特定領域をクリックすると抜け出すようになってるんですけど
このループの最中に他のボタンコールバックを無効にするにはどうすればいいですか?
441 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 18:05:53.80 ID:W8QBH6Wip
というか、loop1のコールバックが登録されてるウインドウ以外を一時的に操作できなくしたいのですが、可能ですか?
442 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 18:11:14.30 ID:W8QBH6Wip
すいません、組み込んだライブラリのせいみたいなので取り下げます
443 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 20:17:54.26 ID:W8QBH6Wip
whileで無限ループの中をグルグル回っている最中でも
組み込んだライブラリの関数が勝手に動くんですが、これは普通ですか?
具体的には、mainで無限ループしている最中にも関わらず
特定のボタンをクリックすると別の関数が走ってウインドウ内のスクリーンショットが作成されます
他の関数に制御取られない方法はないですか?
444 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 20:44:03.17 ID:W8QBH6Wip
ちなみにメッセージボックス作ってそこにブレークポイント置いてデバッグ実行して、そのブレークポイントで停止している時でも
ボタンを押すとおかまいなしに勝手に動いてスクリーンショットを作りに行きます。
出力先ディレクトリの選択ダイアログとかも出るのに、この間デバッグのログに一切動きなし。
どうすれば??
445 :
デフォルトの名無しさん (ワッチョイ f64e-wv7z)
2016/05/06(金) 20:59:24.09 ID:k5bIkp2l0
質問の仕方から教えなければならんのか…?
446 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 21:06:05.42 ID:W8QBH6Wip
すみません、不慣れなので出来ればお願いしたいです
447 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/06(金) 21:15:11.86 ID:ieYvqp+A0
448 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 21:16:54.21 ID:W8QBH6Wip
つまり僕はどうすればいいですか…?
449 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/06(金) 21:23:50.67 ID:ieYvqp+A0
450 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 21:26:44.03 ID:W8QBH6Wip
すいません、よく分からないのでやはり質問の仕方よりもプログラムのやり方を教えて欲しいです
451 :
デフォルトの名無しさん (ワッチョイ 21c1-cHFQ)
2016/05/06(金) 21:30:20.27 ID:R+qFy6/e0
>>450 「組み込んだライブラリ」の作者にきくか、そのライブラリを組み込まない
452 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 21:47:37.87 ID:W8QBH6Wip
>>451 それは最もなのですが
無限ループやメッセージボックスの応答待ちの時にでも外から割り込んで関数を走らせることは可能なのですか?
453 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/06(金) 22:08:00.65 ID:dFoYv6n+0
>>443 >これは普通ですか?
糞ライブラリではよくあること
>他の関数に制御取られない方法はないですか
一般的には糞ライブラリの挙動を制御する方法は無い
わかったらスレ違いの荒らしは去れ
454 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 22:24:03.60 ID:W8QBH6Wip
>>453 ありがとうございます
なるほど、そうなのですか…それは大変
ところでどうしてスレ違いなのですか?
455 :
デフォルトの名無しさん (アウアウ Sa41-Zs2w)
2016/05/06(金) 22:38:48.68 ID:tz5jr0Roa
あっ、触っちゃいけないタイプだ!
456 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 22:43:07.34 ID:W8QBH6Wip
>>455 そんなこと言わずに教えてください
初心者なので本当にわからないのです…
457 :
デフォルトの名無しさん (ワッチョイ 1d30-znPs)
2016/05/06(金) 23:18:37.39 ID:ikTXVpGc0
イベントドリブンでぐぐっ…ても具体的でわかりやすい説明は
すぐにはでてこないがとりあえず調べな
458 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/06(金) 23:22:22.12 ID:vy9oFqn70
459 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/06(金) 23:30:41.46 ID:vy9oFqn70
イベントドリブンで動いてて、ループ内にブレーク相当の構文があるか、外部でスレッドを使ってるか。
どっちかが可能性高い。
460 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/06(金) 23:54:59.03 ID:W8QBH6Wip
>>458 それぞれのループに入る前にウインドウを生成しています。(window1とwindow2)
window1はいいのですが、window2は外部ライブラリの関数で作成したウインドウで、メニューバーみたいなボタンが最初から付いています
そのボタンの一つが、ウインドウのスクリーンショットを取るボタンなのですが、loop1の中でも動いちゃいます
loop1のループの中ではそのライブラリの関数を使っていないので、恐らく外部スレッド?の方だと思いますが
外部スレッド?の侵入を一時的に不可にする方法があれば知りたいですけど、ないようですね…
461 :
デフォルトの名無しさん (ワッチョイ e095-5iF2)
2016/05/07(土) 00:07:03.33 ID:DL6sNyRg0
>>460 ひょっとして、そのライブラリはexeをキックしているだけでメニューバーみたいなボタンのウィンドウは別のプロセスなんてことはないの?
462 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/07(土) 00:13:50.15 ID:pheDUhx40
>>460 ここで聞くより、外部ライブラリ作者に聞くのが良いよ
もし、現状できないって言われたら、作者にこうできるようにしてって必死にする
463 :
デフォルトの名無しさん (ワッチョイ b551-5iF2)
2016/05/07(土) 00:16:10.71 ID:LMdi7EDF0
マウスクリックでループから抜けるというんだからUIのイベントループが回ってるんだろ。
それ止めたらloop1からも抜けられなくなるが?
特定領域のクリックは受け付けるけどスクリーンショットのボタンは無効にしたいってんなら
そのライブラリの使い方調べてみるしかないだろう。どっちにしてもC++の質問じゃない。
464 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 00:19:48.62 ID:qCADCCRG0
465 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/07(土) 00:20:02.90 ID:AgRcX6YRp
>>461 タスクマネージャーで調べてみたけどそんなことはなかったです(この調べ方で合ってるですかね)
>>462 Qtとかいうやつなんですけど作者だれかイマイチ分からないし別に無理なら無理でグローバル変数使って無理やりなんとかすることにします
ただ外部関数?を簡単に押さえこめるような方法があるかなーと思ったのですが、思いの外複雑なやうですね。ありがとうございました
466 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 00:21:02.88 ID:qCADCCRG0
外部ライブラリの作者に聞くがよい。
467 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 00:21:50.44 ID:qCADCCRG0
>>465 QTなら普通の商用ライブラリなのでマニュアル読み直せ。
468 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/07(土) 00:28:25.31 ID:AgRcX6YRp
>>467 デバッグモードで追いかけてみましたが、初心者の自分には何してるさっぱりで、途中でqtimer.cppが見つからないとかいって追いかけれなくなるしで散々でした
とりあえず簡単には外部関数?を制御出来ないことが分かっただけでも収穫になりましたのでどうもありがとうございました
469 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 00:31:08.95 ID:qCADCCRG0
普通制御メソッドはついてるもんだが、マニュアル嫁としか言いようがないな。
470 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/07(土) 00:37:04.59 ID:pheDUhx40
>>465 Qtの特長の一つであるSignel-Slotあたりが原因って感じがするが
まぁ、QtならここよりQtスレで聞いたほうが良い。
471 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/07(土) 00:42:09.98 ID:gfii433/0
どう見ても質問者が発生している事象を正しく認識できていないように見える
間違った見当外れの説明を元にアドバイスしてもやはり見当外れになるだけ
もう少し本人がスキルアップするかQtスレで親切なエスパーを待つ他に無い
472 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 00:56:14.88 ID:qCADCCRG0
初心者はどうしてこう情報を小出しにするのか。
QTって最初から言ってたら、誘導されてたかもしれんのに。
473 :
デフォルトの名無しさん (ワッチョイ be5b-aqUl)
2016/05/07(土) 01:02:43.31 ID:tnQnmuW40
何が必要かわからんから小出しにしちゃうんだよ……
わからんからこそ全部出すべきってのもわかってはいるんだが
474 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/07(土) 01:03:04.65 ID:AgRcX6YRp
>>472 ちょっと分からなかったんですよね、というのも
またこんなこと言うと情報小出しと怒られそうですけど
実はちゃんとしたQtじゃないんですよ。opencvのバックエンド?とかいうやつで
元々、opencvを勉強していたんですが、途中でQtってのを組み込むとGUIがちょっと綺麗になるよっていうの発見したのでopencvの関数にqtを組み込んだやつを使ってみたら例外がいっぱい起こってしまいてんてこ舞いという感じでした
次回から情報を小出しにしないように気をつけますありがとうございます
475 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 01:07:00.66 ID:qCADCCRG0
476 :
デフォルトの名無しさん (ワッチョイ 778c-jFV0)
2016/05/07(土) 01:13:45.79 ID:4oP6NddQ0
やばすぎて流石に草
もっと叩け 今度は
実はPython版OpenCVでしたとか言い出すぞw
477 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/07(土) 01:15:11.33 ID:qCADCCRG0
安心しなさい、まだ一歩前で止まってるから。
478 :
デフォルトの名無しさん (アウアウ Sa41-Zs2w)
2016/05/07(土) 02:19:33.54 ID:hrppdYsNa
やっぱり触っちゃいけないタイプだった
479 :
デフォルトの名無しさん (ワッチョイ 5e3c-wv7z)
2016/05/07(土) 05:36:01.95 ID:MCMf/Qi90
>>443 の時点でライブラリ名を書いてないような奴にいちいち構うなよ...
480 :
デフォルトの名無しさん (ワッチョイ b9b4-7Olf)
2016/05/07(土) 12:16:58.48 ID:GYpWU44C0
コピー禁止(ムーブは可能)なクラス A について
vector<A> vec;
としたとき、
A *a = new A(5 /* 引数は適当 */);
な a を vec に追加するにはどうしたらいいですか?
481 :
デフォルトの名無しさん (ワッチョイ b96c-f78H)
2016/05/07(土) 12:21:20.92 ID:wuS0ySL80
vectorのallocatorをいじるんかな
482 :
デフォルトの名無しさん (ワッチョイ 88cb-7Olf)
2016/05/07(土) 12:25:54.60 ID:OK0jFuMO0
emplaceとか?
483 :
デフォルトの名無しさん (ワッチョイ 7d7b-xjE4)
2016/05/07(土) 12:37:16.87 ID:50MP5ems0
コピーは禁止だけどムーブはオッケーって時点で
シングルトン風味なのにそれをベクターにしたいとか
なんかめちゃくちゃじゃないの。
484 :
480 (ワッチョイ b9b4-7Olf)
2016/05/07(土) 12:44:25.73 ID:GYpWU44C0
>>483 「あるクラスのインスタンスがひとつ」なのがシングルトンでは?
>コピーは禁止だけどムーブはオッケー
の場合、「各状態のインスタンスが高々ひとつ」の意味なので
vector で管理するのは別に変ではないような気がします
485 :
デフォルトの名無しさん (スプー Sdc8-wv7z)
2016/05/07(土) 12:44:58.07 ID:NjSdOFLzd
486 :
デフォルトの名無しさん (ワッチョイ bd7b-fQUW)
2016/05/07(土) 13:02:19.07 ID:5xFs3i7R0
487 :
480 (ワッチョイ b9b4-7Olf)
2016/05/07(土) 13:36:55.97 ID:GYpWU44C0
>>485 状況としては似てる…けどちょっと違います
vector の中は unique_ptr の指している実体、という状況です
>>486 >>482 でも言われましたが、コンストラクタに渡すべき引数が
外部から分かるなら emplace_back でいいですね
結局こんな感じで、move() 関数を作りました
https://ideone.com/BgtPGR 問題は
1. new で確保したインスタンスに対して呼ばないと死ぬ
2. delete this が激しくキモい
ことです
488 :
480 (ワッチョイ b9b4-7Olf)
2016/05/07(土) 13:43:49.86 ID:GYpWU44C0
あ、考えてみたら delete this はいらないですね
解放の責任は new した側にありますし
やったーできたー
489 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/07(土) 13:46:19.11 ID:5xFs3i7R0
>>488 ?
std::moveを使わない理由は?
490 :
デフォルトの名無しさん (ワッチョイ b9b4-7Olf)
2016/05/07(土) 13:53:37.12 ID:GYpWU44C0
>>489 あれ、できました
さっきまで、さっきまで動かなかったはずのコードなのに…
ありがとうございます…
491 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/07(土) 14:07:18.10 ID:lqutBYGs0
vectorにvoidポインタとしてアドレスをぶち込めばどんなクラスでも型が違っても無制限にぶち込めるぞ
492 :
デフォルトの名無しさん (ワッチョイ 5ecc-wv7z)
2016/05/07(土) 14:24:19.18 ID:9/SiGFfq0
取り出すときにキャスト必須だがな
493 :
デフォルトの名無しさん (ワッチョイ 32a6-7Olf)
2016/05/07(土) 14:24:21.49 ID:Nq/4SgpV0
どうやって使うのだろう?
494 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/07(土) 14:52:34.98 ID:ISmmGMjJ0
>>491 >無制限にぶち込めるぞ
唐突にどうした。アスペか?
495 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/07(土) 20:19:39.58 ID:bJut0jV40
char str[32];
//いろいろな処理
char[6] = 0;
と記述していたら、先輩から
char[6] = '\0';
と修正されたんですが、意味違いますか?
496 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/07(土) 20:20:05.88 ID:bJut0jV40
str[6] = 0;
str[6] = '\0';
です
497 :
デフォルトの名無しさん (ワッチョイ 32a6-7Olf)
2016/05/07(土) 20:33:55.18 ID:Nq/4SgpV0
文字列としての配列であれば '\0' を
8ビット整数の配列のつもりであれば 0 を
ということでいいのか?
498 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/07(土) 20:37:46.88 ID:ISmmGMjJ0
str[6] = 0;
バイナリーデータをstrで管理していて値ゼロを入れようとする思わせぶり
str[6] = '\0';
文字列をstrで管理していて終端のヌル文字入れようとする思わせぶり
499 :
デフォルトの名無しさん (ワッチョイ f6e5-T8u2)
2016/05/07(土) 21:27:36.44 ID:2MzLWeIa0
何らかの処理プログラムを超一流のc++プログラマーが書いたものと、超一流のcプログラマーが書いたものを比較するとどっちの方が処理速度が速いとかありますか?理由も教えて下さい。
500 :
デフォルトの名無しさん (アウアウ Sa41-Zs2w)
2016/05/07(土) 21:29:03.90 ID:PlV1IzZTa
他人がコードを読む前提で解りやすく書こう
三ヶ月後の自分はもはや他人だ
501 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/07(土) 21:48:10.05 ID:gGosoxju0
>>499 その(曖昧な)条件だとどちらも同じプログラムに帰結することが可能そうだから、差を生じる理由は導けないと思う。
502 :
デフォルトの名無しさん (ワッチョイ f6e5-T8u2)
2016/05/07(土) 21:50:43.93 ID:2MzLWeIa0
>>501 では、逆にこういう処理プログラムを書く場合ならc/c++で差が出るというものはありますか?
503 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/07(土) 22:00:18.21 ID:gGosoxju0
>>502 restrict が有効に働くケースなら C が有利になるかもね。
504 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/07(土) 22:22:13.08 ID:ISmmGMjJ0
ハゲは例外を使うと速くなることもあると言うが、同じか遅くなった例しか見たことがない
クイックソートだけはかなりの確率でC++の圧勝
505 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/07(土) 22:25:20.03 ID:TEQEM2qu0
>>499 小さなプログラムの場合は
基本的にはCで書くのと同じ内容をc++でも書けるので
Cで組むのとc++で組むのとでは処理速度は理論上変わらない。
しかし大きなプログラムの場合には
・優秀なプログラマが一度に理解できるプログラムの行数は1万行オーダー、つまり有限だと言われている
・優秀なプログラマは、理解できる範囲で最適化を行える。つまり、理解不能な最適化は出来ない
・Cとc++で同じ内容の十分に複雑なプログラムを書いた場合、c++の方が若干短くなる
から、優秀なプログラマがバグを出さずに超長いプログラムを組む場合、
Cで組むよりc++で組んだ方が最適化を多く掛ける事が出来るようになるので
Cで書くよりc++で書いた方が処理速度は速くなりうる。
506 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/07(土) 22:42:14.29 ID:bJut0jV40
一度に理解できるプログラムの行数は1万行?
はぁ?
プロトタイプでもそんなんじゃかけないぜ
半導体装置制御でC++を使っているが、40万行以上あるぜ
隅々まで理解しているつもり
OSなんていったら相当だろ
507 :
デフォルトの名無しさん (ワッチョイ fe16-ny5G)
2016/05/07(土) 23:07:24.97 ID:2VJKllfT0
超一流ってことは、アセンブラもHDLもアナログも高周波もメカもありだよな
そん中のC++を使って書かれた部分の速度ってどんな意味があるんだろう
508 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/07(土) 23:11:17.64 ID:gGosoxju0
509 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/07(土) 23:35:45.09 ID:pheDUhx40
>>506 それを一人で開発やったのか。すごいなお前
510 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/07(土) 23:38:55.40 ID:TEQEM2qu0
>>506 要点はそこじゃない。
君が超優秀かどうかはさておき。
511 :
デフォルトの名無しさん (ワッチョイ 5ecc-wv7z)
2016/05/07(土) 23:43:10.78 ID:X4O7V36I0
今度Arduinoで温度計作る
512 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/07(土) 23:47:49.64 ID:gfii433/0
一般的には少しだけCよりC++の方が遅くなるんじゃないかな
513 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/07(土) 23:49:57.90 ID:TEQEM2qu0
514 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/07(土) 23:53:03.44 ID:CJYWvDHF0
5/7はメモリー二倍デーだから。
515 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/08(日) 00:26:59.06 ID:HXMhoTSZ0
>>513 一般的とう限定では超一流でもないし速度最優先のコーディングでもなく
C++にしか無い機能(クラスとかテンプレートとか)使うとコードもメモリも
肥大化する傾向があるから
516 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/08(日) 00:34:38.65 ID:mfXrjXgw0
constexprのようにC++にしかない処理時間を短縮する機能もある
517 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 00:42:36.86 ID:0NRevPWu0
>>515 > C++にしか無い機能(クラスとかテンプレートとか)使うとコードもメモリも
> 肥大化する傾向があるから
具体的に、どのコンパイラでの結果を見て言ってるの?
518 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/08(日) 00:49:08.05 ID:hZHozpgd0
templateは解らなくもないがクラス使うとって謎だな
Cでもstruct使わない人だろうか
519 :
デフォルトの名無しさん (ワッチョイ fe16-ny5G)
2016/05/08(日) 00:49:58.77 ID:vtsfrRsw0
>>512 struct hoge* hoge__member_function(struct hoge* that, int arg, ...)
{
hoge__do_something(that);
return that;
}
hoge& hoge::member_function(int arg ...)
{
do_something();
return *this;
}
何がどう違うんだよw
520 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/08(日) 00:50:51.99 ID:NDoMe0zH0
521 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/08(日) 00:53:25.78 ID:aVBrdKMl0
>>518 継承使いまくりするとって感じなんじゃないのか
C++はCより言語仕様複雑、STLあるでメモリ使用は増えるだろうと思う
522 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/08(日) 00:54:32.48 ID:hZHozpgd0
>>521 普通はメンバーが無駄になるような意味のない継承なんてしないんだけど
523 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/08(日) 01:13:20.10 ID:HXMhoTSZ0
>>517 コンパイラはGCC(gcc,g++)とclangを主に使ってるけど自分の少ない経験では
同じようなGlib/Gtk+ベースのプログラムを書いた場合、C++/gtkmmよりも
Valaを使う方がコンパクトになる
524 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 01:14:10.23 ID:0NRevPWu0
>>521 継承なんてメモリ使用の観点では構造体の中に構造体置くのと変わらない。
メモリ使用量を増やすような言語仕様の差があるならそれを挙げてみて。
C++標準コンテナ使うプログラムならCで書いても同じだけメモリ確保が要るだろ。
525 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 01:30:14.46 ID:0NRevPWu0
>>523 Vala って独自言語→C の Cfront みたいなやつなんだな。
それで実際に差が出るっていうのは興味深いけど、中間のCのコードと比較しながら
C++のほうをgtkmm含めて改良していけば同じことにはできるんだろうと思う。
526 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/08(日) 01:34:20.48 ID:NDoMe0zH0
C++標準コンテナなんて使ってる奴いるか?
バイナリはでかくなるし、遅いし・・・
存在理由がわからん
527 :
デフォルトの名無しさん (ワッチョイ 5ecc-wv7z)
2016/05/08(日) 01:36:39.43 ID:ac/16y3t0
馬鹿には利用価値が解らんらしいな
528 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/08(日) 01:38:18.51 ID:r8xFef3w0
ポータビリティ!
529 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/08(日) 01:45:58.46 ID:R2Zn2+sX0
言語仕様の差と言えるかどうかは置いておいてライブラリの差は大きい
便利なライブラリがあれば使うだろうし車輪の再発明をするより実績のある
ライブラリがあればそれを使うのが普通だからCだったら自分に必要最低限で
済ませるような場合でもC++標準コンテナが便利に使えるケースなら
そこまで汎用性が必要なくても使うことは一般的だと思う
ライブラリの差で言えば標準ライブラリ以外でも便利なライブラリのC++バインディングは
やはりそれなりに汎用的で便利に使えるように考慮して作られることが多いし
極限まで洗練されてるとも限らないのでバインディング分の肥大化もある
530 :
デフォルトの名無しさん (ワッチョイ 9c42-wv7z)
2016/05/08(日) 01:46:33.21 ID:KW8blOBJ0
え、標準コンテナってvectorとかmapのことよな?
逆に使わないで、自前で書いてる奴がいるってこと?
プロジェクトにそんなやつ参加してたら即外すくらい迷惑なんだが…
俺の感覚がおかしいのか?
531 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/08(日) 02:04:27.63 ID:R2Zn2+sX0
>>530 C言語でC++標準ライブラリと同等なライブラリを書くことはまず無いと思う
C++で書く場合vectorとかmapの全てのメンバ変数、全てのメソッドが
必要な場合はまず無いと思うので自前で書く奴なんかいないから
何らかの無駄が生じる
532 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/08(日) 03:15:08.39 ID:hZHozpgd0
まぁ、C++理解してない奴が使うと遅いかもな
533 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/08(日) 03:20:37.22 ID:BqGdpOYS0
PSPがC++で書き直されいきなり重くなって、その数年後コーレルに吸収された。
C++で再設計されると機能は豊富になる傾向がある。
534 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/08(日) 03:30:57.75 ID:r8xFef3w0
できることとできないことの取捨選択が設計。そこでこけたらなんもよいことがない。
Cのように薄いラッパーで書くこともできるが、できることが増えると全部使いたくなる。
それが癌。
535 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/08(日) 03:34:24.61 ID:mfXrjXgw0
vectorが遅いと思ってる奴は大量のデータを連続でpush_backしまくってる奴
536 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/08(日) 03:49:22.70 ID:hZHozpgd0
>>533 C++にしたことによって機能が豊富になり企業ごと買ってもらえてよかったやん?
537 :
デフォルトの名無しさん (アウアウ Sa41-Zs2w)
2016/05/08(日) 06:48:20.55 ID:bsBg6NTha
coutがprintfより遅い。なんで?
538 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/08(日) 06:56:36.21 ID:r8xFef3w0
iostreamの設計はあんまり効率的とは言えないからかなぁ。
汎用性重視して使いまわせるようにした分、特化用途では劣る。
539 :
デフォルトの名無しさん (オッペケ Sra9-wv7z)
2016/05/08(日) 10:49:40.33 ID:pkRLpXcEr
設計が糞だから
入出力みたいなIOバウンドな処理でも遅いことが露呈してしまうのは
相当なUNKO
540 :
デフォルトの名無しさん (ワッチョイ 9e17-wv7z)
2016/05/08(日) 11:03:26.85 ID:Zy+4Am2s0
入出力多ければcin,cout高速化するのが当たり前
541 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 11:26:43.00 ID:0NRevPWu0
542 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/08(日) 13:28:04.05 ID:NDoMe0zH0
gccなんてどんなシチュエーションで使ってんだよ
無保証で配布されてるようなものよく使うな
543 :
デフォルトの名無しさん (ワッチョイ 7d7b-xjE4)
2016/05/08(日) 13:34:39.34 ID:e7FUVg4v0
馬鹿らしい。
結局アセンブラ以上の速度なんかでないんだから、
あとはライブラリがどう実装されているかの差でしかない。
544 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/08(日) 13:43:29.27 ID:Z9PKRgQn0
↑日本語の会話ができないアスペ
545 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 13:44:44.46 ID:0NRevPWu0
>>542 え?「無保証で配布されてるような」に該当しないC++コンパイラなんてあるの?
546 :
デフォルトの名無しさん (ワッチョイ 9c42-wv7z)
2016/05/08(日) 13:54:10.64 ID:KW8blOBJ0
インテルコンパイラくらいしか思いつかんな
547 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 14:06:52.50 ID:0NRevPWu0
548 :
デフォルトの名無しさん (ワッチョイ 5e3c-wv7z)
2016/05/08(日) 14:08:40.18 ID:7UXL6x+W0
>>545 メーカーの有償コンパイラはいくらでもあるだろ
ベースが GCC であろうと保守契約してれば保証はしてくれる
その保証が役に立つかどうかは別だけど
549 :
デフォルトの名無しさん (ワッチョイ 9c42-wv7z)
2016/05/08(日) 14:11:27.77 ID:KW8blOBJ0
>>547 ほんとだ
VC++とかもコンパイラは無保証なのかな?
550 :
デフォルトの名無しさん (ワッチョイ f64e-wv7z)
2016/05/08(日) 14:46:15.67 ID:6EBK0SNh0
>>548 有償のコンパイラは数多いけど、何らかの「保証」をしてくれる商品ってあんまりないと思う。
有償の対価はサポートが多いよね。
大体は NO WARRANTY で、期待するような効力は無いと思うけど。
まあ、一口に保証って言ってもいろいろあるけどね…
551 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/08(日) 14:48:20.88 ID:NDoMe0zH0
552 :
デフォルトの名無しさん (ワッチョイ f64e-wv7z)
2016/05/08(日) 14:53:15.78 ID:6EBK0SNh0
>>506 半導体装置って何?
って思って検索したら半導体製造装置の事でいいんかな?
しっかし、何かいろいろあってよくわからん世界だな…
553 :
デフォルトの名無しさん (ワッチョイ 40cf-5iF2)
2016/05/08(日) 15:20:27.33 ID:0NRevPWu0
>>551 それの保証って >547 じゃないの?違うんならどんな保証があんの?
554 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/08(日) 15:31:09.95 ID:NDoMe0zH0
>>553 gccなんて髭面の乞食みたいな奴が作ったソフトでしょ
555 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/08(日) 17:22:36.22 ID:QO+NBPG40
君も多分、そのgccで作られたソフトをどこかで利用している
556 :
デフォルトの名無しさん (ワッチョイ 9fd4-EIjF)
2016/05/08(日) 17:46:35.49 ID:NKVAXp+L0
ありがとう髭面の共産主義者さん
557 :
デフォルトの名無しさん (ワッチョイ 328b-lMTc)
2016/05/08(日) 18:01:04.73 ID:+0FfKmse0
ストールマンは自由主義すぎて共産主義者に見えるだけ
558 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/08(日) 18:17:53.49 ID:Idc9lMfP0
何言ってんだコイツ。
資本主義か共産主義かと言えば、明らかに共産寄りの主義を持ってるだろ。
559 :
デフォルトの名無しさん (スプー Sdb8-wv7z)
2016/05/08(日) 18:29:38.44 ID:yx/SoqI4d
どこが共産主義的なの?
真逆じゃね。
共産主義国でGPLがまともに効果を発揮するとは思えんが
560 :
デフォルトの名無しさん (ワッチョイ 3a13-75AG)
2016/05/08(日) 18:36:54.38 ID:2KDLdDvi0
自己責任でやれ,っていう論調から判断すれば GPL はどちらかというと「リバタリアン」
561 :
デフォルトの名無しさん (アウアウ Sa41-Zs2w)
2016/05/08(日) 18:40:04.47 ID:iOm+CRLoa
セックスとソフトウェアだけ共産主義で配給性にしよう
562 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/08(日) 18:44:56.64 ID:QO+NBPG40
君の財布も共有財産
563 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/08(日) 19:34:23.06 ID:mfXrjXgw0
共産主義は国家が資産を独占することだぞ
権力に独占させないのが自由ソフトウェアだろ
564 :
デフォルトの名無しさん (ワッチョイ bd2b-kevm)
2016/05/08(日) 19:35:04.68 ID:us042D/d0
554みたいなこと言っちゃう化石ってまだ生き残ってるんだな
565 :
デフォルトの名無しさん (ワッチョイ 7c42-wv7z)
2016/05/08(日) 22:49:21.51 ID:tRpDEO2z0
今でこそclangが台頭してきているが、tvとかレコーダとかルーターとか電子辞書とかスマホとかlinuxで動いてる電子機器はたいていgccを使ってる。
そんなことも知らずにストールマンを髭とかピザデブとか言う奴は、禿て氏んでしまえ。
566 :
デフォルトの名無しさん (ワッチョイ 328b-lMTc)
2016/05/08(日) 22:59:44.96 ID:+0FfKmse0
んまーストールマンの内実がどうかとかは実はどうでも良くて
やってることは共産主義者だがな、
567 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/08(日) 23:18:24.65 ID:QO+NBPG40
そんな人はスマホもPCも使わない方が良いね
568 :
デフォルトの名無しさん (ワッチョイ 778c-10y/)
2016/05/08(日) 23:39:50.87 ID:kgnsEu+L0
すいませんOpenGLの使い方教えてくださいお願いします
569 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/08(日) 23:47:10.40 ID:mfXrjXgw0
まず服を脱ぎます
570 :
デフォルトの名無しさん (ワッチョイ 7d7b-xjE4)
2016/05/09(月) 00:05:04.99 ID:owmkQV0r0
ストールマンはスマホとか使ってない。
571 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/09(月) 00:28:08.65 ID:D9KYpVKqp
はい
572 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/09(月) 00:31:37.72 ID:pVI6O9RYp
stringの初期値ってなんですか?
string s;
if( s != NULL) 〜
って書いたら謎のエラー出されたのですが
573 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/09(月) 00:37:22.99 ID:pUXvKib10
>>572 宣言当初は空っぽ。空っぽを知るにはsize()かlength()を使うだっけか。
std::stringはヌルターミネートストリングではない。
574 :
デフォルトの名無しさん (ワッチョイ f256-wv7z)
2016/05/09(月) 00:40:19.49 ID:rFeP9sIM0
575 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/09(月) 00:42:40.61 ID:pVI6O9RYp
>>573 ナルフほど、参考になりました。どうもありがとうございます。
576 :
デフォルトの名無しさん (ワッチョイ 7cbf-wv7z)
2016/05/09(月) 00:50:51.52 ID:27MMukgj0
stringのコンストラクタの引数にNULLを渡すのが未定義だと知った時は驚愕したもんだ。
577 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/09(月) 00:52:00.22 ID:pUXvKib10
578 :
デフォルトの名無しさん (ワッチョイ ff73-OI8D)
2016/05/09(月) 07:12:53.06 ID:FiIoAZ6E0
stringのコンストラクタには素直に""渡せって事?
579 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/09(月) 07:51:26.99 ID:gB83NhqC0
580 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/09(月) 07:56:30.26 ID:gB83NhqC0
テンプレート使ったメタプログラミングのバイナリーサイズとコンパイル時間の最適化どうやってる?
実行時みたいなプロファイラないよね?
581 :
デフォルトの名無しさん (スプー Sdb8-wv7z)
2016/05/09(月) 09:56:31.43 ID:Xsyq9PvJd
std::vector<std::string>から<algorithm>のfindで文字列検索した場合よりも、std::unordered_set<std::string>のfindで文字列検索した方が高速だったのですが理由はなんでしょうか?
582 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/09(月) 10:05:09.76 ID:OXHQFkpS0
>>581 vectorとunordered_setではデータ構造が違うから。
一般的に、vector(線形時間)→set(対数時間)→unordered_set(定数時間)の順で検索は速くなる。
ただし、vectorは要素(この場合はstd::string)に何の仮定も置かないのに対して、
setでは全順序性を仮定するし、unordered_setではもっと厳しい条件を仮定する。
583 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/09(月) 10:08:08.13 ID:OXHQFkpS0
>>580 TMPは可能な限りコンパイル時に全ての計算を済ませる物だから、
コンパイル時間を減らすっていう意味での最適化とは逆方向じゃない?
コンパイル時にレイトレーシングする強者もいるし(コンパイルに1週間くらい掛かるらしいが実行は数秒になる)
584 :
デフォルトの名無しさん (ワントンキン MM40-YzxY)
2016/05/09(月) 11:00:56.87 ID:fUCJ6IjvM
>>581 unordered_setは要素のハッシュ値でソート済みのデータ構造だから。
std::vectorで近いパフォーマンス出したいなら要素をstd::sortとかでソート済みにしてstd::lower_boundとstd::upper_boundで一致する範囲を取る
585 :
デフォルトの名無しさん (ワッチョイ 3f77-mNQ6)
2016/05/09(月) 17:22:51.78 ID:e5OTdnsK0
586 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/09(月) 18:05:24.60 ID:pVI6O9RYp
printf(”a\n”);
cout <<”a\n” ;
cout << ”a” << endl;
これらはどれも結果?見た目?は同じですが
内部的にはどう違うのか教えてください
587 :
デフォルトの名無しさん (オッペケ Sra9-wv7z)
2016/05/09(月) 18:27:34.76 ID:D21wZ97+r
>見た目?は同じですが
>>586の目がフシアナなだけだろう
588 :
片山博文MZ ◆T6xkBnTXz7B0 (ガラプー KK3f-fZAN)
2016/05/09(月) 18:31:24.94 ID:12nCphG6K
>>586 printfは%書式の解釈が入るから、最適化されていなければputsより遅い。
endlは改行を出力するだけでなく、フラッシュも入るから、
フラッシュが効かない場合より処理が遅いが、実際の出力の開始は早くなるかもしれない。
最適化される場合は、どのように処理されるかはコンパイラ次第。
589 :
デフォルトの名無しさん (オッペケ Sra9-wv7z)
2016/05/09(月) 18:37:47.43 ID:6ljAms74r
>printfは%書式の解釈が入るから、最適化されていなければputsより遅い
こういう奴はどこにでも居るな。
質問の内容も読まずに脊髄反応して
脳内で単語レベルでヒットした蘊蓄を
ありがた迷惑に貼り付けるアスペが。
まあフラッシュについては
>>586も得るものが有ったかも知れない。ご苦労
590 :
デフォルトの名無しさん (ワッチョイ ad5b-7Olf)
2016/05/09(月) 19:21:32.17 ID:aNITGvAM0
>>586 若干動作違う。
下記はエンターキー押すたびに処理が進む。
各行を入れ替えたりすると動作の違いがわかる。
printf("a\n"); getchar();
cout <<"a\n" ; getchar();
cout << "a" << endl; getchar();
591 :
デフォルトの名無しさん (ワッチョイ 3f77-mNQ6)
2016/05/09(月) 19:40:47.53 ID:e5OTdnsK0
ios_base::sync_with_stdio
592 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/09(月) 20:31:36.08 ID:pVI6O9RYp
なるほど、勉強になりました。
みなさまありがとうございます。
593 :
デフォルトの名無しさん (スプー Sdb8-wv7z)
2016/05/09(月) 21:37:15.19 ID:Xsyq9PvJd
594 :
デフォルトの名無しさん (ワッチョイ ff73-xUNW)
2016/05/09(月) 22:50:09.03 ID:FiIoAZ6E0
C++の関数呼び出し時
int a(const int b, const mystruct mst);
こんな感じでconstにしない場合と引数のために
int b用のコピー、mst用の構造体mystruct変数のコピーが作られるって書いてある
intのコピーはサイズ的に問題ないけど
構造体mystruct mstのサイズが物凄く大きい可能性がある
物凄く大きな場合も効率や速度を無視して変数のコピーが作られるのですか?
触った感じではコピーが作られているっぽいのですが
595 :
デフォルトの名無しさん (ワッチョイ 9c42-wv7z)
2016/05/09(月) 23:06:19.92 ID:oK/ks2/Z0
作られるよ
コピーしたくなきゃアドレスを渡すしかない(C++ならポインタか参照)
596 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/09(月) 23:07:05.31 ID:Ii8g1eqf0
コピーする必要が有ってコピーさせてたかも知れないのに
サイズで勝手にコピーを省略されたらブチ切れだな
597 :
デフォルトの名無しさん (ワッチョイ 5ecc-wv7z)
2016/05/09(月) 23:43:00.36 ID:jCCSCwvz0
>>594 馬鹿なん?なんでコピーされるかわからないならC言語からやり直せよ
598 :
デフォルトの名無しさん (ワッチョイ 5ecc-wv7z)
2016/05/09(月) 23:45:48.90 ID:jCCSCwvz0
なんでC++に参照を意味するアンパーサンド演算子がわざわざ用意されたのか判らんのかいね?
599 :
デフォルトの名無しさん (ワッチョイ 9c41-X9cp)
2016/05/09(月) 23:49:52.01 ID:noyNIse20
この手の奴多いよな
うちの会社にもろくにc/c++を知らないで、仕事してる奴いるわ
600 :
デフォルトの名無しさん (ワッチョイ 778c-10y/)
2016/05/09(月) 23:52:36.52 ID:M3iPLLj40
>>594 void swap(int a, int b){
int tmp = a;
a = b;
b = tmp;
}
main(){
int a = 0;
int b = 1;
swap(a,b);
printf(”%d %d\n”,a,b);
return;
}
さて何が出力されるでしょう?
601 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/10(火) 00:12:39.31 ID:VjIbGp3Q0
602 :
デフォルトの名無しさん (ワッチョイ ff73-YF3X)
2016/05/10(火) 05:28:12.75 ID:u9nXjF/T0
>>600 0と1だね
C#だとポインターがないとか言うので
コピー渡しのみだと死ぬなと思いつつ考えてた
C#も参照渡しがありました
初心者スレで聞くべきでした
void swap(int *a, int *b){
int tmp = *a;
*a = *b;
*b = tmp;
}
603 :
デフォルトの名無しさん (JP 0H0d-aZyM)
2016/05/10(火) 09:58:36.58 ID:xA250nOWH
それは C の話で
C++ だと &,&& も増えた
604 :
デフォルトの名無しさん (ワントンキン MM40-wv7z)
2016/05/10(火) 10:07:05.90 ID:soJOAvIwM
そもそもC#は全部参照渡しでしょ?
605 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/10(火) 10:10:28.85 ID:E+X0dc0Z0
プリミティブ型は値渡しだった気がする、数年前のこと。
606 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/10(火) 12:50:19.00 ID:iYvr3+wx0
参照渡しはクラスだけ
607 :
デフォルトの名無しさん (スプー Sdc8-wv7z)
2016/05/10(火) 13:05:23.01 ID:39a1ddzGd
template< typename T > void hoge()
{
[](){ T a{}; }();
}
ラムダ式の中からTを使う事はできますか
608 :
デフォルトの名無しさん (ワッチョイ 3f77-mNQ6)
2016/05/10(火) 14:28:48.29 ID:xt6qowzE0
609 :
444 (ササクッテロ Spa9-10y/)
2016/05/10(火) 15:30:29.67 ID:Jb8df6a5p
444です
メッセージBOXでTASKMODALを指定すれば動かなくなりましたので報告だけしときますありがとうございました
610 :
デフォルトの名無しさん (オッペケ Sra9-wv7z)
2016/05/10(火) 18:38:39.38 ID:215vkzzCr
611 :
デフォルトの名無しさん (ワッチョイ b976-ymBj)
2016/05/10(火) 19:46:50.88 ID:URI7I2Cg0
「参照型 値渡し」で検索しとけ
612 :
デフォルトの名無しさん (スプー Sdb8-wv7z)
2016/05/10(火) 20:05:12.28 ID:QMa4CHQvd
よくわかんないけどT*とT*&みたいなもん?
613 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/10(火) 20:24:20.24 ID:dn5a8gBPp
プログラムのCPU負荷を下げる方法はどうしますか?
特に重い処理をしていないにも関わらず、CPU負荷が100%近くになります。
対策をお願いします。
614 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/10(火) 20:27:23.22 ID:GH5TUzj80
nice 20 とか
615 :
デフォルトの名無しさん (ワッチョイ 7c7b-m/h6)
2016/05/10(火) 20:30:54.94 ID:3v8mTcBj0
>>613 本当に「特に重い処理をしていないにも関わらず、CPU負荷が100%近く」なら何かバグってる
616 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/10(火) 20:43:15.13 ID:dn5a8gBPp
>>615 とある事情でwhileループで入力待ちしてるんですが
特に処理はしていないのに待機中にCPU100%になってますね…
617 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/10(火) 20:46:30.52 ID:dn5a8gBPp
一応、重くならないように
ループには、1ループあたり1msの待機時間作っています
618 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/10(火) 20:46:51.93 ID:lywmyip50
待てていないような気がしますね。
619 :
デフォルトの名無しさん (ワッチョイ 7c7b-m/h6)
2016/05/10(火) 20:48:47.48 ID:3v8mTcBj0
620 :
デフォルトの名無しさん (ワッチョイ 5602-wv7z)
2016/05/10(火) 21:22:24.14 ID:O0lvE+VW0
>>617 なんで問題のコードをださないの?
無駄にレス増えるだけだと思うんだけど
621 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/10(火) 21:29:25.26 ID:VjIbGp3Q0
>>620 質問の仕方にいちゃもんついたライブラリがどうたらの後だしQtの人だろ
622 :
デフォルトの名無しさん (ワッチョイ 7d7b-7M79)
2016/05/10(火) 21:29:43.77 ID:AdrvoLMk0
まあ頭冷やして考えた方がいいんじゃねーの?
コード出したら実際糞過ぎて叩かれるだけだと思われ。
623 :
デフォルトの名無しさん (ワッチョイ 5602-wv7z)
2016/05/10(火) 21:31:42.01 ID:O0lvE+VW0
624 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/10(火) 21:41:10.13 ID:dn5a8gBPp
>>618 待機時間を2倍の2msにして見ても、CPUが半分になるかと思ったらそれどころか全然減りませんがどうすればよいですか
625 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/10(火) 21:54:48.65 ID:dn5a8gBPp
>>620 while(1)
{
...
int c = waitKey(1);
if(c == 'q') break;
}
626 :
デフォルトの名無しさん (ワッチョイ 7c7b-m/h6)
2016/05/10(火) 22:12:32.27 ID:3v8mTcBj0
>>624 答えは
>>618 時間待ちさえ明らかにバグっててちゃんと待ててない
他の人も言ってるけどコードを晒せば?
627 :
デフォルトの名無しさん (ワッチョイ 9c9d-APoh)
2016/05/10(火) 22:17:19.25 ID:VjIbGp3Q0
628 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/10(火) 22:23:32.56 ID:A1YVuqbS0
>>624 nanosleep使ってもある程度大きな値まではビジーループだぞ
OSはそんなに小さなタイミングで割り込みなんて出来ないから
629 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/10(火) 22:34:59.20 ID:zxnDb8j/0
>>628 超どうでも良いけど、可能か不可能かで言ったら
約0.84マイクロ秒置き(1193182 Hz)の割り込みが来るように出来るようにハードウェアは組まれてるです。
630 :
デフォルトの名無しさん (ワッチョイ 56c0-T8u2)
2016/05/10(火) 23:00:23.29 ID:yaG18+U20
スレッドの切り替えチャンスは与えたけど誰もいないので俺スレ頑張っちゃうよ
631 :
デフォルトの名無しさん (ワッチョイ be9f-fbpY)
2016/05/10(火) 23:06:07.16 ID:HVyJ1rA+0
>>629 ハードウェアもOSも限定せずにそんな保証できるわけないだろ
632 :
デフォルトの名無しさん (オッペケ Sra9-wv7z)
2016/05/10(火) 23:18:12.87 ID:T8dqPhAzr
>>619 いきなりイミフなコードを貼り付けてどうした?
何か話さなきゃお前はただのアスペだぞ
633 :
デフォルトの名無しさん (ワッチョイ 3ff8-H0Kj)
2016/05/10(火) 23:19:38.14 ID:zxnDb8j/0
>>631 ごめんよ。
でも8259互換チップが入ってないPC/AT互換マシンなんて今時あるのかい?
634 :
デフォルトの名無しさん (ワッチョイ be9f-HMKq)
2016/05/10(火) 23:33:33.53 ID:7q8s7zNm0
唐突にPC/AT互換マシン
635 :
デフォルトの名無しさん (ワッチョイ 9c41-lMTc)
2016/05/10(火) 23:51:40.34 ID:5J1aLd4L0
PC/AT互換マシンって言いたいだけの奴いるよなwww
636 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/10(火) 23:54:10.15 ID:GH5TUzj80
入力があるまでHALTする方法はないのか?
637 :
デフォルトの名無しさん (ワッチョイ 9c42-wv7z)
2016/05/10(火) 23:54:27.58 ID:5EInyMQF0
638 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/10(火) 23:56:27.95 ID:y6IvleFLp
>>626 コードは
>>625です
>>627 ウインドウはちゃんとループ外で定義してありますし使い方は合ってるはずです
>>628 ある程度はどれくらいですか?
100ms待たせたらCPU80%くらいまで減りましたが…
639 :
デフォルトの名無しさん (オッペケ Sra9-wv7z)
2016/05/10(火) 23:59:19.74 ID:T8dqPhAzr
>>637 低能のお前にヒントをやろう
参照型と参照渡しを混同してはいけない
そしてC#言語仕様5版 7.5.1 Argument lists を読んでこい
Java言語仕様8版でもいいぞ
640 :
デフォルトの名無しさん (ワッチョイ 9c42-wv7z)
2016/05/11(水) 00:00:38.44 ID:AJNn1ICv0
あ、そう…
641 :
デフォルトの名無しさん (ワッチョイ 9c41-lMTc)
2016/05/11(水) 01:10:14.65 ID:GzlL/1jH0
言語仕様がどうとか言う奴ってえてして仕事できないよなw
内の会社にもやたら、言語に関しては詳しいけど実際のコーディング、デバッグなんかは
やたら遅い奴いるわw
たぶん小さなサンプルプログラムばっかりしか書いたこと無いんだろうな
642 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/11(水) 01:21:35.07 ID:ubToLDC+0
>>638 多分CPUは、この無限ループを全力で実行しているんだと思うよ
>通常のイベント処理ではこの関数を周期的に呼び出す必要があります.
ってあるから、通常は時々呼び出しなさいということでしょ。
643 :
デフォルトの名無しさん (ササクッテロ Spa9-10y/)
2016/05/11(水) 01:27:59.88 ID:0F7keYqip
>>642 ありがとうございます。
そこで、CPUにこの無限ループを全力で実行させないようにする方法はないですかね?
644 :
デフォルトの名無しさん (ワッチョイ 3f42-7Olf)
2016/05/11(水) 01:48:35.76 ID:ubToLDC+0
OSが何かにも寄るんでしょうkが、
Windows環境ならSleep()と言うのがあります。
Unix環境ならusleep()関数を使ってみては?
waitKey()の説明を読む限り、この関数内でのタイムアウト時間指定ですよね。
ループ全体の中でwaitKey()が専有する時間が1msって事で、
ループのそれ以外の部分では、何の処理も行わず、再びwaitKey()に戻っているんでしょう。
おそらくSleep、usleep関数に渡す引数の値だけCPU占有率が減ると思います。
これは泥縄的な方法ですけどね。
できるなら、「イベント発生通知をOSから受け取る。それまではお休みする」が良いと思います。
645 :
デフォルトの名無しさん (ワッチョイ 3fe7-lMTc)
2016/05/11(水) 02:04:52.39 ID:TxG4e4qF0
C++11からchronoとthis_threadを使ったスリープが汎用的にアルヨ。
osまたぎたいならこれも視野に。
まぁ問題はそこじゃなさそうだけど。
646 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/11(水) 04:12:57.00 ID:AYk4CdLN0
MATAGI vs KIKORI。
647 :
デフォルトの名無しさん (ワッチョイ 9c7b-SnbV)
2016/05/11(水) 07:33:54.29 ID:E3fj3Ww+0
ビジーループ(ポーリング)と、イベント(call back)では、イベントを使うべき
ビジーループでは、CPUが占有されてしまう。
一方イベントでは、CPUを使わない
648 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/11(水) 14:29:08.71 ID:Hst0/UDE0
賢いドライバーならカーブでは速度を落とすものです。
ところで、ポーリングで速度を落とす賢いプログラマはいないモノでしょうか。
649 :
デフォルトの名無しさん (ワッチョイ f910-F7+X)
2016/05/11(水) 15:24:54.40 ID:GeTKo9910
>>643 そもそも「...」の部分の処理が重いんじゃないの?
処理一切無しでwaitKeyだけでも重いの?
650 :
デフォルトの名無しさん (JP 0H0d-aZyM)
2016/05/11(水) 15:31:43.86 ID:l/Aku55rH
ゲーム系のフレームワークでありがちな
ウエイト無しクソサンプルを真似たんじゃろ
まともなものならドキュメントなりチュートリアルなりで説明があるはず
コールバック型のイベント処理だって探せば出てくるんじゃないの
651 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/11(水) 16:24:44.34 ID:to/KEVVR0
クソサンプルてゲームならそれでええやろ
652 :
デフォルトの名無しさん (JP 0H0d-aZyM)
2016/05/11(水) 16:35:01.05 ID:l/Aku55rH
駄目だ駄目だ駄目だ
653 :
デフォルトの名無しさん (ワッチョイ bd7b-YzxY)
2016/05/11(水) 16:50:01.24 ID:to/KEVVR0
654 :
デフォルトの名無しさん (ワッチョイ c13c-APoh)
2016/05/11(水) 17:04:09.30 ID:Hst0/UDE0
>>653 ノートが熱くなって燃えてしまいました。
謝罪と賠償を要求します。
655 :
デフォルトの名無しさん (ワッチョイ 9c41-lMTc)
2016/05/11(水) 18:03:39.93 ID:GzlL/1jH0
C++を開発するってどういうこと?
Bjarne Stroustruはなにをしたの?
MSやintelなんかにコンパイラを作って提供したって事なの?
656 :
デフォルトの名無しさん (JP 0H0d-aZyM)
2016/05/11(水) 18:39:38.91 ID:l/Aku55rH
C++を発明した
657 :
デフォルトの名無しさん (ワッチョイ 8063-wv7z)
2016/05/11(水) 19:05:28.34 ID:5a6iax+r0
糖質がまた幻覚を見たようだな
今日はまた一段とぶっ飛んでいる
658 :
デフォルトの名無しさん (ワッチョイ bd02-7Olf)
2016/05/11(水) 20:32:01.30 ID:FbDxsPeF0
659 :
デフォルトの名無しさん (ワッチョイ 56c0-T8u2)
2016/05/11(水) 21:38:44.46 ID:Hbfyg6Vu0
int C=0;
C++;
660 :
デフォルトの名無しさん (アウアウ Sa41-Zs2w)
2016/05/11(水) 21:55:30.78 ID:mridOWona
C with classes
661 :
デフォルトの名無しさん (ワッチョイ 7d7b-7M79)
2016/05/11(水) 23:05:50.38 ID:rzhdH4Ry0
なぜ ++c でなくて c++ なのか。
それは c の間にやっておきたかった事があるから。
662 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/12(木) 00:49:34.70 ID:skSN1OPx0
++cよりc++の方が速いかもしれないから
663 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/12(木) 01:54:44.22 ID:V7G0arWW0
後置はイテレータだと副作用が出るけどな
664 :
デフォルトの名無しさん (ドコグロ MMef-/3cR)
2016/05/12(木) 07:19:43.34 ID:H+I8h1G8M
665 :
デフォルトの名無しさん (ワッチョイ 37bf-/3cR)
2016/05/12(木) 08:51:12.00 ID:N3lYKGUd0
666 :
デフォルトの名無しさん (ブーイモ MM1f-/3cR)
2016/05/12(木) 08:53:10.66 ID:4BYM8qUWM
c++プログラマなら使えるところは常に前置だろjk
667 :
デフォルトの名無しさん (ワッチョイ 4b7b-XzP0)
2016/05/12(木) 08:59:45.88 ID:rpWGZ4yl0
668 :
デフォルトの名無しさん (ワントンキン MM9f-/3cR)
2016/05/12(木) 09:05:01.86 ID:c1sDAwi0M
いやいや…
669 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 09:18:46.59 ID:BxH3pzV60
670 :
デフォルトの名無しさん (ワッチョイ 4b7b-XzP0)
2016/05/12(木) 09:33:56.48 ID:rpWGZ4yl0
>>669 本来は後置++の方が等速あるいは速い、但しstd::iteratorに限っては前置++の方が速い
そのページはstd::iteratorでも前置++が速いと言う主張だろ
671 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 09:48:47.40 ID:BxH3pzV60
672 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 09:51:14.28 ID:BxH3pzV60
>>670 と、思ったらそれ以上のバカだったのかな?
いいから後置の方が早い理由を示せよ
673 :
デフォルトの名無しさん (ワッチョイ 4b7b-XzP0)
2016/05/12(木) 09:58:38.72 ID:rpWGZ4yl0
>>671 誤字を鬼の首取ったように突っ込むな
誤 そのページはstd::iteratorでも前置++が速いと言う主張だろ
正 そのページはstd::iteratorでも後置++が速いと言う主張だろ
674 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 10:02:26.01 ID:BxH3pzV60
>>673 読んだらそんな結論にならないと思うんだけど
675 :
デフォルトの名無しさん (ワッチョイ 4b7b-XzP0)
2016/05/12(木) 10:03:07.66 ID:rpWGZ4yl0
>>672 取り敢えずキミは、pentium以降のCPUの高速化技術を検索して、理解してから出直しなさい。
676 :
デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)
2016/05/12(木) 10:10:22.66 ID:3WPpAXGg0
特定のCPUを持ち出す必要があるんですか?
677 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 10:11:24.20 ID:BxH3pzV60
>>675 取り敢えずキミは、提示された資料を読めるようになってから出直しなさい。もう手遅れかもしれんけど。
678 :
デフォルトの名無しさん (ワッチョイ 4b7b-XzP0)
2016/05/12(木) 10:12:01.44 ID:rpWGZ4yl0
>>674 そのページが参照してる
> インクリメントの前後置速度比較
のソース読んでから出直す事だ
> ゲームエンジンアーキテクチャ第二版 プレインクリメント vs ポストインクリメント
の主張を全然反映してないベンチマーク引用してるから、理解力が不足してると迷宮に囚われる
679 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/12(木) 10:13:08.97 ID:DRM/51U40
なるほどなー。
ldしてincしてstoreしてからじゃないと++fooの結果は使えないけど
foo++ならldするだけで使えるって事か。
確かに、主作用の方の値を使いたいなら後置の方が実行速度が高くなりうるな。
ちょっと試してみた
バージョンはgccが4.8.4、clangが3.7.0、環境はXubuntu on VMWare on Win7 on i7-5820k 3.3GHz
https://gist.github.com/pixie-grasper/d71c6e8ef13992c426559256e520beca まとめると、clang/gccで-O0/-O3について比較したら
gcc -O0については前置より後置の方が3%くらい速くなったけど
他では後置より前置の方が速くなった。
結論:前置より後置の方が速くなる事はある。
680 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 10:17:36.81 ID:BxH3pzV60
>>679 それ同じ処理じゃねえから、ベンチマークとして不適切
681 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/12(木) 10:21:09.51 ID:DRM/51U40
>>680 うん、確かに10億分の1だけ前置のほうが早く終わる処理になってるけど
それでも後置のほうが3%くらい速くなるケースが実際にあった。
10億分の1と3%の比較は出来る?
682 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/12(木) 11:04:31.19 ID:BxH3pzV60
>>681 いや、俺が悪かった。
後値を前値に単純に置き換えられるような処理で後値の方が早くなるケースなんてほぼないもんな。
683 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/12(木) 11:28:30.44 ID:DRM/51U40
>>682 そうなー。
後置を前置で単純に置き換えれるって事は副作用しか使ってないわけで
副作用しか要求しておらず、コンパイラが最適化をサボる場合には、
余計なインスタンスの生成が走りうる後置よりin-placeな前置の方が速い。
但し、intなんかのbuilt-inな型はコンパイラが最適化してくれる
&そうでない型も処理が見えてればコンパイラが頑張って最適化してくれるので
副作用しか使わなければどっちでも同じ機械語列になるって事は書いてあるね。
でも
>>669の先から引用を引用すると
「しかし、値が使われる場合、CPUのパイプラインでストールを生じさせないので、
ポストインクリメントの方が優秀である。
したがって、プレインクリメントの動作が絶対に必要である場合を除いて、
必ずポストインクリメントを使う習慣を身につけたほうがよい。」
とあって、パイプラインストールが起こりうるなら後置のほうが良い事もあるってのが元々の論旨だから
もっと露骨にパイプラインストールが起こるようにコンパイラの最適化を邪魔したら
-O3しても後置のほうが速くなったわ
https://gist.github.com/pixie-grasper/6d9c560601f191df0dd205911866cc1e 684 :
デフォルトの名無しさん (ミカカウィ FF6f-Wsqh)
2016/05/12(木) 14:57:11.64 ID:oq6xjtF8F
質問です。
class data{
public:
int score;
};
class test{
public:
std::vector<data> *v;
};
void main(){
test abc;
test *d = &abc;
(*(d->v))[1].score = 1;//
}
(*(d->v))[1].score;の他に書き方無いでしょうか?
アロー演算子を2重に使うとかやってみましたができませんでした。
配列を使う方法と、[1]をポインタ演算にして書く方法があれば両方教えてほしいです。
685 :
デフォルトの名無しさん (ワッチョイ cb3c-EA1W)
2016/05/12(木) 15:55:07.83 ID:MyP06V7u0
d->v->data()[1].score = 1;
d->v->at(1).score =1; // ただし境界チェックが入る
(d->v->begin() + 1)->score = 1;
686 :
デフォルトの名無しさん (ワッチョイ ef9f-Wsqh)
2016/05/12(木) 16:02:27.95 ID:LsrVgu920
>>685 ありがとうございました。そういうやり方があったんですね。
687 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/12(木) 16:02:54.52 ID:e6oRkxgP0
そんなことよりなんでtest::vがポインターなんだよ
newしてないし、[1]にはアクセスできないし、それ動かないよ
いずれにせよ初心者歓迎スレ案件だな
688 :
デフォルトの名無しさん (ワッチョイ ef9f-Wsqh)
2016/05/12(木) 16:15:54.25 ID:LsrVgu920
あ、質問スレ他にあったんだ。ここだと思った。
689 :
デフォルトの名無しさん (ワッチョイ 237b-/3cR)
2016/05/12(木) 17:49:55.66 ID:e7uDPICZ0
これってよく言われる前置か後置かの問題じゃないでしょ。
変数更新タイミングを使用直前にするか更新可能な一番早いタイミングで行いかの違いで、アルゴリズムの変更を伴う可能性が高い。
その場合後者の方がいいが、コピーして前置でも結果は同じ。
前置か後置かで前置がいいと言われているのは、あくまで単に+1したいってとき。所謂forの3つめ
690 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/12(木) 18:41:37.34 ID:V7G0arWW0
691 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/12(木) 19:09:46.88 ID:V8j8LQpxd
メリットデメリットなんて問題にしてないから
692 :
デフォルトの名無しさん (ワッチョイ 033c-hNIp)
2016/05/12(木) 19:23:08.71 ID:wtk4J6jy0
ポインタの方がカッコイイじゃないですか。
頭良さそうで。
693 :
デフォルトの名無しさん (ワッチョイ dbb1-yliF)
2016/05/12(木) 20:19:14.11 ID:u4rYymiL0
(d->v)とか最高に頭悪そうだな
流れは違うが前置と後置がわかってない、以前に憶える気がない
694 :
684 (ワッチョイ cbcf-Wsqh)
2016/05/12(木) 20:25:17.26 ID:6ncal6FL0
>>687 >そんなことよりなんでtest::vがポインターなんだよ
要素数100万くらいのvectorが10個くらいあって、
必要なvectorにいちいちポインタを書き換えてる、じゃダメ?
入門書以外で他人のコード読むことないからぐちゃぐちゃやってる。
695 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/12(木) 20:36:16.87 ID:e6oRkxgP0
>>694 ごめん。何言いたいのか分からない
1M要素くらいの配列が10個くらいあるからってなんだって言うんだろう?
696 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/12(木) 21:04:50.54 ID:DRM/51U40
>>694 生のポインタなんて使わずにstd::shared_ptrを使え。
class test{
public:
std::shared_ptr<std::vector<data>> v;
};
d->v = std::make_shared<std::vector<data>>(1000000);
697 :
デフォルトの名無しさん (ワッチョイ b79d-hNIp)
2016/05/12(木) 21:12:08.75 ID:k4tl7img0
>>695 俺も
>>694が何言いたいのかわからんが、
>>684の質問からして初心者だろうから、あんまり突ついてもって思う。
少しレベル上がると、今のコード見て恥ずかしい・頭悪いやり方してたんだ
って思うんじゃないか。
698 :
デフォルトの名無しさん (ワッチョイ 7f13-Q4kq)
2016/05/12(木) 21:15:46.74 ID:R6+MliT10
>>661 後置インクリメント,前置デクリメントは68系の慣習
699 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/12(木) 21:35:16.27 ID:xhYAhim/0
Z-80のpopとpushもそう
700 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/12(木) 21:36:56.40 ID:xhYAhim/0
ていうか今日日のコンパイラが
インクリメント前のcの値を使わないケースでも
c++を++cと違うコードに落とすとはにわかには信じ難い
この世には知らないほうが幸せなことがあるのかもしれない…
701 :
デフォルトの名無しさん (ワッチョイ 2310-0YMq)
2016/05/12(木) 22:01:48.84 ID:2OPIh6as0
>>684 d->v->operator[](1).score = 1;
702 :
デフォルトの名無しさん (ワッチョイ 937b-qps8)
2016/05/13(金) 08:07:22.18 ID:ApLv0E8+0
return c++;
とかで外で値を受け取らないケースで最適化が上手く動くもしくは動かないケースとかなら
あるかもとは思うけど、そんなどうでもいいケース考えてどうすんの?って話ではある。
703 :
デフォルトの名無しさん (ワッチョイ 37bf-/3cR)
2016/05/13(金) 08:44:07.94 ID:Ja7udZmR0
・クラス化されたiteratorを使う時には、言語レベルでの手順差が明らかにあるから、とりあえず全て前置使っとけば問題ないでしょ
ていう方法論の話と、
・整数プリミティブ型の場合は後置の方が速い事がある
って言う実測論に近い話をごっちゃにしてはいけないと思うの。
704 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/13(金) 11:31:14.81 ID:G/A+aqfad
「言語レベル」の手順差?
705 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/13(金) 13:01:39.98 ID:ZUyuraMo0
>>700 人間としては同じ意味のコードでも、言語の意味論上は別な意味として解釈しなければならないのだから
最適化前のコードは異なって当然。
んでもって、違うコードを初期地点として独立に最適化を掛ける訳だから
最適化後のコードは異なる可能性がある(偶然一致する可能性もある)。
そういうお話
706 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/13(金) 20:48:02.35 ID:EayoOtAj0
>そういうお話
という幻覚を見てしまったようです。
統合失調症ID:rpWGZ4yl0、ID:DRM/51U40と
その他の健常者との噛み合わない会話
707 :
662 (ワッチョイ 9fa6-Wsqh)
2016/05/13(金) 20:56:04.60 ID:y6JoVpFh0
鼻ほじりながら書いたら
>>664-666あたりで予想通りのレスが返ってきて、それで終わるのかと思いきや
意外と後を引いててワロタw
708 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/13(金) 21:28:43.56 ID:ZUyuraMo0
709 :
デフォルトの名無しさん (ワッチョイ 2730-o0Hb)
2016/05/13(金) 21:41:15.90 ID:na9JUjrP0
キチガイの一言で解決しろや
710 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/13(金) 23:27:56.30 ID:akm6bXau0
いいからアセンブラのコード見ろよ
711 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/14(土) 01:22:12.62 ID:guvuQQ9l0
前値を後値に変更して効率的になる場所なんて限られてるからどうしてもその場所のパフォーマンスを上げたいって時の知識として知っててもいいかなぐらいの事だよ
常に後値で書かれたらデメリットが大きすぎる
712 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/14(土) 08:57:39.96 ID:BsF9lC3v0
アセンブリも読めないc++erなんて滅びればいい
713 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/14(土) 09:11:42.00 ID:EHXndh+50
アセンブリが読めてもパイプラインの正しい知識の無い人に言われても…
714 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/14(土) 10:34:04.60 ID:5qwu2L7o0
デジタル回路の正しい知識も必要
715 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/14(土) 10:37:31.14 ID:BsF9lC3v0
そうだね。
1段NOTゲートと3段NOTゲートの違いくらい説明できなきゃね。
716 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/14(土) 11:45:07.22 ID:50Ljn6jM0
半導体の物性を理解していない人にC++を使って欲しくない
717 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/14(土) 11:53:10.78 ID:EHXndh+50
むしろC++を語るのに半導体物性とかアセンブリ言語とかどうでもいい
718 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/14(土) 12:13:40.02 ID:BsF9lC3v0
基礎は大事だろ。
何処まで掘り下げるかって問題はあるけど
719 :
デフォルトの名無しさん (ワッチョイ 233c-/3cR)
2016/05/14(土) 12:43:01.47 ID:eiJc4QAX0
なにが悲しくてアセンブリを理解しなきゃならんのだ。
そんなのは言語開発者とコンパイラの仕事だ。
720 :
デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)
2016/05/14(土) 12:53:34.15 ID:jHuAeQfl0
ビジネスアプリケーション専門の人ならそうかもしれないが
ハードウェア資源を有効利用しようとした途端アセンブラレベルの知識は必要になるだろ
理解する必要はないが、理解している奴の仕事を代わって引き受けられないな
721 :
デフォルトの名無しさん (ワッチョイ 3775-yliF)
2016/05/14(土) 12:56:54.42 ID:4NwAroGq0
なぜか事務処理系の案件もやったことがあるが
ちょっとしたバカの壁を透過するのにアセンブラ使ったぞ
722 :
デフォルトの名無しさん (JP 0H6f-mfIb)
2016/05/14(土) 13:35:56.95 ID:fLeelvLJH
なにが悲しくてC++を理解しなきゃならんのだ。
そんなのは組込み・基盤システム開発者の仕事だ。
723 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/14(土) 13:59:43.12 ID:K+XlGAeBd
まじかよアセンブラer最低だな
724 :
デフォルトの名無しさん (ワッチョイ 937b-qps8)
2016/05/14(土) 14:38:23.70 ID:UFikrM320
なにが悲しくてc++を理解しなきゃならんのだ。
そんなのはc++エバンジェリストの仕事だ。
725 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/14(土) 14:42:24.09 ID:QuevABMG0
アセンブリの基礎を判ってないとregisterの使い道すらわからんだろ
726 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/14(土) 14:45:28.79 ID:QuevABMG0
アセンブラ理解出来てない奴は最適化失敗するときのステートメントの修正方法すら判断つかんだろ
727 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/14(土) 14:46:17.04 ID:guvuQQ9l0
C++使ってるのは移植性のためでもあるからレジスタ直接触ることなんてほぼないわ
728 :
デフォルトの名無しさん (ワッチョイ 233c-/3cR)
2016/05/14(土) 14:52:23.85 ID:eiJc4QAX0
アセンブリだのレジスタだの、そういう低レベルな処理をプログラマが考える必要を無くしていくのがコンパイラとその設計者の仕事でしょうが。
729 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/14(土) 15:12:38.19 ID:K+XlGAeBd
まじかよアセンブラer大海を知らずだな
730 :
デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)
2016/05/14(土) 15:34:48.60 ID:jHuAeQfl0
移植のこと効力するなら、それこそソースレベルで分けていけばいい話だと思うけどね
731 :
デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)
2016/05/14(土) 15:35:45.78 ID:jHuAeQfl0
× 移植のこと効力するなら
○ 移植のことを考慮するなら
732 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/14(土) 15:41:24.26 ID:XQsBVmZY0
733 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/14(土) 15:45:05.04 ID:XQsBVmZY0
漏れの無い抽象化は言うほど簡単ではない
C++ぐらいではまだまだ低水準レイヤーの話を切り離すわけにはいかない
そもそもこの言語の最初の開発動機がSimulaの高速化であって
抽象化された高水準レイヤーとCPUアーキテクチャとメモリが透けて見える低水準レイヤーの
境にあるんである
734 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/14(土) 16:37:14.60 ID:BsF9lC3v0
今はグラフ彩色アルゴリズムで準最適なレジスタ割り当てが出来るってばっちゃが言ってた
register使ったこと殆ど無いわ
crubyのC拡張書くのに使った事はあるけど
735 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/14(土) 16:57:46.20 ID:guvuQQ9l0
registerってキーワードの事言ってるの?
736 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/14(土) 17:15:25.88 ID:EHXndh+50
>>725から733まではCPUレジスターの話だったけど
突然
>>734がstorage class specifierの話をし出した
737 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/14(土) 17:18:52.05 ID:BsF9lC3v0
> アセンブリの基礎を判ってないとregisterの使い道すらわからんだろ
この文を適切に補完すると
(それはCの一要素でありながら) (ry
ってなるだろうからキーワードの方だと思ったけど
違った?
738 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/14(土) 17:27:09.65 ID:EHXndh+50
一見その様な日本語にも見えるが、
規格では「殆どの処理系で無視されるのでdeprecated」になっていて
次期改訂のドラフト4582からも削除されてしまったキーワードについて
使い道を主張するとは考えにくい
739 :
デフォルトの名無しさん (ワッチョイ 4bf8-Z3GX)
2016/05/14(土) 17:31:14.33 ID:BsF9lC3v0
にほんごむずい
740 :
デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)
2016/05/14(土) 18:05:33.36 ID:jHuAeQfl0
register キーワードはアセンブリというより、コンパイラの知識じゃないのかな
今のコンパイラは賢いから最適化して割り当てるので、
変に使うとかえって効率を落としかねないから使うなって教わった
741 :
デフォルトの名無しさん (ワッチョイ 6f3c-/3cR)
2016/05/14(土) 18:06:21.55 ID:W/mpGy/20
742 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/14(土) 18:35:40.54 ID:guvuQQ9l0
registerキーワードが無意味なのは常識だと思ってた
743 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/14(土) 18:36:20.83 ID:50Ljn6jM0
無意味にスタックに積んでからすぐ取り出して使うゴミみたいなコンパイラならそれを止められるから意味ある
744 :
デフォルトの名無しさん (ワッチョイ b79d-hNIp)
2016/05/14(土) 20:30:12.22 ID:stGv22ss0
組み込みの開発ってやったことないんだけど、ベンダーが提供するコンパイラ
しか使えない場合が結構あるんでしょ? そうなるとそれがゴミみたいな代物
なら
>>743 だと思う。
745 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/14(土) 21:33:09.63 ID:guvuQQ9l0
大抵gccベースだけどな
746 :
デフォルトの名無しさん (ワッチョイ 3764-yliF)
2016/05/15(日) 06:32:49.04 ID:U+van56a0
>>740 教わった、のはいいが
ちゃんと自分で再検証したか?
747 :
デフォルトの名無しさん (ワッチョイ 27a8-Wsqh)
2016/05/15(日) 09:35:30.57 ID:IffsDtB30
>>740 言語仕様上の制約として register キーワード付きの変数はアドレスを取ることが出来なくなる。
(まともなコンパイラならアドレスを取ろうとするとエラーを通知する。)
当然だがアドレスが存在しなければならない変数はレジスタに載せられないので、
その逆にアドレスを取らなくていい変数であることを確約することで結果的にレジスタに載りやすくなる可能性はある。
gcc などは register キーワードの有無は変数をレジスタに載せるかどうかの決定を左右しないが、
レジスタに載せることが可能な変数の選択肢が多ければ結果的に最適化しやすくなるかもしれない。
まあ、よほど速度に厳しい箇所をチューニングするのでもなければ付けなくていいと思うけどね。
748 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/15(日) 09:45:04.30 ID:WYUaDR6g0
ここはC++のスレでregisterはC++17で削除される。clangなんかだと使ってるだけで警告もでる。
よって単にregisterは使ってはいけない。それ以上でも以下でもない。
749 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/15(日) 10:12:20.69 ID:SQ5j33E00
ポインタになら現行でもrestrictを付けることでaliasが無いものとコンパイラに通知され、
>>747の懸念は半分無用となるが(注:アドレスをとってもエラーにはならない)
参照にもつけられるようになるんだっけ;
750 :
749 (ワッチョイ 9f8b-EA1W)
2016/05/15(日) 10:18:51.93 ID:SQ5j33E00
訂正
×:アドレスをとってもエラーにはならない
○:Aliasを作ってアクセスしてもエラーにはならない
ていうかaliasが存在しないことの保証とか、コンパイラは宇宙の果てまでは追いきらん
751 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/15(日) 10:42:40.03 ID:TLapgfGj0
>言語仕様上の制約として register キーワード付きの変数はアドレスを取ることが出来なくなる
大昔に聞いたような記憶がよみがえった
26年前の別の言語の仕様でな
752 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/15(日) 10:46:36.48 ID:TLapgfGj0
>ポインタになら現行でもrestrictを付けることで
大昔に聞いたような記憶がよみがえった
16年前の別の言語でな
753 :
デフォルトの名無しさん (ワッチョイ 37bf-/3cR)
2016/05/15(日) 12:42:51.94 ID:heRU3dbC0
754 :
デフォルトの名無しさん (ワッチョイ 37bf-/3cR)
2016/05/15(日) 12:43:35.52 ID:heRU3dbC0
755 :
751 (オッペケ Sr2f-/3cR)
2016/05/15(日) 12:59:06.40 ID:Ep7D2rxvr
>>753 C89は知らんけどC90では禁止されていたような
調べたらC11でも禁止されたままだった
>>754 イエス、マダーム
756 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/15(日) 13:07:07.31 ID:vsTAFBzF0
C++じゃまだrestrictは規格的にはサポートされてないよ
C99との互換性のために書いてもエラーにせず無視することになってるけど(C++14 $17.2/2)
でも殆どのコンパイラで__restrictが使えるけどね
757 :
デフォルトの名無しさん (ワッチョイ 4b42-Wsqh)
2016/05/15(日) 13:12:53.03 ID:dHmJMeXo0
禁止と言うことは、無視されるではなく、
エラーになる(可能性がある)って理解で良いですか?
758 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/15(日) 13:18:12.39 ID:vsTAFBzF0
>99との互換性のために書いてもエラーにせず無視することになってるけど(C++14 $17.2/2)
ごめん。これ嘘
GCCでもClangでもrestrictはエラーになる
759 :
デフォルトの名無しさん (オッペケ Sr2f-/3cR)
2016/05/15(日) 13:54:04.82 ID:Ep7D2rxvr
>>757 イエス、マダーム
register int x;
&x;
760 :
デフォルトの名無しさん (ワッチョイ 87cb-Wsqh)
2016/05/15(日) 18:54:11.89 ID:vMirLtIS0
struct hoge
{
int val;
};
hoge h;
int* val = static_cast<int*>( &h );
のようにhoge*をint*にキャストしたら自動的に&hoge::valが得られるようにしたいんですが
どうすればいいですか。
761 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/15(日) 18:57:44.93 ID:YfWps9FTd
そんなことをやろうとしない
762 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/15(日) 19:11:08.36 ID:WYUaDR6g0
ポインタからじゃなくていいならキャスト演算子のオーバーロードで出来る
763 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/15(日) 19:16:44.98 ID:TLapgfGj0
764 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/15(日) 19:17:38.83 ID:jxnGY8hD0
>>760 int* val = (int*)&h;
765 :
デフォルトの名無しさん (ワッチョイ afc2-1Mko)
2016/05/15(日) 19:19:32.41 ID:HZxVWbFB0
int* val=(int*)(&h)
766 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/15(日) 19:31:53.73 ID:TLapgfGj0
767 :
デフォルトの名無しさん (ワッチョイ 53dc-zbyT)
2016/05/15(日) 19:48:04.92 ID:yfD+f9Qr0
そもそも struct hoge {int val;}; において、
hoge h; の &h と &h.val が値として一致する、つまり
reinterpret_cast<int*>&h == &h.val が常に成立するって
規格で保証されてるんだっけ?
768 :
デフォルトの名無しさん (ワッチョイ 377b-1Mko)
2016/05/15(日) 19:52:05.11 ID:vsTAFBzF0
保証されてるんじゃない(適当)
でなけりゃバイナリイメージのレイアウト作れない
769 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/15(日) 19:52:30.43 ID:TLapgfGj0
その保証を得るための条件確認を
>>763で書いてやったというのに…
ISO/IEC 14882:2014 9.2p19
770 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/15(日) 22:10:43.04 ID:TLapgfGj0
>キャスト演算子のオーバーロードで出来る
変換関数を定義することを規格で「キャスト」「演算子」「オーバーロード」と読んでいただろうか?
と思って調べたが、演算子とオーバーロードは確かに微妙な書き方だった。
キャストは式の一種で、変換関数のことをキャストとは言わないな
771 :
デフォルトの名無しさん (ワッチョイ b79d-hNIp)
2016/05/15(日) 22:28:39.62 ID:8VRuH69B0
さっぱりわからんが
int* val = static_cast<int*>( h );
なら(簡単に)出来るってことか?
772 :
デフォルトの名無しさん (ワッチョイ b79d-hNIp)
2016/05/15(日) 22:35:42.94 ID:8VRuH69B0
今気付いたんだけど、ワッチョイって結構重複するのか?
>>744は俺じゃないのにワッチョイ同じだな
773 :
デフォルトの名無しさん (ワッチョイ b7bf-a45h)
2016/05/15(日) 22:37:30.44 ID:vFNZTgb70
こういう珍しいコード?って実際の業務だと普通にあり得ることなんですか?
774 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/15(日) 22:39:05.28 ID:q+e+aGMq0
>>771 普通に
operator int* () & { return &val; }
と定義するだけでできるでしょ?
775 :
デフォルトの名無しさん (ササクッテロ Sp2f-a45h)
2016/05/16(月) 09:35:35.81 ID:8tgjguWIp
右半分はブラウザのUAだからすぐ被るけど
左半分はipアドかホスト名とかだったきがするからそうそう被らんとは思うけど
776 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/16(月) 10:58:51.83 ID:UIK75Ntg0
template<typename T>const char* typename()
{
return typeid(T).name();
}
これって実行時に変わることはないけどコンパイル時に取れないよね?
コンパイル時に決定される代替の方法ないかな?
777 :
デフォルトの名無しさん (ワッチョイ 4be7-EA1W)
2016/05/16(月) 11:05:06.85 ID:Wv3wWMiG0
リフレクションは(標準には)無い。
778 :
デフォルトの名無しさん (ワンミングク MM9f-/3cR)
2016/05/16(月) 11:11:03.55 ID:bmeyzU+wM
ポインターがコンパイル時に決定されたとしてなにか嬉しいのだろうか…
特殊化で解決できないケースが思いつかない
779 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/16(月) 12:19:01.47 ID:5ug0//ZW0
RTTI使わないで型名を文字列化したいということでしょ
出来てもいいよね
ないんだっけ?
テンプレートの特殊化で解決とかは冗談だろ?
780 :
デフォルトの名無しさん (ガックシ 065f-a45h)
2016/05/16(月) 12:47:03.24 ID:ViRuPN/26
getmodulefilenameで拾ったwchar*を、stdのstringに変換する方法はありませんか?
ウェブで調べても、systemのstringに変換してたり、wstringから変換しているものしか見つかりませんでした
781 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/16(月) 13:21:09.52 ID:UIK75Ntg0
>>779 >型名を文字列化したい
まさにそれです。
今は実行時にvariadic templateで渡された型からエラーメッセージを生成しています。
エラーメッセージなので実行コストは問題にしていないのですが2〜3種類程templateのインスタンス化した時点で1KB以上コードサイズが増えてしまっててコンパイル時に生成できたら数十バイト程に収まるのになぁと思っての質問でした。
782 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/16(月) 21:35:11.73 ID:ptsyD+4U0
783 :
デフォルトの名無しさん (ワッチョイ 2317-yliF)
2016/05/16(月) 22:32:19.16 ID:hnQ6k/Go0
見れば見るほどRTTIはクソだね
拙速にもほどがある
いつかメジャーチェンジで刷新をきぼんぬ
784 :
デフォルトの名無しさん (ワッチョイ a7cf-Jrc9)
2016/05/16(月) 23:00:15.78 ID:ZRzqLMgu0
>>781 ひどい話に聞こえるけど、それコンパイラ何?
785 :
デフォルトの名無しさん (ワッチョイ cbd4-7yL8)
2016/05/17(火) 10:42:57.44 ID:0QCad9Bp0
C#のプログラマなんだけどさあ
他人が書いたC++のソースコードを読むにあたり、まあ生き別れの兄貴なら多少違ってても雰囲気で読めるだろうとぐらいに思ってたんだけど・・・・・全然読めなくておわた
テンプレート多用も堪えるけど、一番困るのはヘッダファイルが全然読めなくて意味不明な点だ
差し当たって最低限の知識を得れる本等でおすすめがあったら教えてくれんかな
786 :
デフォルトの名無しさん (JP 0H6f-mfIb)
2016/05/17(火) 11:34:36.15 ID:eRIY89eqH
その兄はおそらく幼い頃から日本以外で生活してた
787 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/17(火) 12:24:41.75 ID:DLx6Jllf0
基本的な構文がCスタイルなだけで生き別れでも何でもない他人だし
788 :
デフォルトの名無しさん (ワンミングク MM9f-UkU1)
2016/05/17(火) 12:31:05.41 ID:aW8j1xwWM
ヘッダファイルが読めないって単にソースが読めないって事だからな
789 :
デフォルトの名無しさん (JP 0H6f-mfIb)
2016/05/17(火) 12:40:39.83 ID:eRIY89eqH
たぶん boost 系のクソテンプレートだろう
790 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/17(火) 12:42:18.92 ID:JBnvLbQwd
>>785 例えばヘッダのどんなところが読めなかった?
C言語部分がわからないのか、C++特有の部分がわからないのか
791 :
デフォルトの名無しさん (ワッチョイ 236c-gj/H)
2016/05/17(火) 12:44:01.08 ID:YEDl+1EH0
逆に今C#初めて見たけど、そこそこ見れるな
792 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 13:53:10.45 ID:AYutjq9j0
C++こそが至高
793 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 13:54:20.44 ID:AYutjq9j0
C#は舎弟
794 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 13:57:07.99 ID:AYutjq9j0
そしてJava奴隷
795 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/17(火) 15:10:49.08 ID:w5cAt2PYd
「ヘッダファイルがぜんぜん読めなくて困る」の意味があやふやでなんとも
796 :
デフォルトの名無しさん (オッペケ Sr2f-/3cR)
2016/05/17(火) 17:47:37.73 ID:SVOYn8cOr
そもそもC++の言語仕様にヘッダファイルなどと言うものは存在しない
797 :
デフォルトの名無しさん (ワンミングク MM9f-/3cR)
2016/05/17(火) 18:02:38.06 ID:xRsGC6W0M
>>796 これのせいで、ヘッダに何書けばいいのかとか詳しく書いてくれてる書籍が皆無っていう
798 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/17(火) 18:31:08.64 ID:YSbkH+WYd
Googleのスタイルガイドに従っておけば良い
799 :
デフォルトの名無しさん (オッペケ Sr2f-/3cR)
2016/05/17(火) 18:32:04.81 ID:SVOYn8cOr
例外禁止?
ノーサンキューです
800 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 18:53:28.33 ID:AYutjq9j0
フリーフォーマットだしヘッダのinclude自体プリプロによる前処理だし
801 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 19:00:13.12 ID:AYutjq9j0
ハンガリアンなんていうゴミ記法はゴミ信者が布教したもんだし
ヘッダなんていう定礎もソレと同じ
本来フリーフォーマットだし従う必要もない
802 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/17(火) 19:12:11.14 ID:w5cAt2PYd
拡張子も自由だしどう呼ぼうと勝手だな
803 :
デフォルトの名無しさん (ワッチョイ 4bf8-Bhie)
2016/05/17(火) 19:26:22.91 ID:0ndBRKVS0
拡張子ってあれでしょ、MS-DOSの悪しき風習の一つでしょ
>>801 システムハンガリアン記法とアプリケーションハンガリアン記法の違い、知ってる?
804 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 19:33:40.71 ID:AYutjq9j0
違いは知っている
どっちにしろ醜い
805 :
デフォルトの名無しさん (ワンミングク MM9f-UkU1)
2016/05/17(火) 19:49:53.46 ID:aW8j1xwWM
アプリケーションハンガリアンは意味のある統一された名前付けをしようってだけのもので、それなりに合理的だと思うけどな
806 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 20:16:48.91 ID:AYutjq9j0
メンバー変数にm_
グローバル変数にg_
など見苦しくてコード読むのもなんかキモい
807 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/17(火) 20:22:05.14 ID:AYutjq9j0
余計なことすんなって気がする
808 :
デフォルトの名無しさん (ササクッテロ Sp2f-a45h)
2016/05/17(火) 20:45:27.40 ID:ZLInSjXlp
メンバ変数ってスコープが明らかにローカル変数と違うから、一目でわかる識別子は価値があると思う
809 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/17(火) 20:52:50.22 ID:DLx6Jllf0
その話題ついこの前やったな
m_はm一字で入力候補として全部出せるからまだマシ
810 :
デフォルトの名無しさん (オイコラミネオ MMdf-lVte)
2016/05/17(火) 21:18:01.72 ID:H7Xr8xNTM
_いれる派が多いのか
811 :
デフォルトの名無しさん (ワッチョイ 87cb-Wsqh)
2016/05/17(火) 21:19:16.67 ID:5ZuXJob50
メンバの一覧表示してなんか意味あるの?
812 :
デフォルトの名無しさん (ワッチョイ d35b-Wsqh)
2016/05/17(火) 21:20:13.79 ID:0Uq+w/x10
俺もmとかあっていい派だな。
ただアンダースコアが助長な感じするんで、
mHogeみたいな感じで使ってるな。
813 :
デフォルトの名無しさん (ワッチョイ 373d-yliF)
2016/05/17(火) 21:23:42.65 ID:n2YIPAfm0
エムバーでメンバーという駄洒落なのさ
814 :
デフォルトの名無しさん (ワッチョイ 4b64-Wsqh)
2016/05/17(火) 21:25:33.49 ID:NhE32Twq0
いずれにせよ他人に強要するもんじゃないから
プロジェクトチーム内でコンセンサスが取れていれば何でもいいんじゃないですかね。
815 :
デフォルトの名無しさん (ワッチョイ 8fc0-TzrJ)
2016/05/17(火) 21:35:08.37 ID:iUzOcy+l0
816 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/17(火) 22:19:21.77 ID:xjOiIw8U0
贅沢な名だね
お前の名は今日からtmpだ
817 :
デフォルトの名無しさん (ブーイモ MM6f-/3cR)
2016/05/17(火) 22:28:00.80 ID:zWksk4WFM
今日から私のことは二つ名テンプテーションと呼んでくれ
818 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/17(火) 22:41:23.98 ID:DLx6Jllf0
>>811 記憶があやふやであれ何だったかなあっていうときにm押せば出てくるのは便利
819 :
デフォルトの名無しさん (ワッチョイ 4b64-Wsqh)
2016/05/17(火) 23:26:37.97 ID:NhE32Twq0
むしろただの変数は二文字以上ある時点で豪華な部類
820 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/17(火) 23:33:54.07 ID:xjOiIw8U0
821 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/18(水) 00:11:45.44 ID:yEeXtbl90
822 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/18(水) 00:15:09.75 ID:GQGC04nZ0
MS勘違いハンガリアン
823 :
デフォルトの名無しさん (ワッチョイ 87ff-gmVm)
2016/05/18(水) 00:31:32.12 ID:WN1OorbV0
なんちゃらウィザードで作ると、m_まで入ってるから繋げちゃうよなw
824 :
デフォルトの名無しさん (ワッチョイ 4be7-EA1W)
2016/05/18(水) 00:45:12.55 ID:hZVHIlqW0
メンバー明示したいならthis使えと。
そもそもグローバル変数は使うなと。
特にグローバル変数使うとコピペしたい時すげー不便。
825 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/18(水) 00:46:39.05 ID:bTqCK2tF0
グローバル変数って何?
826 :
デフォルトの名無しさん (ワッチョイ 4be7-EA1W)
2016/05/18(水) 00:47:25.65 ID:hZVHIlqW0
え?
827 :
デフォルトの名無しさん (ガラプー KK8f-6Ylf)
2016/05/18(水) 00:49:41.11 ID:jYlR0JsWK
>>825 That is 大局なvariables.
828 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/18(水) 00:52:22.73 ID:5/m+TFHG0
グローバル変数使うなという人は久しぶりに見た
829 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/18(水) 00:59:32.23 ID:yEeXtbl90
最近は当たり前すぎてわざわざ言う人居なかったよね
830 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/18(水) 01:06:37.05 ID:5/m+TFHG0
え?
831 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/18(水) 01:18:04.13 ID:oA47oPzz0
>>824 thisなんて忘れたってエラーにもなんにもならないんだから役に立たんわ
832 :
デフォルトの名無しさん (ワッチョイ 4be7-EA1W)
2016/05/18(水) 01:19:11.35 ID:hZVHIlqW0
>>831 だから、明示したい時って書いてるじゃん。
プレフィックス使ってもお堅いだけよ。
833 :
デフォルトの名無しさん (ワッチョイ b79d-hNIp)
2016/05/18(水) 01:27:17.96 ID:Y8xrmYKy0
>>824 高脳C++使いはm_xxx/mxxx や xxx_なんて美しくない形のメンバー名にしないよな
メンバー名はセンスあるxxxで、使うときにthis->xxxってするのが美しいC++だよね
でも、低脳、ゆとりC++使いは美的感覚ないからm_xxx/mxxx や xxx_形を普通に使うからな
俺もだけど,orz
834 :
デフォルトの名無しさん (ワッチョイ 4be7-EA1W)
2016/05/18(水) 01:28:20.91 ID:hZVHIlqW0
>>833 炎上させたいのか?
そういう高低の話じゃないんだが。
835 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/18(水) 01:50:24.96 ID:oA47oPzz0
>>832 メンバ変数アクセスなのかローカル変数アクセスなのかは常にパッと見て分かるようになってるほうが良いと思うけどね
メンバ関数からメンバ変数をアクセスする場合は.memberとしなければならないとかだったら良かったのになあ
836 :
デフォルトの名無しさん (ワッチョイ 4be7-EA1W)
2016/05/18(水) 01:53:50.03 ID:hZVHIlqW0
>>835 そこ強制しちゃうのかー。
名前被らないようにしてれば大体問題ないけどねぇ。
837 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/18(水) 02:28:40.96 ID:yEeXtbl90
>>831 プレフィックスなんて忘れたってエラーにもなんにもならないんだから役に立たんわ
838 :
デフォルトの名無しさん (ワッチョイ a763-/3cR)
2016/05/18(水) 06:27:23.33 ID:c/4q+m1z0
役に立たないというのは話のすり替えだな。
例えば「クラス名はPascalCaseに統一しようぜ」と言う奴に
「間違えてcamelCaseで書いてもエラーにならないから無意味」
と言ったら詭弁だろう
839 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/18(水) 07:06:57.31 ID:CyiE2Hpq0
>>831 ほんとこれ
強制されたいガチガチに縛って欲しいハアハア、
840 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/18(水) 07:08:23.39 ID:bTqCK2tF0
>>827 なにが言えればグローバル変数って認められるんだろう
アクセスできる範囲(翻訳単位を越えるor越えない)
状態を持つ/変更できる
寿命(mainより長い)
841 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/18(水) 07:09:50.65 ID:CyiE2Hpq0
しかし正直教育型言語であるはずのパスカルでさえ
with文とかあって長ったらしい構造体メンバアクセスを省略可能にしているぐらいだから
this->fooとかいちいち書いてあるC++のソースとか読んでたら目が腐りそう…
やっぱm_プレフィックスぐらいの軽い奴をコンパイラが強制してくれたら嬉しいハアハア
842 :
デフォルトの名無しさん (ワッチョイ 9f8b-EA1W)
2016/05/18(水) 07:33:52.96 ID:CyiE2Hpq0
ていうか質問なのですが、
template<class T> { ... }の定義の中で、Tが整数型限定だとして
TのMSBを得るコードってどう書くのが良いのでしょうか。
Tによって変わるとはいえ本質的に定数なので、実行時コストを定数アクセス以下に抑えたい
やっぱ特殊化しちゃうのが常道?
一応<limits.h>ぐらいはインクルードしているものとして
const T MSB = (T)1 << ((CHAR_BIT * sizeof(T) - 1);
としたらできている気がするが、、
843 :
デフォルトの名無しさん (オッペケ Sr2f-/3cR)
2016/05/18(水) 07:53:45.73 ID:LyU/n3Wrr
まず貴様のMSBとやらの定義を訊こうか
少なくともその定数はコンパイル時に決定できるので特殊化は要らないだろう
844 :
デフォルトの名無しさん (ワッチョイ 6fcc-/3cR)
2016/05/18(水) 07:56:24.15 ID:GQGC04nZ0
そういや int i; を書くのが面倒だからグローバルにしているとか抜かすバカシャチョウ居たな
845 :
デフォルトの名無しさん (ワッチョイ 87ff-gmVm)
2016/05/18(水) 08:05:53.90 ID:WN1OorbV0
forループにしか使わないということかw
846 :
デフォルトの名無しさん (ドコグロ MMdf-/3cR)
2016/05/18(水) 08:19:26.66 ID:Bv005giXM
847 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/18(水) 08:47:55.80 ID:5/m+TFHG0
848 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/18(水) 08:49:44.59 ID:yEeXtbl90
>>840 グローバルネームスペースに置かれてる変数
849 :
デフォルトの名無しさん (ブーイモ MM6f-/3cR)
2016/05/18(水) 12:40:24.80 ID:83U9cWaxM
>>847 いや困るでしょ…
for内で関数呼び出してて、その関数の中でもfor使ってたら…
850 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/18(水) 12:44:09.84 ID:5/m+TFHG0
>>849 そのためにi,j,k,l,m,nとかやってるんでしょ
知らんけど
851 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/18(水) 12:45:06.50 ID:PJk+y+uRd
>>844 そこまで言うと作り話でしょ。
事実だとしても考慮外として切り捨て
852 :
デフォルトの名無しさん (スプー Sd1f-/3cR)
2016/05/18(水) 12:45:13.34 ID:ICIQ9a1pd
azまで全部宣言しておけばいいだろ!
853 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/18(水) 13:30:49.34 ID:yEeXtbl90
そうだ!配列とインデックス変数にして使うときにインクリメント使い終わったらデクリメントすればいいんだ!
854 :
デフォルトの名無しさん (ワッチョイ d35b-Wsqh)
2016/05/18(水) 18:52:20.04 ID:ODcMRn4j0
全部グローバルにした方が、どっからでもアクセスできて便利だろ。
855 :
デフォルトの名無しさん (ドコグロ MMdf-/3cR)
2016/05/18(水) 18:54:32.39 ID:Bv005giXM
本人面白いこと言ってるつもりなんだろうな...
856 :
デフォルトの名無しさん (ワッチョイ 1362-a45h)
2016/05/18(水) 18:58:10.91 ID:kXIjvZGj0
定番かもしれんが
#define private public
は見たことある。
この時は好ましく無い使われ方だったが、ある意味目から鱗だった。
857 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/18(水) 19:04:22.76 ID:oA47oPzz0
そりゃ目から何出ても不思議じゃないわ
858 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/18(水) 20:12:25.05 ID:5/m+TFHG0
最近それ無効じゃなかったっけ
859 :
856 (ワッチョイ 1362-Wsqh)
2016/05/18(水) 20:26:25.13 ID:kXIjvZGj0
>>858 試しにやってみたら確かに警告出ますね。
ちなみに、これ見たのは10年くらい前でした。
860 :
デフォルトの名無しさん (ワッチョイ 937b-qps8)
2016/05/18(水) 22:15:33.16 ID:p8whoeqx0
>>841 その手の問題ってたいていダラダラ長いメソッド書いてるのが問題ってだけ。
861 :
デフォルトの名無しさん (ブーイモ MM1f-/3cR)
2016/05/18(水) 23:00:45.13 ID:dPKzZ46VM
>>828 いつどこで書き換えられるか分かり辛い。
再入可能なプログラムが書きづらい。
当然分かってるんだよな?
862 :
デフォルトの名無しさん (ワッチョイ 377b-nbuf)
2016/05/18(水) 23:05:35.36 ID:oA47oPzz0
再入どころかループ中に呼んだ関数で。。。
そんなもん問題外に決まってるだろw
863 :
デフォルトの名無しさん (ワッチョイ 9302-Wsqh)
2016/05/18(水) 23:08:36.18 ID:5/m+TFHG0
>>861 下手なだけじゃん
それを踏まえた上でどこからでも参照できるという利便性は余りある
使ってはいけない機能なんか無いんだよ
864 :
デフォルトの名無しさん (ワッチョイ 937b-UkU1)
2016/05/18(水) 23:12:10.63 ID:yEeXtbl90
ガチで言ってるなら相当頭悪いな
865 :
デフォルトの名無しさん (ワッチョイ 9fa6-Wsqh)
2016/05/18(水) 23:56:41.02 ID:bTqCK2tF0
>>863 利便性はたまにしかない。
たまにファイルレベルのグローバル変数(無名namespace内)がなかなか消せないことがあるってくらいだろう。
866 :
デフォルトの名無しさん (ワッチョイ 1c42-MTTD)
2016/05/19(木) 00:15:20.75 ID:/u6FV+LN0
867 :
デフォルトの名無しさん (ワッチョイ 9102-xKv1)
2016/05/19(木) 00:34:18.53 ID:CdsyDRqW0
お前らレベル低すぎだろ
所詮2chは人の受け売りしか言えない奴ばかりだな
868 :
デフォルトの名無しさん (ワッチョイ 1c42-MTTD)
2016/05/19(木) 00:48:21.19 ID:/u6FV+LN0
賢者は歴史から学ぶんだよ。
愚者でも長年マ続けてればグローバル変数が危ういことくらい自分で気づくだろ
869 :
デフォルトの名無しさん (ワッチョイ 9102-xKv1)
2016/05/19(木) 00:50:20.65 ID:CdsyDRqW0
長年続けていれば上手い使い方くらい分かってくるはずだよな
870 :
デフォルトの名無しさん (ワッチョイ e6cc-MTTD)
2016/05/19(木) 00:54:48.61 ID:jjXAPX3H0
バカシャチョウ肯定する奴が多くてオレサマちょっとビックルがぶ飲みしますたw
871 :
デフォルトの名無しさん (ワッチョイ caa6-xKv1)
2016/05/19(木) 00:58:49.66 ID:AERHjGsq0
上手い使い方っていうより害が少ない使い方ってだけだろ。
一連の流れの中で複数個所から見えるデータとして使うだけのグローバル変数なら簡単に消せる。
一連の流れとかに限定できなくて、プログラムの開始から終了までいつでも好きな時に使えて状態も保持してくれる、
ってなると何を使えばいいんだ?
872 :
デフォルトの名無しさん (ワッチョイ c69f-VMrL)
2016/05/19(木) 01:02:49.20 ID:MRopiFdD0
std::cout とか std::cerr とか滅茶便利だからみんな使え
873 :
デフォルトの名無しさん (ワッチョイ 3b73-QLyI)
2016/05/19(木) 03:25:07.54 ID:8MpWaHz30
単純な文字列比較のコード書いたんだけど
一回の呼び出して=、>、<って判明する方が楽だよね
とりあえずキーの重複チェック、登録、キーの値でインデックス更新
C++の set みたいな挙動
874 :
デフォルトの名無しさん (ワッチョイ bc42-MTTD)
2016/05/19(木) 06:46:13.07 ID:YvzDSQsZ0
875 :
デフォルトの名無しさん (ワッチョイ 7be7-8iTP)
2016/05/19(木) 06:51:42.87 ID:7d5d2lg80
template<class T,int N>
T& global(){
static T V;
return V;
}
ネーム空間をなるべく汚染しないグローバル変数の実装。
Nを変更するとそれ毎に関数が生成される。なのでペナルティはあるかもね。
876 :
デフォルトの名無しさん (ワッチョイ f063-MTTD)
2016/05/19(木) 07:07:31.92 ID:A0YFV+4B0
まさに「俺すごいもの発明しちゃった」的な迷惑コード
全ソース内で一意な番号をプログラマー責任で決めて変数を識別するという発想がunko
しかもコンストラクターに引数が与えられない残念仕様
877 :
デフォルトの名無しさん (ワッチョイ 7be7-8iTP)
2016/05/19(木) 07:47:17.80 ID:7d5d2lg80
enumってコンパイルタイム変数になったんじゃなかったっけ。
それに。別にINTじゃなくてもなんでも識別できれば代用できるよ。
まぁ、ベストとは思わんよさすがに。
878 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 08:56:20.09 ID:shk5tFZP0
ベターどころか最悪の部類だよ
グローバル変数よりたちが悪い
879 :
デフォルトの名無しさん (ワッチョイ 138c-7Gsa)
2016/05/19(木) 09:05:34.39 ID:C8F3ftqe0
いい加減グローバル変数にアレルギーある老害は引退しろ
880 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 09:08:06.56 ID:STy3ELMD0
グローバル変数とそれに準ずる機能を使っていいのは、初期化時のみ変更し、その後読み取り専用にする場合ぐらいだろ
仕様やコストや納期などの制限もなしにあえてやるというのは、ただの依存関係を考えられない初心者ぐらい
プログラマにとって怠惰は美徳だが、センスのないやつが履き違えるとこうなるといういい例だな
881 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 09:09:30.57 ID:shk5tFZP0
namespaceすら使えないカスが偉そうにすんな
882 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 09:12:16.18 ID:eVW3ynUMd
グローバル変数なんて使った事ないけど何に必要なの
883 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 09:18:07.29 ID:shk5tFZP0
>>882 モジュール間のインターフェースを決められない未熟なプログラマに必要
884 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 09:44:48.05 ID:ZQvJITQCd
>>882 プログラムの開始から終了まで何らかの状態を保持し、任意のタイミングでそれを参照する必要があるとき。
ちなみにシングルトンや関数内staticの使用では完全な問題解決とは見なされない。
885 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 09:48:07.93 ID:ZQvJITQCd
かえってシングルトンの方が嫌われている。
886 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 09:56:21.08 ID:shk5tFZP0
>>884 参照するだけで変更しないなら定数でいいし、
変更するにしても名前空間に置けばいい
グローバルにする理由が一つもない
887 :
デフォルトの名無しさん (JP 0H31-1UMr)
2016/05/19(木) 10:07:12.42 ID:73EK6oIWH
ファイルから読み込んでずっと変更しないシステム定数
それに名前空間なんて名前衝突しないだけで何の意味もない
名前空間下にあろうがなかろうがグローバルだよ
888 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 10:16:44.29 ID:shk5tFZP0
>>887 名前衝突しないのは大事だろそれを意味ないって名前空間全否定か。
お前は
sturuct A{static int B;};
こういうのもグローバル変数って言ってるの?
そうならお前のいうグローバル変数と俺の思ってるグローバル変数は異なる物だ
889 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 10:19:20.40 ID:eVW3ynUMd
いくら聞いてもグローバルじゃないとダメな理由が見えてこない
サンプル書いてみて
890 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 10:23:06.51 ID:TN2vwqPV0
グローバルやシングルトンの必要性が分からないやつは単に経験が少ないだけ
必要のないところでまで無闇に使うのは論外だが
891 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 10:46:00.80 ID:shk5tFZP0
>>887 >ファイルから読み込んでずっと変更しないシステム定数
グローバル変数にするより関数にしたほうがいい。誤って書き換えてしまう心配もなくなる
>>890 グローバル変数とシングルトン両方否定してる奴居ないと思うけど誰に対して言ってる?
独り言?
892 :
デフォルトの名無しさん (ササクッテロ Spbd-7Gsa)
2016/05/19(木) 10:51:14.99 ID:uMP5aDx/p
>>889 ある関数内で、bool型の3つのフラグに応じて3つの処理をするか決める時に使ってたなあ
例えばこんな感じ
bool f1,f2,f3;
main(){
//フラグを決める処理をここに記述
func();
return;
}
func(){
if(f1)〜
if(f2)〜
if(f3)〜
}
こういう場合どうすればスマートなの?
funcの引数にフラグ渡すのはブサイクな気がしたからグローバルにしたけど
893 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 10:55:48.76 ID:ZQvJITQCd
グローバル変数に対する批判
→
シングルトンの導入
→
シングルトンの乱用が目立つ
→
シングルトンに対する批判(デサパタの中でも下の下)
→根本的な改善策は?←イマココ
894 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 10:56:57.72 ID:STy3ELMD0
>>892 引数にして何がブサイクなのかさっぱりわからんぞ…
数が増えるのが嫌なら構造体にして渡すし、むしろ迷う意味がわからない
というか、C++ならそういう場合は関数じゃなくてクラスにしろよ
895 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 10:57:15.07 ID:eVW3ynUMd
f1,f2,f3とfuncをひとつのクラスにしてmainのローカルにすればいいのでは
896 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 10:58:07.34 ID:TN2vwqPV0
>>891 >グローバル変数とシングルトン両方否定してる奴居ないと思うけど誰に対して言ってる?
俺のレスの1つ前に「グローバルじゃないとダメな理由が見えてこない」って書いてあるんだが?
シングルトンなんて機能的にはグローバルに薄皮一枚かぶせただけのものだし
897 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 10:58:41.46 ID:STy3ELMD0
シングルトンもはっきり言ってただの手抜きだから
静的クラス全てがそう
898 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 10:58:53.44 ID:ZQvJITQCd
>>892 mainとfuncだけに閉じた処理だから引数で渡すのに何の困難もないじゃないか。
899 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 10:59:11.66 ID:eVW3ynUMd
900 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 10:59:37.70 ID:ZQvJITQCd
901 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 11:02:36.04 ID:TN2vwqPV0
>>899 じゃあどういう解釈すればよかったんだよ?
お前はグローバルとシングルトンが本質的に違うとでも思ってるのか?
シングルトンのほうが柔軟性があることは認めるがね
902 :
デフォルトの名無しさん (ワッチョイ 653c-rvT4)
2016/05/19(木) 11:03:15.86 ID:n4iAdyIo0
日本マイクロソフト人事部の西川昌邦(さいかわまさくに)は人殺しだ!!
「あなたのような従業員は会社のパフォーマンスにとってマイナスなので早く死んでください」
などと自殺教唆を公然と行った!!
丁寧に言えば何を言ってもいいというものではない!!これはヤクザや借金取りが脅迫をする時に
「いついつまでに金一億円をお振り込みください。間違った判断をなされないことを期待しています」
と発言するのと同じレベルだ!!
「しかもそれを注意してやったら世間はわれわれの味方だ。文句があるなら訴えてきたらよろしい。メールを電番を公開したければ
どうぞご自由に。世論はわれわれを賛辞するするメールを送付するだろう」
などとイカ様気取りも大概にしろという発言を行った!!
抗議先 日本マイクロソフト人事本部 西川昌邦
[email protected] 090-2541-1718
903 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 11:08:16.28 ID:STy3ELMD0
>>901 初心者かよ…
シングルトンパターンとグローバル変数じゃスコープの要件の時点で既に違うだろ
904 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 11:11:13.83 ID:eVW3ynUMd
>>901 どれがマシかという話をしてるんだろ
静的変数が是か否かなんて今更くだらない
勝手な解釈すんなアホが
905 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 11:12:18.94 ID:TN2vwqPV0
>>903 「スコープの要件」とは?
何のことなのかよく分かりませんので詳しくご教示ください
906 :
デフォルトの名無しさん (ササクッテロ Spbd-7Gsa)
2016/05/19(木) 11:13:39.15 ID:uMP5aDx/p
やっぱそうだよね…長年CやってたせいでいつまでたってもCライクな書き方が抜けない、重症です
907 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 11:14:15.63 ID:STy3ELMD0
>>905 シングルトンに静的インスタンスとしての概念はあっても公開の概念はない
デザパタやり直せ
908 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 11:15:29.40 ID:TN2vwqPV0
>>904 >どれがマシかという話をしてるんだろ
>静的変数が是か否かなんて
さあ?それこそあんたの勝手な解釈だな
是か否かなんて話は俺はしてないよ文盲
909 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 11:18:04.90 ID:eVW3ynUMd
勝手に人の話を勘違いして例にあげて
アホな解釈で話を歪めてトンチンカンな事言っておいてこの言い草
マジヤバイ
910 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 11:18:30.55 ID:TN2vwqPV0
>>907 >公開の概念はない
ほう。そこをもう少し詳しく
911 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/19(木) 11:20:22.01 ID:STy3ELMD0
>>910 いやこれ以上は答えないよ
既に質問ではなく相手を打ち負かすつもりのレスだからね
お前はもう最初のレスから詰んでるよ
残念だったな
912 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 11:20:51.55 ID:TN2vwqPV0
>>909 そうだとしたら何を言いたいのか分からないようなテキストを書いたお前の責だバーカ
913 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/19(木) 11:22:16.79 ID:STy3ELMD0
いつの間にこんなにレベルが下がったんだここは
ちょっと前までC++の仕様を少しでも間違えば後ろから刺される勢いだったのに…
914 :
デフォルトの名無しさん (スプー Sd78-MTTD)
2016/05/19(木) 11:24:10.88 ID:eVW3ynUMd
>>912 勝手に人の話を勘違いで解釈して赤っ恥をこいた男の末路がこのレスに込められていますね
915 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 11:24:40.59 ID:TN2vwqPV0
>>911 「答えない」
ワロタwww「答えられない」だろwww
「お前は詰んでる」って勝利宣言して逃げるパターン出たね
916 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 11:28:17.40 ID:shk5tFZP0
917 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/19(木) 11:32:43.43 ID:STy3ELMD0
>>915 普通の人間なら一つ前のレスで十分理解できるだろうに
長々と必死に抗弁を試みようとする時点で、
外面を保つ事のみを目的としてる残念な人間なのだとしか評価できないね
まあその外面もお前の頭の中にしかないんだが
918 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 11:53:46.12 ID:ZQvJITQCd
グローバル変数とシングルトンの違いを論点にしてる人々がいるようだが...
どっちも使いたくないから他の機構を考える、という流れで是非よろしく
919 :
デフォルトの名無しさん (JP 0H31-1UMr)
2016/05/19(木) 12:08:41.77 ID:73EK6oIWH
シングルトンが重宝されるのは初期化処理が複雑で
処理順解決が問題になる場合
そんなケースなら流石にグローバル丸出しなんてしない
920 :
デフォルトの名無しさん (ワッチョイ 9102-xKv1)
2016/05/19(木) 12:43:08.90 ID:CdsyDRqW0
使わなくてもいけるという発言を見る度に使えばいいじゃんとしか思えないわ
gotoもガンガンつかっていく
921 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 12:43:08.91 ID:TN2vwqPV0
>>917 外面云々とかこんな匿名掲示板で何ってるんだよバーカ
鏡と睨み合って自分自身に向かって諭してろよ中身なしの超絶ゴミクズ君
922 :
デフォルトの名無しさん (ワッチョイ e97b-MTTD)
2016/05/19(木) 12:58:35.08 ID:hRS9mr1R0
まーたPostMessage君が出てきたのか
暑くなると頭のネジが5本くらい抜け落ちる奴が増えるから本当に迷惑だ
923 :
デフォルトの名無しさん (オッペケ Srbd-MTTD)
2016/05/19(木) 13:02:34.95 ID:Ibvbou6Qr
924 :
デフォルトの名無しさん (オッペケ Srbd-MTTD)
2016/05/19(木) 13:26:11.48 ID:Ibvbou6Qr
物事の概念・本質をとらえることのできない低能
>>901には、グローバル変数とシングルトンの区別がつかなくても仕方ない
>>888 >>887は名前空間スコープの変数をグローバル変数と呼んでいるようだが
名前空間スコープとクラススコープの違いぐらいは理解した方がいい。
むあ「何にもついて」の「何の意味もない」なのか文脈を無視して単語レベルで反応する猿には難しいかったかも
925 :
デフォルトの名無しさん (オッペケ Srbd-MTTD)
2016/05/19(木) 13:27:31.80 ID:Ibvbou6Qr
>>924に訂正
誤 何にもついて
正 何について
926 :
デフォルトの名無しさん (ワッチョイ 7162-xKv1)
2016/05/19(木) 13:40:03.86 ID:+RT//Rk20
昔MFCのアプリで CPen, CBrush, COLORREF あたりを singleton に入れて使ってた。
singleton じゃなくてもいいけど、singleton が適してると思う。
927 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 13:41:01.02 ID:TN2vwqPV0
はいはいいつもの語り口きました
実務じゃ全く役に立たない無能さんw本は売れた?www
928 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 13:53:09.52 ID:ZQvJITQCd
>>923 結局は特定の変数に状態を保持しておくという本質は変わらないから。
もちろんスコープやアクセス範囲の制御ができるとか監視ができるとかのメリットはわかるけど、それは付随的なもの。
929 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/19(木) 14:07:52.18 ID:STy3ELMD0
>>921 それで内容の理解はできたのか?
何年プログラムやってその体たらくなのかしらんが、少しは精進したほうがいいぞ
930 :
デフォルトの名無しさん (ワンミングク MMd0-P/BW)
2016/05/19(木) 14:12:05.72 ID:BWP2yuCgM
>>924 なぜ名前空間とクラススコープの違いを理解していないと思ったのか
931 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/19(木) 14:21:47.31 ID:STy3ELMD0
ステートレスにしろってのは同意するけど、
グローバル変数とステートレス/ステートフルの議論は別だと思うよ
スコープ関係ないし
932 :
デフォルトの名無しさん (アウアウ Sab5-V4Zo)
2016/05/19(木) 16:44:31.58 ID:iQAxMb//a
static constexpr double global_pi = 3.14;
933 :
デフォルトの名無しさん (ササクッテロ Spbd-7Gsa)
2016/05/19(木) 16:55:51.62 ID:uMP5aDx/p
#deine PI 3.14でよくね
934 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/19(木) 17:48:13.21 ID:ZQvJITQCd
状態の変化があって寿命の長いデータを、変数に入れることなく管理したい
935 :
デフォルトの名無しさん (ワッチョイ 7bf8-xFql)
2016/05/19(木) 18:27:00.27 ID:ap9POzY/0
そこでクロージャですよ
936 :
デフォルトの名無しさん (ワッチョイ 415b-xKv1)
2016/05/19(木) 19:42:52.90 ID:GUQu4Juu0
644とかパーミッション設定できたらよかったのに。
937 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/19(木) 20:11:59.41 ID:TN2vwqPV0
>>932 普通にM_PI使えばいいと思うの
それに3.14じゃ精度悪すぎるよ
938 :
デフォルトの名無しさん (フォンフォン FF7c-rvT4)
2016/05/19(木) 20:43:53.03 ID:e5/wWDviF
日本マイクロソフト人事部の西川昌邦(さいかわまさくに)は人殺しだ!!
「あなたのような従業員は会社のパフォーマンスにとってマイナスなので早く死んでください」
などと自殺教唆を公然と行った!!
丁寧に言えば何を言ってもいいというものではない!!これはヤクザや借金取りが脅迫をする時に
「いついつまでに金一億円をお振り込みください。間違った判断をなされないことを期待しています」
と発言するのと同じレベルだ!!
「しかもそれを注意してやったら世間はわれわれの味方だ。文句があるなら訴えてきたらよろしい。メールを電番を公開したければ
どうぞご自由に。世論はわれわれを賛辞するするメールを送付するだろう」
などとイカ様気取りも大概にしろという発言を行った!!
抗議先 日本マイクロソフト人事本部 西川昌邦
[email protected] 090-2541-1718
939 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 21:46:59.31 ID:STy3ELMD0
>>934 それ実装できたとして変数使わない意味ある?
940 :
デフォルトの名無しさん (ワッチョイ bd54-MTTD)
2016/05/19(木) 21:49:04.86 ID:STy3ELMD0
セッターゲッター的なのか?
それとも一意型みたいなのか?
941 :
デフォルトの名無しさん (ワッチョイ 3ec0-xpBm)
2016/05/19(木) 22:05:29.27 ID:WYY/9sV80
errno
942 :
デフォルトの名無しさん (ワンミングク MMd0-P/BW)
2016/05/19(木) 22:22:12.59 ID:BWP2yuCgM
とんちか何かかな?
943 :
デフォルトの名無しさん (ブーイモ MM31-MTTD)
2016/05/19(木) 22:39:24.47 ID:TLDkaexbM
>>941 それ真似るにはスレッド変数使わないといけないし、c++erは手本とすべきじゃないだろ
944 :
デフォルトの名無しさん (ワッチョイ f063-MTTD)
2016/05/19(木) 23:07:06.91 ID:A0YFV+4B0
>>930 「変数を非グローバルの名前空間スコープに置けばいいというわけではない」という
>>887の主張に対して突然クラススコープの話を持ち出したからだが
945 :
デフォルトの名無しさん (ワッチョイ f063-MTTD)
2016/05/19(木) 23:08:20.67 ID:A0YFV+4B0
>>937 へー、ところでその普通のM_PIって何?
946 :
デフォルトの名無しさん (ササクッテロ Spbd-7Gsa)
2016/05/19(木) 23:10:33.47 ID:MvX4mrmep
へ?流石にネタかえ?
math.h使ったことあらず?
947 :
デフォルトの名無しさん (ワッチョイ f063-MTTD)
2016/05/19(木) 23:12:52.89 ID:A0YFV+4B0
>>932 そのstaticには何か意味があるのか
948 :
デフォルトの名無しさん (ワッチョイ 9030-xKv1)
2016/05/19(木) 23:18:50.48 ID:W0ctNLpa0
>>946 その反応は、「printfを知らない」レベルじゃないと使えないと思うぞ
949 :
デフォルトの名無しさん (ワッチョイ 9102-xKv1)
2016/05/19(木) 23:19:22.62 ID:CdsyDRqW0
>>946 >>945は喧嘩腰でしか会話できない人だからほっといたほうがいいけど
要するにM_PIは標準化されていなくて環境によっては定義されているとは限らないからつつかれている
950 :
デフォルトの名無しさん (ワッチョイ 917b-P/BW)
2016/05/19(木) 23:20:03.66 ID:shk5tFZP0
>>944 だからそれをグローバルというならpublicなクラススコープに置いた 静的変数もグローバルだろって話だよ。
外から見たらusing namespace出来るかどうかの違いしかないぞ
951 :
デフォルトの名無しさん (ササクッテロ Spbd-7Gsa)
2016/05/19(木) 23:31:32.11 ID:MvX4mrmep
>>949 そうなんか
よく分からんけど、俺が今まで触ったPCではどれも使えたし
だいたいの環境なら使えるやろ
そんなマイナー環境使ってる奴のことなんてシラネw
952 :
デフォルトの名無しさん (ワッチョイ f063-MTTD)
2016/05/19(木) 23:50:33.37 ID:A0YFV+4B0
Visual C++やICCがマイナーとは恐れ入る
gccですら規格に違反しないよう
-std=c11の時はM_PIが使えないようにしているというのに
953 :
デフォルトの名無しさん (ワッチョイ a759-MTTD)
2016/05/20(金) 00:08:19.61 ID:B/K1dZEm0
何かすごいカオスっぷりやなー。
954 :
デフォルトの名無しさん (ワッチョイ 7b42-xKv1)
2016/05/20(金) 00:15:33.17 ID:DZyHkwIp0
使えないなら自分で定義すれば良いだけなんでは?
955 :
デフォルトの名無しさん (ワッチョイ e6cc-MTTD)
2016/05/20(金) 00:17:43.17 ID:Z0iObOq70
計算機のPIボタンからおぼぼ
956 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/20(金) 01:04:20.91 ID:iM9BKZPP0
>>952 規格厨の心の闇は深いな
Visual C++(_USE_MATH_DEFINESが必要だが)やg++では普通に使えるけどな
ここはC++スレなんだぞ
ICCはシラネ
957 :
デフォルトの名無しさん (ワッチョイ f063-MTTD)
2016/05/20(金) 07:21:21.24 ID:e1TBDqG+0
>>956 ICCも_USE_MATH_DEFINESで使える筈。
Visual C++はC++規格1.4p2に反しないよう_USE_MATH_DEFINESが必要にしてあると記憶していたが
確かにgccの-std=c++14の時の挙動が気になるな。
C++の規格上許されるの?
958 :
957 (オッペケ Srbd-MTTD)
2016/05/20(金) 08:08:40.81 ID:yY8TibFar
ちょっと考えたがVisual C++の実装が残念なだけで
C++では規格に反しない実装が可能なんだな。なるほど勉強になった。
だが処理系によって_USE_MATH_DEFINESが必要なものを「普通」と言って他人にすすめているという発想には及ばなかった失礼
959 :
デフォルトの名無しさん (ワンミングク MMd0-MTTD)
2016/05/20(金) 08:14:16.19 ID:FD2q0K+3M
boost::math::costants::pi<double>();
960 :
デフォルトの名無しさん (ワンミングク MMd0-P/BW)
2016/05/20(金) 13:01:42.59 ID:GBvYzkJRM
人を下に見ないと心の平穏保てない可哀想な人がいるね
961 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/20(金) 13:09:57.94 ID:88qDJ/vwd
なんか書こうと思ったがやめた
962 :
デフォルトの名無しさん (オイコラミネオ MM14-MTTD)
2016/05/20(金) 13:41:58.30 ID:EAAu5NmTM
963 :
デフォルトの名無しさん (ワッチョイ 7bf8-xFql)
2016/05/20(金) 13:45:22.04 ID:jCV1qcCq0
>>962 #define PI boost::math::costants::pi<double>()
964 :
デフォルトの名無しさん (アウアウ Sab5-MTTD)
2016/05/20(金) 15:24:20.36 ID:adOvMsP+a
どうでもいいけどなんで#define使うの?
965 :
デフォルトの名無しさん (ワッチョイ 7bf8-xFql)
2016/05/20(金) 15:34:32.24 ID:jCV1qcCq0
const auto PI =
と書くより5バイトくらい短いから
966 :
デフォルトの名無しさん (ワッチョイ bcbf-7Gsa)
2016/05/20(金) 17:24:15.12 ID:91VA6wxC0
tan(-1)
967 :
デフォルトの名無しさん (ワッチョイ 415b-xKv1)
2016/05/20(金) 19:26:27.89 ID:yqNTwCqH0
acos(0)*2
968 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 19:36:46.02 ID:gU7EupTq0
質問です。
内部クラスから外側クラスのインスタンスメンバを参照したいのですが、
ググッた感じでは参照を渡すしかないっぽいのですが、これってマジですか?
マジなら、面倒なので内部クラスのstaticに入れてしまおうかとも思っているのですが、これってありですか?
(外部クラスが生成される度に内部クラスが別々に生成されて大丈夫なのか、
それとも内部クラスとして書いても外にフラットに書いても同じで、クラスで唯一のstatic変数となってバグりますか?)
或いはこの場合に一般的に使われるような手法はありますか?
参考コード:動かしていないので雰囲気だけ確認してください。
class OuterClass {
class InnerClass {
static OuterClass* parent; // <- これあり?それとも OuterClassを複数作成しても唯一になって駄目?
void method_cpp0(int score){
parent->score += score; // <- こう使うつもり
}
void method_cpp1(int score, OuterClass* p) { // <- こうじゃないと駄目?
p->score += score;
}
void method_javascript(int s){
score += s; // JavaScriptはこれができる。これができればうれしい。
}
void method_java(int score){
OuterClass.this.score += score; // Java はこれができるらしい。これでもいい。
}
};
int score;
};
969 :
デフォルトの名無しさん (ワッチョイ 1c7b-dmih)
2016/05/20(金) 19:51:35.59 ID:iM9BKZPP0
>>967 あ゛ー
いいから普通にM_PI使え
規格原理主義者のたわごとなど完全無視しろ
もしクソバカ環境でコンパイルエラーが起きたら
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
とかで如何なる問題も発生しない
970 :
デフォルトの名無しさん (ワッチョイ bd6c-WkY+)
2016/05/20(金) 19:54:05.85 ID:BayA8c/P0
>>968 ようわからんけど
別にstaticにせんでも
const OuterClass&をinnerClassにもたせてコンストラクタで指定すれば良い気がする
971 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 20:29:11.61 ID:gU7EupTq0
>>970 コンストラクタでやるという記述もググッた時に見つかったのですが、
今回はInnerClassを一つではなく配列として持つので、メモリをケチろうかと。
コンストラクタで渡した方が確かに記述は綺麗なのですが。
とはいえ、改めて「プログラミング言語C++」を確認しても、
クラス継承の話は多くてもクラス内包の話がほぼ無いので、
一般的にはコンストラクタで「メンバ変数」として渡すのでしょうか。確かにこれだと確実です。
記述的にはコンストラクタ内でstaticに対して上書きしまくってもいいのですが、
これができるのか?というのは若干不安ですし。
972 :
デフォルトの名無しさん (ワッチョイ bd6c-WkY+)
2016/05/20(金) 20:43:41.93 ID:BayA8c/P0
OuterClassのインスタンスが一つならそれでもいいけど
それならそれで他に良い設計がありそうな気もする
それこそシングルトンだとか
973 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 20:56:18.27 ID:gU7EupTq0
つまりstaticはどこに書いてあるクラスでも1つかもしれないと。
OuterClassは当面は1つで済みますが、今後複数化する可能性もあるので、シングルトンは駄目です。
余り真面目にC++やってなかったのですが、
内部クラスから外部クラスが階層アクセスできないのは、C++の仕様がちょっと古い気がします。
後発のJavaやJavaScriptは最初から出来るので。
ちなみに参考コード
class OuterClass {
class InnerClass { // 省略
};
int score;
vector<InnerClass> nodes;
};
974 :
デフォルトの名無しさん (スプー Sd28-MTTD)
2016/05/20(金) 21:02:34.05 ID:88qDJ/vwd
>>971 Inner - Outer の関係にする必要性はどこにあるの?
975 :
デフォルトの名無しさん (ブーイモ MM31-MTTD)
2016/05/20(金) 21:12:02.35 ID:icw8VvxgM
>>968 ・staticメンバはプログラムを通して一つ
・メモリをケチりたくてmethod_cpp1が可能ならそれがよいだろう
・JavaやJavaScriptでも結局は暗黙的にOuterClassへの参照を持つことになるのでInnerClassインスタンスごとにメモリを使うことになる
・InnerClassとOuterClassとの間にメモリ配置上の制約があるなら、ほかの手も考えられるが、配列で持つとのことなので恐らくダメだろう
・古いというのはわからなくもないが、後発の言語が暗黙的にやるコストについて意識しない人がいるのならあながち悪くはないのかもしれない
976 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/20(金) 21:20:44.60 ID:Czf9pjzL0
>>969 いんや規格は重要だ
まず動くことが至上命題ではあるがそこ履き違えると底辺コーダーになっちまうぞ
977 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/20(金) 21:34:03.42 ID:Czf9pjzL0
なんだP君だったのか…
>>968 メモリケチりたい状況で外の「インスタンス」にアクセスしたいってのは無理がある気がするな
俺ならOuterとInnerとは別に、もう一個クラス作ってそいつに両方に依存した処理やらせるかな
978 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/20(金) 21:38:07.10 ID:Czf9pjzL0
>>975を良く見てなかったが、どうやら余計なレスだったようだ
自分もmethod_cpp1の適宜渡す方法に同意します
979 :
デフォルトの名無しさん (ブーイモ MMe9-MTTD)
2016/05/20(金) 21:56:53.90 ID:Dz9bHtQOM
適宜渡すとして記述が煩雑になるのが問題のようだから、それを緩和する手は色々ありそうな気はする
980 :
デフォルトの名無しさん (ブーイモ MMe9-MTTD)
2016/05/20(金) 21:57:43.59 ID:Dz9bHtQOM
あれID変わった
981 :
デフォルトの名無しさん (ワッチョイ fd10-MJjN)
2016/05/20(金) 22:09:45.76 ID:RCBW+7XV0
>>932 M_PIが規格で定義されてるかとかいう議論も意味あるかもしれないけど、
そもそも、円周率はたとえが悪いだけなんじゃないの?
重力加速度とか万有引力定数とかならどうするのがベスト?(もちろん場合によるだろうが)
982 :
デフォルトの名無しさん (ワッチョイ bd54-UmRV)
2016/05/20(金) 22:23:37.08 ID:Czf9pjzL0
>>979 ありそうな気はするが技巧的な方法しか思いつかないな
InnerInnerを作り、今のInnerの機能を移動し、Innerにはコンテナと親の参照を持たせる
そしてInnerInnerのmethod_cpp1のようなメソッドをInnerが委譲
これじゃ親から見た場合に多少はマシになるって程度で、コードも設計も汚いな
983 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 22:43:44.89 ID:gU7EupTq0
>>974 いや特にありません。そもそも非オブジェクト指向でも当然組めます。
ただ、色々試した結果、オブジェクト指向に慣れてくると、
Java的な「それ刻みすぎじゃねーの?」と思えるような所まで刻んだ方が
結果的に見やすかったり、後々融通が利くことが何となく分かってきました。
なので、今後はそうしようかと試しています。
>>975 詳細にありがとうございます。やはりstaticでは駄目ですか。
method_cpp1は今回は可能ですが、記述の抽象度が混ざるので出来ればクラス分けしたかったのです。
JavaやJavaScriptでもメモリ使用量が少ないわけではないのはその通りですが、
内部クラスからは外部クラスを参照するのはかなり普通のことなので、
これは言語として対応して欲しかったところです。今まで拡張されなかったのが不思議なくらいです。
これはコンパイラ側だけで完全に対応でき、実行時の追加コストはありません。
(不要ならコンパイル時点で外側クラスポインタの確保を止めることが出来る)
申し訳ありませんが、メモリ配置上の制約というのは何のことか分かりません。
984 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 22:44:35.94 ID:gU7EupTq0
ちなみに、やろうとしていることに近く、イメージ的に分かりやすいのは、「ライフゲームをオブジェクト指向で」です。
参考コード、非オブジェクト指向
bool map[64][64];
bool map_next[64][64];
for (int i=0;i<64;i++)
for (int j=0;j<64;j++)
map_next[i][j] = life_exe(i,j);
参考コード、オブジェクト指向
class LifeGame {
class Dot {
int x,
int y;
void life_exe(){} // ここで外側の map, map_new に直接アクセスして更新させたい。
};
bool map[64][64];
bool map_next[64][64];
};
実際にやろうとしていることは、正規表現の探索に近いです。
ライフゲームのように外側変数が時系列で変化するものではないため、
探索途中経過(Dot)をオブジェクトとして持ち、
最初から各オブジェクトに終わりまで探索(life_exe)させる事が出来ます。
とはいえ、やはりメリットは大してありませんが。
985 :
デフォルトの名無しさん (ワッチョイ bcbf-7Gsa)
2016/05/20(金) 22:45:59.15 ID:91VA6wxC0
>>981 ライブラリの数値を使うか自分で数値を定義しておくかな…
piとかeは数学関数で計算できるだけマシってことね
M_PI使わない理由として俺は十分納得できるかな
986 :
デフォルトの名無しさん (ワッチョイ caa6-xKv1)
2016/05/20(金) 22:51:15.37 ID:RvnBIaae0
>>983 オブジェクト指向であることとか「刻む」ことの意義と
インナークラスにすることがあまり結びつかないなあ。
内側のクラスの存在が外側から完全に隠れる以外の効果あったっけ?
987 :
デフォルトの名無しさん (ワッチョイ bd6c-dqc0)
2016/05/20(金) 22:53:44.87 ID:BayA8c/P0
内側クラスは外側クラスのプライベートにアクセスできる
988 :
デフォルトの名無しさん (ブーイモ MM28-MTTD)
2016/05/20(金) 22:56:32.97 ID:4DucW+JdM
>>982 マクロやstaticメンバを使った汚い手から一時的な処理用のクラスを作るなどまで想像してましたが、どのみち一手間かかるので必要性次第でしょうね(Innerのメソッドが多くてそうでもしないと…とか)
結局それほどケチる必要がなくてコンストラクタで渡すので十分な予感
本当にポインタ1個分が問題になるような細かいInnerClassを多数作るようなケースなら、このアドレスの範囲にあるInnerのオブジェクトはどのOuterに対応する、という表が作れると検索時間と引き替えにメモリを節約できたり
989 :
デフォルトの名無しさん (ブーイモ MM28-MTTD)
2016/05/20(金) 23:07:25.77 ID:4DucW+JdM
>>983 最近追加されたラムダですらどのようにキャプチャするかを細かく指定しなければならない言語だということを理解した方がいいと思う
今後そういう機能が追加されるかどうかはしらないけど、されたらいいね
990 :
デフォルトの名無しさん (ワッチョイ bc42-MTTD)
2016/05/20(金) 23:17:26.67 ID:soKi6pqK0
innerクラスなんて完全なアンチパターンだろ
馬鹿じゃねーの
991 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 23:24:48.47 ID:gU7EupTq0
>>986 インナーにするのは、DotはLifeGameでしか使わないからです。(他から見える必要がない)
オブジェクト指向にするのは、多分制御が簡単になりそうだからなのと、
その際に記述が抽象階層で分離でき、見やすくなると予想されるからです。
もっと良い例がありました。「文書内の不完全マッチによる最有力候補探索」です。
これはほぼやりたいことと同じです。
例えばテキスト文書があったとして、「あいうえおかきくけこ」を探索するとします。
ここで、そのまま「あいうえおかきくけこ」があれば100点、それを示して終わりです。
これがない場合、欠け方それぞれで得点付けし、とにかく一番得点が高い候補を一つ出します。
(例えば「あ」がないのなら-20点とか、「う」が抜けているのなら-10点とか)
実際は多分100〜200字同士のマッチングと等価で、完全一致は期待できないため、
Dotに分枝の作成まで含めてlife_exeさせます。
結果、LifeGameからは「やっとけ。」だけで済み、詳細な実行ルーチンはDot側に集約されます。
といってもこれは分離されるだけで、どちらに書くかの違いだけなのですが、
それでも後々効いてきますので、Dot側に集約できる部分は集約しておきたいのです。
Dotは分枝の作成時に自分自身からforkする感じで、たぶんかなり増えます。
ただし親は一つなので、ここの部分は勿体ないかな、という感じでした。
(問題になるほど増えないとは思います)
life_exe内には親のmapへのアクセスは大量に存在しますが、
life_exeはDot内で自走するので、引数として親ポインタを渡すことは出来ません。
従って、親ポインタはコンストラクタでメンバ変数として確保することになります。
コンストラクタで親ポインタを渡すのは、記述的には全く問題ないです。
(最初にもらった親ポインタを大事に抱えて再帰しまくることも出来ますが、、、)
992 :
デフォルトの名無しさん (ワッチョイ b0ab-/fHo)
2016/05/20(金) 23:24:55.51 ID:G62tMzQY0
馬鹿じゃねーよ
おまえ以外は
993 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/20(金) 23:52:28.35 ID:gU7EupTq0
>>989 > 最近追加されたラムダですら
見てみましたが、確かにこのラムダはちょっと見にくいですし、使いにくいですね。
元はといえばC++には関数内関数が無い為、レキシカルスコープ(※)を導入できず、
ラムダのうまみも少し欠けている気がします。
(※一つずつ上の階層を探して名前が一致したらそれと見なす)
g++では既に拡張が行われていると聞きましたが、先に関数内関数が欲しかったですね。
とはいえ、回答して頂いた皆様、ありがとうございました。
994 :
デフォルトの名無しさん (ブーイモ MM28-MTTD)
2016/05/21(土) 00:00:28.24 ID:z244ST7/M
>>993 使いにくいのにはそれなりの理由があって、それを理解しましょうねという話
その上で適切な言語を選びましょう
995 :
デフォルトの名無しさん (ワッチョイ 9102-xKv1)
2016/05/21(土) 00:01:00.93 ID:EJBeUkkD0
動けば良いんだよ
996 :
デフォルトの名無しさん (ワッチョイ caa6-xKv1)
2016/05/21(土) 00:27:26.30 ID:jGVAnHGn0
>>993 よくわかんないけど、名前が一致した「それ」は型が揃っているのかな?
一致してる度合いに微妙に差があるのでは?
997 :
デフォルトの名無しさん (ワッチョイ bc7b-xKv1)
2016/05/21(土) 00:56:40.25 ID:Uqmc4lbY0
>>981 宇宙物理のシミュレーションだと万有引力定数が1になるような単位系で計算する
998 :
デフォルトの名無しさん (ワッチョイ caa6-xKv1)
2016/05/21(土) 01:08:07.17 ID:jGVAnHGn0
外部からはOuter::Innerはautoでしか受けられない型か
999 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/21(土) 01:23:16.26 ID:HBQ7d37R0
1000 :
デフォルトの名無しさん (ワッチョイ 7b5b-xKv1)
2016/05/21(土) 01:29:43.83 ID:HBQ7d37R0
>>996 自分がイメージしたのはJavaScriptで、あの言語はnamespaceがないので関数内関数がデフォ、
そして型がないので名前さえ一致すればそこで決まりですね。
ラムダで数階層上の変数を掴みに行くこともよくあります。
C++はnamespaceで細かく切れということなのでしょうが、
やはりユーザの意志で階層が切れないのは使いにくいですね。
C++のインナークラスはメリットがないといえばそうですが、JavaScriptだとインナークラスがデフォです。
(外に見せる必要がなければインナークラス)
これに関しては「余分な物は見せない」というJavaScriptの方がプログラミングとしては正しいと思われます。
ただ、ラムダはGCヒープならほぼ問題ありませんが、スタックが基本のC/C++だと実装も難しいはずで、
C++のラムダは分かりやすくはないけど妥当な仕様の気もしますね。
現実的にはヒープポインタを値キャプチャでラムダでしょうし、この仕様で実害はありません。
スタック変数をラムダで参照キャプチャは使い方として不自然ですし。
それでもやりたければ出来るところがC++っぽいですが。
1001 :
1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 48日 1時間 7分 19秒
1002 :
1002
Over 1000 Thread