C++相談室 part128 [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2016/11/27(日) 00:03:49.04ID:Hj6igpz/!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ:
C++相談室 part127 http://echo.2ch.net/test/read.cgi/tech/1474636291/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.100【環境依存OK】 http://echo.2ch.net/test/read.cgi/tech/1478440682/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
■ shared_ptr で 標準ライブラリのFILE構造体ポインタをラップしよう
class FILE_Ptr : public shared_ptr<FILE> {
struct FILEDeleleter {
void operator() (FILE* fp) const { if (fp != NULL) { fclose(fp); }}
};
public:
FILE_Ptr(FILE* fp = NULL) : shared_ptr<FILE>(fp, FILEDeleleter()) {}
operator FILE* () { return get(); }
template<typename T> bool operator == (const T& obj) const { return get() == reinterpret_cast<FILE*>(obj); }
template<typename T> bool operator != (const T& obj) const { return get() != reinterpret_cast<FILE*>(obj); }
};
0002デフォルトの名無しさん
2016/11/27(日) 00:28:48.17ID:1WWISKCd0003デフォルトの名無しさん
2016/11/27(日) 00:53:39.36ID:oNxTNf5q正気の沙汰ではない
0004デフォルトの名無しさん
2016/11/27(日) 00:59:26.69ID:wer2Kop40005デフォルトの名無しさん
2016/11/27(日) 00:59:39.65ID:wlJLbi6+環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
---- テンプレ ここまで ----
0006デフォルトの名無しさん
2016/11/27(日) 01:08:13.74ID:42UX/YwIモロにスタンダードで常に進化を続けているというのにな
0007デフォルトの名無しさん
2016/11/27(日) 01:18:02.64ID:0maVDSwR自社でSTLやboostより素晴らしいのを作っているじゃないか
日本企業のIT技術力は圧倒的世界一で、3流の外国製のライブラリ等は使用に耐えないって企業が多いから
そうなるんだろ
0008デフォルトの名無しさん
2016/11/27(日) 01:19:33.70ID:MAcCGYLn標準ライブラリのstd::vectorはよく使う
0009デフォルトの名無しさん
2016/11/27(日) 01:43:32.38ID:wer2Kop40010デフォルトの名無しさん
2016/11/27(日) 02:11:39.36ID:4hBpEO9s本当に速度が欲しい場合には選ばん。
0011デフォルトの名無しさん
2016/11/27(日) 02:16:56.70ID:0maVDSwR本当に速度が欲しい場合はコンテナを自作しているんだろな
0012デフォルトの名無しさん
2016/11/27(日) 02:47:34.77ID:wer2Kop4どうせそういった研究に取り組んだこともなく口だけなんだろうな
0013デフォルトの名無しさん
2016/11/27(日) 03:11:56.31ID:Hj6igpz/私は圧倒的にスキルが不足しているから、要素をコピースワップするコストはついついshared_ptr使って対処してしまう。コンテナを自作できない無能な自分が嫌になるよ。
0014デフォルトの名無しさん
2016/11/27(日) 03:21:22.71ID:411Nbo29極端な話、vectorで毎回先頭に挿入するような使い方してたら遅くなるよね
どういうのか把握して適切なコンテナ選べるならわざわざ自作する必要はないかと
0015デフォルトの名無しさん
2016/11/27(日) 03:30:23.93ID:Hj6igpz/「ぼくのかんがえたさいきょうのこんてな」を自作する精神力がまだまだ足りないようだ。反省。
0016デフォルトの名無しさん
2016/11/27(日) 03:33:36.54ID:wer2Kop40017デフォルトの名無しさん
2016/11/27(日) 06:48:20.63ID:pUctI5IC0018デフォルトの名無しさん
2016/11/27(日) 09:24:27.84ID:SqUFXM7zvectorはただのガワなんだから、速度が必要ならallocatorだけ自作すりゃいいだろ
0019デフォルトの名無しさん
2016/11/27(日) 09:29:56.70ID:WW/pNH6a0020デフォルトの名無しさん
2016/11/27(日) 09:53:11.77ID:Hj6igpz/私は任天堂の倒し方知らないので、こういう人たちを心の底から尊敬する。
0021デフォルトの名無しさん
2016/11/27(日) 10:42:14.10ID:P/uIEXU4なぜそこまでSTLを否定したいのかよこ分からないなあ。
多くのケースで多くの人が使うのに必要十分な程度の機能、性能は持ってる訳だし、標準ライブラリとしては妥当な仕様かと思う。
これで不足な場合だけ自作のコンテナなりを考えればいいだけでしょ。
0022デフォルトの名無しさん
2016/11/27(日) 10:58:23.07ID:Uyh6ikI3何をいってるのか、意味不
0023デフォルトの名無しさん
2016/11/27(日) 11:06:06.35ID:l9GcbBcF「標準仕様書中の表現として、STLあるいはstandard template libraryなどという言葉は一回も使用されていない」
って言う。
厳格にこの言いつけを守ってる人がいるんだよ…
0024デフォルトの名無しさん
2016/11/27(日) 11:26:05.74ID:Hj6igpz/0025デフォルトの名無しさん
2016/11/27(日) 11:37:32.43ID:zdOfPVrjSTLという単語をみると同じような気持ちになるが
老人に新しいことを覚えさせるのが難しいと知っている俺は
そしらぬ顔で静観することにしている
0026デフォルトの名無しさん
2016/11/27(日) 11:39:37.56ID:wer2Kop4また古代からタイムスリップしてきた人ですか?
0027デフォルトの名無しさん
2016/11/27(日) 11:44:52.34ID:qE9zLQzgそれ、優れたプログラマじゃない可能性がたっぷりある。
0028デフォルトの名無しさん
2016/11/27(日) 11:48:02.44ID:MAcCGYLnテンプレート特殊化を書いてやらないと解決出来ないときもある。
Visual C++の標準ライブラリが最近見直したら一部の処理が何十倍も速くなったと言っているくらいだ
0029デフォルトの名無しさん
2016/11/27(日) 11:56:08.91ID:wer2Kop4規格書に事細かに記されているわけではない
しかしそれはコンテナのような昔からあって仕様がシンプルなクラスのことでは無いだろう
0030デフォルトの名無しさん
2016/11/27(日) 12:10:55.75ID:Hj6igpz/マイクロソフトの連中は、このスレでSTLを否定する優秀な人のような英断ができず、いまだにSTLの保守をやってる。
このスレでSTLを否定する優秀な人を一本釣りしてマイクロソフトにスカウトすればいいのに、マイクロソフトは見る目がないな。
What's New for Visual C++ in Visual Studio 2017 RC
https://docs.microsoft.com/en-us/cpp/top/what-s-new-for-visual-cpp-in-visual-studio
0031デフォルトの名無しさん
2016/11/27(日) 12:12:18.35ID:MAcCGYLn>規格書に事細かに記されているわけではない
突然関係ないことを言い出してどうした?
コンテナー自作する必要が有ったと主張する人に対してその必要性が全く理解できないという人がいたので
可能性はを示唆しただけだが。
0032デフォルトの名無しさん
2016/11/27(日) 12:14:02.11ID:LAFeCFqG0033デフォルトの名無しさん
2016/11/27(日) 12:17:16.89ID:Hj6igpz/STLで十分と思ってしまうレベルの低い私は、己の無能さで嫌悪感に陥りそうだ。
0034デフォルトの名無しさん
2016/11/27(日) 12:17:28.71ID:wer2Kop4C++のベンダーをやっている以上保守は義務だろ
MS独自のMFCはあまりにもゴミだが
CMapを使おうと思ったらあまりにも低機能すぎてキーボード破壊しそうになった
0035デフォルトの名無しさん
2016/11/27(日) 12:28:42.78ID:plVb52Pgadjacent_differenceの悪口はよせ
0036デフォルトの名無しさん
2016/11/27(日) 12:41:27.00ID:Hj6igpz/ついつい、upper_bound()やlower_bound() を使ってしまう。
STLで事足りると思ってしまう自己暗示からどうしても抜け出せない。
このスレの天才プログラマーのようにSTLを捨てて「ぼくのかんがえたさいきょうのこんてな」に行くべきなのだが。
0037デフォルトの名無しさん
2016/11/27(日) 13:18:21.08ID:+eKpaGRFプログラムの用途に合った特殊なコンテナってことなら
自作する意味はあるかもしれない
例えば要素を削除するときに前詰めしないコンテナ、とか
そのコンテナには、どこが「空き」になっているか、別途把握できるしくみが
必要だけど、それはそういう風に実装すればよいだけだし
要は、連続的なメモリに確保されるけど、歯抜けになることが許されるコンテナ
ただしそんなに速くならないだろうね
0038デフォルトの名無しさん
2016/11/27(日) 13:55:49.85ID:eIL19TgX自分で書いておきながらワッチョイ付けられないわ
ウンコード貼り付けるわ
0039デフォルトの名無しさん
2016/11/27(日) 14:11:24.54ID:LAFeCFqGむしろequal_rangeしか使わない
0040デフォルトの名無しさん
2016/11/27(日) 14:12:23.15ID:Hj6igpz/全くその通り。無能。恥を知れって感じ。
0041デフォルトの名無しさん
2016/11/27(日) 14:50:05.59ID:w634zOe40042デフォルトの名無しさん
2016/11/27(日) 15:08:20.29ID:P/uIEXU4STLで十分と思うことは、別にレベルが低いとはならない。
STLで十分と思うことがレベルが低いというのは、レベルが低いと思う。
自分を卑下する書き込みをしつつ、高尚なこと考えている俺カッケーと酔いしれてないか?
0043デフォルトの名無しさん
2016/11/27(日) 15:26:29.03ID:BLqqs7230044デフォルトの名無しさん
2016/11/27(日) 15:55:56.37ID:3Qbc/l9nド素人の背伸びなんだからほっといてやれよw
下手につつくと居付いちゃうぞ
0045デフォルトの名無しさん
2016/11/27(日) 15:56:46.93ID:SqUFXM7zそれってlistじゃないの?
0046デフォルトの名無しさん
2016/11/27(日) 15:57:37.51ID:SqUFXM7z失礼連続前提ね
0047デフォルトの名無しさん
2016/11/27(日) 16:32:55.67ID:42UX/YwI0048デフォルトの名無しさん
2016/11/27(日) 16:49:01.91ID:2ZVZJ+KMお前さんだけじゃねw+
0049デフォルトの名無しさん
2016/11/27(日) 17:08:21.71ID:LAFeCFqG今となってはちょっと古びた感じはするね。
<algorithm>のごちゃついた様を見るとそういうふうに思う。
0050デフォルトの名無しさん
2016/11/27(日) 18:02:33.78ID:Hj6igpz/コンテナ自作派に憧れるていを取りつつコンテナ自作派をバカにしてただけだ。
「任天堂の倒し方知ってる」とか「ぼくのかんがえたさいきょうのこんてな」とか例えてる時点で
コンテナ自作派をバカにしてると君らに察してもらえるだろうと思ってたのだが、
本当にコンテナ自作派に憧れているとストレートに解釈した人が出てきて楽しかったわ。
>>37
「空き」の定義は開発者が決めなければならない。
コンテナに突っ込むクラスに「空き」フラグを扱うメンバ変数を追加すればSTLコンテナ利用で解決することを
わざわざ車輪の再発明でコンテナまで自作する人をおだててバカにするのは実に楽しい。
0051デフォルトの名無しさん
2016/11/27(日) 18:11:22.15ID:MAcCGYLnこれは思った。気付かない奴はアスペ
0052デフォルトの名無しさん
2016/11/27(日) 19:37:37.43ID:YEwu7XTVあと、だからこのスレよく荒れてるんだなぁと納得した。
0053デフォルトの名無しさん
2016/11/27(日) 19:49:28.80ID:4JtqQJ1Xゲーム制作会社とかではしているところはないのかな
>>1 はなんでshared_ptrのFILE deleterを張っているんだ
C++ならFILEじゃなくfstreamだろって気がするが
0054デフォルトの名無しさん
2016/11/27(日) 20:14:35.31ID:Hj6igpz/あまりにも ID:Hj6igpz/ が無能すぎて fstream を使いこなせないからだよ。みなまで言わせんな恥ずかしい。
アホな ID:Hj6igpz/ は>>1 のラッパークラス FILE_Ptr を使って以下のように稚拙なコードを書く傾向がある。
こんなことやってるからいつまでたっても ostream系を使いこなすスキルが育たない。ID:Hj6igpz/ は C++プログラマに向いてないよ。
{
FILE_Ptr fp = fopen("foo.log", "w");
if (fp != NULL) {
fprintf(fp, "1hello world\n");
fputs("2howdy world\n", fp);
fwrite("3hello world\n", 13, 1, fp);
}
}
0055デフォルトの名無しさん
2016/11/27(日) 20:42:29.48ID:pUctI5IC0056デフォルトの名無しさん
2016/11/27(日) 20:47:34.07ID:P/uIEXU4お前さんの真意とやらはどうでもいいから、面倒くさいことせずに、初めからもっと直接的に意味のある議論をしてほしい。
ここまでの流れで唯一ためになったのは、>>52のレスにあった「諄い」という漢字を知ったということだけだ。
0057デフォルトの名無しさん
2016/11/27(日) 20:49:47.24ID:P/uIEXU4ゲーム会社のことはよく知らないけど、そういうのはアロケータの自作でもしてるのかな。
0058デフォルトの名無しさん
2016/11/27(日) 21:04:15.44ID:zEm283RNコンテナを自作するのは普通らしい
0059デフォルトの名無しさん
2016/11/27(日) 21:13:33.19ID:kJvliJ+fそれ以前に、FILE"Deleleter"ってわざとしているのか
それともdeleteのスペル知らないのか
deleteはC++のキーワードだよな
operator FILE* () はcons抜けだし
0060デフォルトの名無しさん
2016/11/27(日) 21:46:20.25ID:Hj6igpz/何しろ無能だからこんなもんだろう。生温かく見守ってやれ。
0061デフォルトの名無しさん
2016/11/27(日) 21:54:20.66ID:IYfuOepr有名なのだとEASTLでオープンソース化されてる
ttp://i-saint.hatenablog.com/entry/20101012/1286822888
ttps://github.com/electronicarts/EASTL
0062デフォルトの名無しさん
2016/11/27(日) 21:59:03.95ID:WW/pNH6a僕の古典的PCしかもノートでも驚くほど速い。
意外と問題にならない程度の速度を持っているのではないか。
0063デフォルトの名無しさん
2016/11/27(日) 22:00:05.48ID:Hj6igpz/勉強する良い機会になった。ありがとう。
https://ja.wikipedia.org/wiki/Cons
0064デフォルトの名無しさん
2016/11/28(月) 00:27:42.27ID:nFYh94sG0065デフォルトの名無しさん
2016/11/28(月) 13:41:28.68ID:VFe8unWCstlに入れるとき用にアロケータだけ自作したことはあるな(コンテナの型自体変わってしまうので不便だけど
EASTLは知らんかった、家帰ったら使ってみよう
0066デフォルトの名無しさん
2016/11/28(月) 17:31:28.84ID:w/GpYaDfdocディレクトリの文書でEAの中の人がSTLについて熱く語っているのが好感を持てた。
0067デフォルトの名無しさん
2016/11/28(月) 21:08:56.39ID:w/GpYaDf以下は、そのベンチマークプログラム EASTLBenchmarks.exeの標準出力結果
****************************************************************************************
EASTL Benchmark test results
****************************************************************************************
EASTL version: 3.04.00
Platform: Windows on X86
Compiler: Microsoft Visual C++ compiler, version 1910
Allocator: PPMalloc::GeneralAllocator. Thread safety enabled.
Build: Full optimization. Inlining enabled.
Values are ticks and time to complete tests; smaller values are better.
Test VC++ Dinkumware EASTL Ratio Difference?
---------------------------------------------------------------------------------------------------------------------
algorithm/adj_find/vector<TestObject> | 699814 699.8 us | 913513 913.5 us | 0.77 -
algorithm/copy/vector<LargePOD> | 270367 270.4 us | 269001 269.0 us | 1.01
algorithm/copy/vector<uint32_t> | 8193 8.2 us | 5462 5.5 us | 1.50 +
algorithm/copy_backward/vector<LargePOD> | 280267 280.3 us | 274463 274.5 us | 1.02
algorithm/copy_backward/vector<uint32_t> | 3072 3.1 us | 3414 3.4 us | 0.90
algorithm/count/vector<uint64_t> | 270367 270.4 us | 266271 266.3 us | 1.02
algorithm/equal_range/vector<uint64_t> | 10268141 10.3 ms | 22004184 22.0 ms | 0.47 -
0068デフォルトの名無しさん
2016/11/28(月) 21:12:50.29ID:w/GpYaDfvector<AutoRefCount>/erase | 2132212 2.1 ms | 2128798 2.1 ms | 1.00
vector<MovableType>/erase | 124073512 124.1 ms | 121713608 121.7 ms | 1.02
vector<MovableType>/reallocate | 2317236 2.3 ms | 2053355 2.1 ms | 1.13
vector<uint64>/erase | 11193260 11.2 ms | 11209646 11.2 ms | 1.00
vector<uint64>/insert | 9193159 9.2 ms | 9221835 9.2 ms | 1.00
vector<uint64>/iteration | 68957 69.0 us | 68957 69.0 us | 1.00
vector<uint64>/operator[] | 106166 106.2 us | 86368 86.4 us | 1.23
vector<uint64>/push_back | 2452078 2.5 ms | 1394507 1.4 ms | 1.76 +
vector<uint64>/sort | 8286133 8.3 ms | 7735840 7.7 ms | 1.07
sum | 871753892 871.8 ms | 768601049 768.6 ms | 1.13
****************************************************************************************
Time to complete all tests: 3.66 s.
RETURNCODE=0
0069デフォルトの名無しさん
2016/11/28(月) 21:22:19.20ID:w/GpYaDf188個あったテスト項目のうち、71個がEASTL有利、10個がSTL有利、107個が互角という結果になった。
以下に、参考までにEASTL有利だった項目を良い成績順にベスト10を記す。
algorithm/find_end/string/end | 600816 600.8 us | 25945 25.9 us | 23.16 +
deque<ValuePair>/push_back | 5864095 5.9 ms | 880058 880.1 us | 6.66 +
deque<ValuePair>/push_front | 6016006 6.0 ms | 1031627 1.0 ms | 5.83 +
deque<ValuePair>/operator[] | 4007712 4.0 ms | 693327 693.3 us | 5.78 +
hash_map<uint32_t, TestObject>/count | 264563 264.6 us | 56326 56.3 us | 4.70 +
deque<ValuePair>/find | 1577482 1.6 ms | 381996 382.0 us | 4.13 +
algorithm/find_end/string/middle | 579650 579.6 us | 148497 148.5 us | 3.90 +
string<char8_t>/operator[] | 133476 133.5 us | 34820 34.8 us | 3.83 +
string<char16_t>/operator[] | 133477 133.5 us | 35844 35.8 us | 3.72 +
algorithm/lex_cmp/schar[] | 137914 137.9 us | 39941 39.9 us | 3.45 +
0070デフォルトの名無しさん
2016/11/28(月) 21:47:38.32ID:w/GpYaDfalgorithm/search/string<char> | 934678 934.7 us | 285728 285.7 us | 3.27 +
algorithm/rotate/vector<TestObject large> | 161470 161.5 us | 58716 58.7 us | 2.75 +
hash_map<uint32_t, TestObject>/operator[] | 343762 343.8 us | 129722 129.7 us | 2.65 +
hash_map<uint32_t, TestObject>/find | 177172 177.2 us | 67250 67.3 us | 2.63 +
map<TestObject, uint32_t>/clear | 90805 90.8 us | 35162 35.2 us | 2.58 +
string<char16_t>/swap | 78515 78.5 us | 30723 30.7 us | 2.56 +
bitset<1500>/count | 14115750 14.1 ms | 6574833 6.6 ms | 2.15 +
hash_map<string, uint32_t>/count | 946967 947.0 us | 443784 443.8 us | 2.13 +
deque<ValuePair>/insert | 28192924 28.2 ms | 13517665 13.5 ms | 2.09 +
bitset<75>/count | 1468243 1.5 ms | 700838 700.8 us | 2.09 +
string<char16_t>/insert/pos,p | 1060986 1.1 ms | 513424 513.4 us | 2.07 +
hash_map<string, uint32_t>/find_as/char* | 947992 948.0 us | 461194 461.2 us | 2.06 +
string<char16_t>/find/p,pos,n | 66859496 66.9 ms | 33442208 33.4 ms | 2.00 +
bitset<75>/flip | 400772 400.8 us | 200727 200.7 us | 2.00 +
set<uint32_t>/count | 1733147 1.7 ms | 870841 870.8 us | 1.99 +
0071デフォルトの名無しさん
2016/11/28(月) 22:16:01.54ID:aUTLhSnb0072デフォルトの名無しさん
2016/11/28(月) 22:29:08.06ID:nxkexmqL自分でもやってみるけど知ってる人いたら教えて欲しい
0073デフォルトの名無しさん
2016/11/29(火) 03:57:58.52ID:JKfAWAo31.C++で書けばパフォーマンスが良くなる。なぜならパフォーマンスが良くなるまでC++書くからだ。
これを頭に叩き込め。
2.常にC++で書いておればそのうち他の要因でパフォーマンスが良くなるときが来る。
そのときに思い切りC++の手柄を主張しろ。
3.いいことはC++の手柄、悪いことは他の要因のせいにしろ。
4.データは都合のいいところだけ使え。グラフは切貼りしろ。
5.タイムラグを上手く使え。
6.「これがC++だ」と明言するな。定義を問われたら「C++の本を読め」と言っておけ。
7.批判されたら「お前はC++を理解してない」と言え。
8.いざとなったら定義を変えろ。オブジェクト指向に固執するな。
0074デフォルトの名無しさん
2016/11/29(火) 06:49:46.04ID:nF3eDud1LL(∞)パーサー生成すんの?
PEGパーサー生成するの?
LL法とPEG法wikipedia両方の実装例にこの名前のってあるんだけど
それとも両方とも実装してるの?
0075デフォルトの名無しさん
2016/11/29(火) 10:54:07.14ID:FnERKnae0076デフォルトの名無しさん
2016/11/29(火) 13:08:19.85ID:nF3eDud10077デフォルトの名無しさん
2016/11/29(火) 13:44:34.04ID:CM7LOPnjLLは実装で使うアルゴリズムのひとつ
PEGは仕様を定義する表現(言語)のひとつ
で対立・排他関係にあるわけではない
boost.spiritはPEG形式で与えられたルールから構文解析器を作成するライブラリ
(作成された解析器はLL法で入力を解析する)
0078デフォルトの名無しさん
2016/11/29(火) 18:41:17.09ID:nF3eDud1ど素人の私にわざわざ回答をくださってありがとうございます。
これからも勉強に励みます
0079デフォルトの名無しさん
2016/11/29(火) 18:46:41.16ID:GF2v+9TM使わんからどうでもいいが
0080デフォルトの名無しさん
2016/11/29(火) 20:31:51.74ID:baTvYruLCなんすよ。
いろいろ面倒なんでC++で
作りなおそうかと思案中です。
作成の労力は何割ぐらい
軽減するでしょうか?
0081デフォルトの名無しさん
2016/11/29(火) 20:47:31.45ID:DmRk6e1B0082デフォルトの名無しさん
2016/11/29(火) 20:55:01.08ID:1SK7brxW少なくともCより面倒になることは(熟練したC++プログラマなら)ありえないから
チャレンジしてみる価値はある
ただし、()の中が重要で、熟練したプログラマなら、という話
君がすごく筋がよいならC++はきっと役に立つはず
一方で筋が悪いというのはC++においては余計なことをやろうとすること
余計なことさえしなければ、Cより面倒になることはあり得ないし
逆に心に邪念があれば、Cとは別の意味で面倒な樹海に迷い込む
C++は書く人の心の中を映す鏡
0083デフォルトの名無しさん
2016/11/29(火) 21:09:35.06ID:glNciwx+JS(ES5), Flash, PHP, C++, Java, C#, Python に書き出せる。
Windows8.1対応。IDEは、FlashDevelop
このサイトで、ブラウザでプログラミングして、実行できる
Try Haxe !
try.haxe.org/
Haxeプログラミング入門、尾野政樹、2015
0084デフォルトの名無しさん
2016/11/29(火) 21:16:52.64ID:bPmZgvzuこのコピペ時々見るけどヘイトHaxeの効果抜群だな
0085デフォルトの名無しさん
2016/11/29(火) 21:19:45.31ID:X8I97SOuレートどんくらい?
いちおープラスなんか?
0086デフォルトの名無しさん
2016/11/29(火) 21:24:49.77ID:Ofu9bBqmせやな。Mindに手を出すわ
0087デフォルトの名無しさん
2016/11/29(火) 21:42:26.41ID:8ZPVrbbCお前の能力によるとしか言えないんじゃないのか
ソースコードの量が多いと今のCをC++へ作り直す工程はかなりの労力だろな
0088デフォルトの名無しさん
2016/11/29(火) 21:44:01.60ID:ua9E/pwR0089デフォルトの名無しさん
2016/11/30(水) 06:56:30.70ID:UPCsGfLr割り切って使うなら手間は増えないんじゃないかな。
でも実際にC++で書き始めると、C++らしい書き方をしないと
恥ずかしいみたいな気持ちになって深みにはまることが多い。
0090デフォルトの名無しさん
2016/11/30(水) 07:12:30.65ID:HOaAIIiu0091デフォルトの名無しさん
2016/11/30(水) 07:35:10.92ID:60EZvxwk0092デフォルトの名無しさん
2016/11/30(水) 08:50:24.62ID:AmbpRVJTそれを踏まえてより上手くまとめるにはC++はいいツールだぜ
0093デフォルトの名無しさん
2016/11/30(水) 09:01:18.76ID:WcEJDmm/・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・ラムダ。
0094デフォルトの名無しさん
2016/11/30(水) 09:03:12.26ID:WcEJDmm/ぼくのかんがえるC++にしかできない超強力3大(5大?)機能。
・自動的なデストラクタ呼び出し。
・moveコンストラクタと右辺値参照。
・templateとlambda。
0095デフォルトの名無しさん
2016/11/30(水) 09:05:34.45ID:WcEJDmm/異論反論はもちろん認める。
0096デフォルトの名無しさん
2016/11/30(水) 09:15:29.34ID:60EZvxwk使うなって偉い人が言ってるし
0097デフォルトの名無しさん
2016/11/30(水) 09:19:23.91ID:mG9+BxSG0098デフォルトの名無しさん
2016/11/30(水) 10:01:29.94ID:2V+M5QrARTTIをよく使うって違和感ある。
0099デフォルトの名無しさん
2016/11/30(水) 10:25:44.68ID:TMG+JuRVSTLと標準ライブラリと違うもの?
0100デフォルトの名無しさん
2016/11/30(水) 11:41:28.64ID:AmbpRVJTC++例外は嫌々しぶしぶ使ってるけど、クソすぎてため息
0101デフォルトの名無しさん
2016/11/30(水) 12:37:13.96ID:60EZvxwk0102デフォルトの名無しさん
2016/11/30(水) 12:51:41.03ID:zOzS6ENl#include <iostream>
#include <vector>
template<class T>
class Point{
public:
Point(T x,T y):m_x(x),m_y(y){}
private:
T m_x;
T m_y;
};
int main( int argc, char *argv[] )
{
Point<int> p1(0,0);
Point<double> p2(0.0,0.0);
std::vector<Point<???>> vpoints;
vpoints.push_back(p1);
vpoints.push_back(p2);
return 0;
}
0103デフォルトの名無しさん
2016/11/30(水) 13:02:54.90ID:7bek9hnS0104デフォルトの名無しさん
2016/11/30(水) 13:08:22.75ID:0DxS4g7L0105デフォルトの名無しさん
2016/11/30(水) 13:16:41.10ID:7bek9hnSそれやるならunion用意するかな
そもそも同じvectorにする意味がわからないけど・・・
0106デフォルトの名無しさん
2016/11/30(水) 13:21:49.66ID:TMG+JuRVプログラム的に意味があるかどうかなんか問題ではないだろ
それ言い出したら、
push_backした後なにもせずにプログラムが終了しているんだから
push_backする必要ないだろ
0107デフォルトの名無しさん
2016/11/30(水) 13:47:54.21ID:kcnEUqeYそこをどの様に記述してもコンパイルはできない
そのPoint<int>とPoint<double>はそれぞれなんの関係もない独立した型であって
相互に変換や代入などはできないから
0108デフォルトの名無しさん
2016/11/30(水) 14:23:43.41ID:X0PK+rS4STLは前世紀にどこかのメーカーが作ったライブラリ
便利なので広まって標準ライブラリの礎となった
最新のバージョンは3.3で今でもダウンロードできる
対応する環境はMS C++ Ver.5とかgcc 2.9とかだと思う
0109デフォルトの名無しさん
2016/11/30(水) 14:26:14.29ID:TMG+JuRV0110デフォルトの名無しさん
2016/11/30(水) 15:43:30.08ID:tnQQtKajさもなくば、コンパイラごとに違ったSTLとか嫌だろ
0111デフォルトの名無しさん
2016/11/30(水) 16:25:16.47ID:34Y1lEhkどこからジャンプしてきたかの呼び出し履歴をとれないのはあまりに大きい。
0112デフォルトの名無しさん
2016/11/30(水) 16:53:47.96ID:34Y1lEhk・なるほど少し速いかも、なレベル。悪くない。むしろ良い。
・仕事ではなく趣味や学習目的で扱う分には、手本としてもオススメできる。
・既存のstdとeastlを混在利用することは可能だが要注意。
・EASTLに限らずテンプレートの宿命だが、プログラマ側ソースコードのどの箇所がエラー原因なのか場所を特定しずらい。
具体的に困ったこと。いずれも対策を講じて解決済み。
・eastlで作ったコンテナをうっかり std::random_shuffle() にいれると、どのライブラリの swap() を呼ぶかコンパイラがわからずエラーになる。
eastl::shuffle()に置き換えて、第三引数の乱数生成器は stdの<random>の乱数生成器を使って対処した。
・eastl::make_shared<>(args...) で Gdiplus::Bitmapの梟雄ポインタのインスタンスを作ろうとすると 引数2つ渡すGdiplus::GdiplusBaseのnew演算子が定義されてないとかで、エラーになる。
従来通り、new Gdiplus::Bitmap(...) で作ったものを渡して対処した。
0113デフォルトの名無しさん
2016/11/30(水) 17:29:43.03ID:AmbpRVJT0114デフォルトの名無しさん
2016/11/30(水) 19:00:58.85ID:j7/lwSC0標準化ってのは独自性の有る新たなものを産み出すんやなくて
世に存在する既存のものの統一を図るのが本来やで
0115デフォルトの名無しさん
2016/11/30(水) 19:08:39.22ID:TMG+JuRVコンパイラごとにSTLの実装は違いますけど?
VC++、gcc、clang、C++builderで実装が同じだと思ってました?w
~~~~~
0116デフォルトの名無しさん
2016/11/30(水) 19:33:15.69ID:tnQQtKaj規格の話しているのに、なんで実装の話が出てくるのか謎なんだが
0117デフォルトの名無しさん
2016/11/30(水) 19:46:20.54ID:TMG+JuRVおまえ頭おかしいのか?
己が書いたものを100回復唱してみろよ
↓
> 誰が実装が同じだといった?
> 規格の話しているのに、なんで実装の話が出てくるのか謎なんだが
0118デフォルトの名無しさん
2016/11/30(水) 19:54:56.69ID:34Y1lEhk規格の話だけするのなら、そもそもコンパイラや実行環境さえ必要なくて、日本の自称・憲法学者(笑)のように紙とペンだけで済む。
規格と実装、両方の話をするのが正しい。
0119デフォルトの名無しさん
2016/11/30(水) 20:16:34.70ID:SxJugRcT0120デフォルトの名無しさん
2016/11/30(水) 20:22:51.93ID:wWCievJu0121デフォルトの名無しさん
2016/11/30(水) 20:43:04.57ID:TMG+JuRVを読んでみろ
0122デフォルトの名無しさん
2016/11/30(水) 20:50:12.38ID:o1dhiyLy.
■■人間性に批判殺到 あの悪質パクツイ垢 @copy__writing の管理人は東京都三鷹市の莉里子■■
http://i.imgur.com/5qAgsHG.png
http://i.imgur.com/kldi84l.png
http://i.imgur.com/8vCymiC.jpg
■今までのプライベート垢
@riricoco0
@bibliophilia333
@muzimuzi333
@nekomatagensou
@hanasoraumimori
@mirainosekai3
@zibanyan666
@parlorchild
@liliririko
@EriotN
@mike_peko
@riricoco0
@ririko_neko
@nyanpas ※1
@telegraphyneko
・
・
@riricatputi (新アカ) http://imgur.com/a/X1vQA
100垢以上作ってるキチガイ出会い厨 (粘着やめろ詐欺師!はやく捕まれホラ吹きネットストーカー犯罪者!!)
0123デフォルトの名無しさん
2016/11/30(水) 21:00:50.51ID:SxJugRcT0124デフォルトの名無しさん
2016/11/30(水) 21:13:12.45ID:34Y1lEhkある人はプロプロセッサ処理前のソースコードという意味で。
ある人はプロプロセッサ処理後のソースコードという意味で。
ある人はコンパイル後のobjバイナリという意味で。
ある人はビルド後の実行バイナリという意味で。
0125デフォルトの名無しさん
2016/11/30(水) 21:39:54.28ID:tnQQtKaj---
パクリでもなんでも、便利そうなものは標準に取り入れる意味があるんだよ
さもなくば、コンパイラごとに違った(規格の)STL(モドキ)とか嫌だろ
---
0126デフォルトの名無しさん
2016/11/30(水) 21:56:08.67ID:pYpq7m+B0127デフォルトの名無しさん
2016/11/30(水) 22:24:40.10ID:1zLD/kv4開発者本人が標準化委員会に提案したんだぞ
0128デフォルトの名無しさん
2016/11/30(水) 23:42:37.82ID:lwghcYzA>>110の説明の日本語がよろしくない
0129デフォルトの名無しさん
2016/12/01(木) 00:10:57.08ID:SwKXepyGこれをSTLのregexと同じインターフェースでラップした場合、STLと呼べるだろうか?
0130デフォルトの名無しさん
2016/12/01(木) 00:14:57.78ID:rFASmZLgthreadをSTLと言ってる人も見かけたし何でもありだな
0131デフォルトの名無しさん
2016/12/01(木) 00:18:17.94ID:O3rxu16zSTLという言葉を使う奴=バカ
ハゲもその一人
0132デフォルトの名無しさん
2016/12/01(木) 00:23:12.22ID:SwKXepyG指摘ありがとう。
regex はあくまでstdに採用されたのであってSTLではなかった。訂正します。
0133デフォルトの名無しさん
2016/12/01(木) 00:27:51.92ID:9RDsFVMO0134デフォルトの名無しさん
2016/12/01(木) 00:37:39.97ID:SwKXepyG0135デフォルトの名無しさん
2016/12/01(木) 01:01:51.34ID:lTTMQ5z2ある程度のサイズのプログラムで大半を占めるアプリケーション層の操作が noexcept になる
なんてことは考えにくいので、 noexcept がデフォだったらそれはそれで許せない感じになる。
noexcept がデフォでうれしいのなんてライブラリ作者ぐらいでしょ。
0136デフォルトの名無しさん
2016/12/01(木) 01:37:48.41ID:TTb4zObNregexもスタンダードなテンプレートライブラリだろ
0137デフォルトの名無しさん
2016/12/01(木) 02:09:31.61ID:SwKXepyGSTLを会社とすると、basic_stringはSTLの特別顧客だがSTLの社員ではない。
STLを会社とすると、regex、thread、iostreamは一般客。
regexを会社とすると、basic_stringはregexの特別顧客だが、regexの社員ではない。
stringstreamを会社とすると、basic_stringはstringstreamの契約社員。
basic_stringだけが特別な存在として異彩を放っている。
0138デフォルトの名無しさん
2016/12/01(木) 02:52:13.09ID:PTAZcCnS0139デフォルトの名無しさん
2016/12/01(木) 03:20:50.25ID:n8BYNyNm確かに>>110の内容は誤解する余地のある書き方だけど普通に読めば理解できるし、>>115は良く読まずに脊髄反射してるか、分かってて揚げ足取りしてるのか、いずれにせよ建設的な議論ができないタイプなんだろう。
0140デフォルトの名無しさん
2016/12/01(木) 06:56:46.70ID:SwKXepyGいらだつ気持ちはわかるよ。
basic_stringはヴェルタースオリジナルと同じくらい特別な存在だからね。
https://www.youtube.com/watch?v=4Yi9_uCw2NY
0141デフォルトの名無しさん
2016/12/01(木) 08:11:31.70ID:7obV0jvg「ボク、正規になれるって頑張ってきたのに…」
0142デフォルトの名無しさん
2016/12/01(木) 10:05:27.69ID:PTAZcCnSほう?
この例え話から建設的な議論を広げて貰おうか?
0143デフォルトの名無しさん
2016/12/01(木) 12:54:22.29ID:rYSe/HxLそう言うレスが建設的じゃないって言われてるんだろ
0144デフォルトの名無しさん
2016/12/01(木) 13:02:57.96ID:PTAZcCnSえ?なんで?
出来ないこと要求しちゃったから?
0145デフォルトの名無しさん
2016/12/01(木) 14:01:09.15ID:vPHgqg3S{
struct hage{};
};
template<typename T> void hoge(typename moge<T>::hage)
{}
hoge(moge<int>::hage{});
hogeの呼び出しができません。hogeをどう変えればいいですか。
0146デフォルトの名無しさん
2016/12/01(木) 15:05:36.97ID:SwKXepyGhoge<int>(moge<int>::hage());
0147デフォルトの名無しさん
2016/12/01(木) 15:17:40.11ID:vPHgqg3STがどの型でも呼び出せるようにするにはどうすればいいですか
0148デフォルトの名無しさん
2016/12/01(木) 15:38:14.38ID:O+yJrb2hテンプレートの型推論のメカニズムも何も知らないが
要はhoge()の中でTが得られれば良いんでしょ?
template<typename T> struct moge
{
struct hage{ typedef T type; };
};
template<typename U> void hoge( U arg )
{
typedef U::type T;
}
hoge(moge<int>::hage{});
一応これでコンパイルは通る
0149デフォルトの名無しさん
2016/12/01(木) 15:39:23.16ID:X/1wKSRH拾いきれない例外は外にふっとんでいく
0150デフォルトの名無しさん
2016/12/01(木) 15:41:27.17ID:SwKXepyG正社員より年収の良い派遣社員だよ、basic_stringさんは。
しかも、boost の文字列操作ライブラリの強力な支援を受けられる最強の八方美人。
0151デフォルトの名無しさん
2016/12/01(木) 15:42:30.64ID:vPHgqg3Smogeのhageしか受け付けないhogeが必要です
0152デフォルトの名無しさん
2016/12/01(木) 16:29:20.65ID:aVqOQbdr0153デフォルトの名無しさん
2016/12/01(木) 16:59:12.87ID:umvXirxEgcc: candidate: template<class T> void hoge(typename moge<T>::hage)
template argument deduction/substitution failed:
couldn't deduce template parameter 'T'
cl:
'hoge': no matching overloaded function found
'void hoge(moge<T>::hage)': could not deduce template argument for 'T'
see declaration of 'hoge'
みんな口を揃えて「Tが推定できない」と言ってくる
じゃあ、Tを明示的に与えては?
hoge<int>(moge<int>::hage{});
ちょっと腹立つけど、typenameだのtemplateだのの前置と
ウザさはそう変わらんと思う
0154デフォルトの名無しさん
2016/12/01(木) 17:04:30.75ID:umvXirxEtemplate <typename T>
void hige()
{
hoge<T>(moge<T>::hage{});
}
0155デフォルトの名無しさん
2016/12/01(木) 17:06:57.95ID:umvXirxEauto closure = [](auto arg){ hoge<decltype(arg)>(moge<decltype(arg)>::hage{}); };
closure(1);
0156デフォルトの名無しさん
2016/12/01(木) 17:12:07.19ID:vPHgqg3S呼び出し方はこうでないといけないのです
hogeの定義の方をなんとかしてできませんか
0157デフォルトの名無しさん
2016/12/01(木) 17:20:15.24ID:EvfhiEONstruct hage{ using type = T; };
};
template<typename T>
std::enable_if_t<std::is_same<T, typename moge<typename T::type>::hage>::value>
hoge(T) {};
0158デフォルトの名無しさん
2016/12/01(木) 18:08:07.28ID:rYSe/HxLまあ、なんか悔しいんなら一人でやっててくれ w
0159デフォルトの名無しさん
2016/12/01(木) 18:49:53.87ID:Xkx3qm7Uhoge関数をどう変えるかと聞いてるのに
勝手にmogeの定義を変えるお題改変野郎
0160デフォルトの名無しさん
2016/12/01(木) 19:01:40.82ID:aVqOQbdr0161デフォルトの名無しさん
2016/12/01(木) 19:13:39.34ID:xNXWtXQs「何が気に入らんのやワレ」と圧力
0162デフォルトの名無しさん
2016/12/01(木) 19:14:31.57ID:O+yJrb2h現実問題としては、using type = T は無くても有ってもかまわないんだろうよ
実際のコードのhageの中身がどうなっているかわからないが
Tを使ったメンバがあるならdecltypeでTは取得できるし
Tを使ったメンバがないなら
おそらくはhageの処理をするのにTは要らない公算が高いだろ
hoge()が何をする関数かわからないから何とも言えないが
using type = T はサービスみたいなものじゃないかな
0163デフォルトの名無しさん
2016/12/01(木) 19:15:49.51ID:vPHgqg3Sコンパイル通りません
153のようなエラーが出ます
0164デフォルトの名無しさん
2016/12/01(木) 20:31:23.58ID:O3rxu16z質問者以外の者がどうして根拠なしに決めつけようとするのか疑問だ
math.hにM_PIを入れただけで因縁をつけられてしまうというのに
0165デフォルトの名無しさん
2016/12/01(木) 21:42:58.03ID:O+yJrb2h質問者が納得さえすればそれで終わりなんだからさ
それなのにこの質問者は>>157についてはノーコメントなんだよ
0166デフォルトの名無しさん
2016/12/01(木) 23:10:33.41ID:O3rxu16zまず「出来ません」と回答しないと>>156は納得しないのではないだろうか。
可否がはっきりしない状態で質問通りでない代替案に誘導したらお題改変と罵られても致し方ない
0167デフォルトの名無しさん
2016/12/01(木) 23:22:29.15ID:O+yJrb2hいいかげんにしろよな
お前、俺に>>164で何て言った?
0168デフォルトの名無しさん
2016/12/01(木) 23:42:50.11ID:SwKXepyG0169デフォルトの名無しさん
2016/12/01(木) 23:46:56.05ID:rFASmZLg0170デフォルトの名無しさん
2016/12/02(金) 00:39:59.68ID:pucVjZc7http://ideone.com/R8pyc7
配列と要素数を受け取るクラスにvectorを渡したい時のスマートな方法を教えて下さい。
0171デフォルトの名無しさん
2016/12/02(金) 00:46:20.74ID:xqmmn7KFそのコードみたいにpush_backするならhogeクラスには渡したくない
素直に考えるならvectorごと渡すクラスにすべきだが・・・
0172デフォルトの名無しさん
2016/12/02(金) 00:56:10.11ID:vQsfzK7a>"hogeの定義の方"をなんとかしてできませんか
はできないからあきらめれよ!ってこと?
0173デフォルトの名無しさん
2016/12/02(金) 01:11:57.66ID:EkOvBjK1http://ideone.com/bdR6fU
これでいいじゃん
constの参照だと参照を握ったままになるから常に反映される
0174デフォルトの名無しさん
2016/12/02(金) 01:17:41.14ID:BG6OiKaZラムダ式でコピーコンストラクタを呼ぶ方法がいいのかな
http://ideone.com/R8pyc7
0175デフォルトの名無しさん
2016/12/02(金) 01:46:59.92ID:bQI5jx4ounique_ptrとか補助に使ってnew[]で確保した領域に値をコピーして渡すのが結局スマート(賢い)
0176デフォルトの名無しさん
2016/12/02(金) 01:50:25.88ID:FOrSERG00177デフォルトの名無しさん
2016/12/02(金) 01:59:15.75ID:EkOvBjK1size()を使ってる点でおかしいよ
vectorのインスタンスを無視するつもりか
0178デフォルトの名無しさん
2016/12/02(金) 02:33:56.52ID:kfHVwGjq君は間違っている。
STLでも begin() と end() で範囲指定するだろ。
イテレータがない型にも対応しようと思えば、先頭ポインタとサイズを渡すのが正しい。
0179デフォルトの名無しさん
2016/12/02(金) 02:49:25.45ID:l8IxU+t8配列と要素数を更新してからメソッド呼ぶようにするしかないんじゃないかな?
0180デフォルトの名無しさん
2016/12/02(金) 05:46:11.27ID:na0ypgqO0181デフォルトの名無しさん
2016/12/02(金) 07:22:37.66ID:nGP8T2R90182デフォルトの名無しさん
2016/12/02(金) 07:57:25.48ID:na0ypgqO本人?
意図不明なラムダ使った未定義動作のコードで明確にしたつもりって言われてもなあ
0183デフォルトの名無しさん
2016/12/02(金) 08:20:31.67ID:4/nN0nxx明確でないから自分の都合で改編するとか迷惑なだけ
0184デフォルトの名無しさん
2016/12/02(金) 09:56:01.01ID:tdlBqAAM連続格納が保証されてるのだから
&a[0]を渡せばいいよ
0185デフォルトの名無しさん
2016/12/02(金) 10:09:51.51ID:HWcr/nXn◎ int* に vector<int> は渡せない
相手が int* でビルトイン[]演算子を使う限り、
vector ではなく生の配列を用意する以外に選択肢はない
0186デフォルトの名無しさん
2016/12/02(金) 10:30:03.38ID:na0ypgqO>>185
みたいに何も解ってない初心者がでしゃばって見当違いな回答する事も多かったな
0187デフォルトの名無しさん
2016/12/02(金) 10:53:45.98ID:HWcr/nXn0188デフォルトの名無しさん
2016/12/02(金) 10:59:49.79ID:dQ26sSxpラッパーかヘルパーを用意して、vectorはそっちで処理する。
0189デフォルトの名無しさん
2016/12/02(金) 11:04:51.34ID:na0ypgqOお前は何のためにstd::vector<T>::dataがT*を返すと思ってんの?
0190デフォルトの名無しさん
2016/12/02(金) 12:06:38.84ID:kfHVwGjqだから安易にdata()を使えと回答する人もまた入門者に近しい。
0191デフォルトの名無しさん
2016/12/02(金) 12:12:12.15ID:jbEu1BDa0192デフォルトの名無しさん
2016/12/02(金) 12:28:12.29ID:7EcjjmS30193デフォルトの名無しさん
2016/12/02(金) 12:29:35.07ID:dQ26sSxp古い入門書を想定しろ、はさすがに言いがかりがひどすぎる。
0194デフォルトの名無しさん
2016/12/02(金) 12:36:41.22ID:oWLJBZXg0195デフォルトの名無しさん
2016/12/02(金) 12:38:30.29ID:oWLJBZXg0196デフォルトの名無しさん
2016/12/02(金) 14:14:03.78ID:uzv70fADそれが渡したクラスでは反映されないってのが問題だと思ってたんだが勘違い?
0197デフォルトの名無しさん
2016/12/02(金) 14:59:13.58ID:7EcjjmS3もっといえば要素増やすとdata()の場所がかわってアクセス違反になるかもしれなくて困ると言うことかと
0198デフォルトの名無しさん
2016/12/02(金) 15:03:09.14ID:uzv70fADあーそれはあるね
どんどん要素を増やして行くと再newしてそこに全部要素コピーされなおして
元のアドレスは無効になるってのがあったな
だからvectorをメンバに持つのを頑なに拒否する理由がわからない
0199デフォルトの名無しさん
2016/12/02(金) 15:13:55.45ID:kfHVwGjq他の場所で使うためのvectorをメンバ変数にするとか勝手なこと言いだしているし、精神病っぽいんだが。
0200デフォルトの名無しさん
2016/12/02(金) 15:37:45.05ID:uzv70fADあのさあ・・・
>>170見てから発言しようよ
クラスにvectorの中身を受け渡してからその時の要素数で和を求めてるでしょ?
他のところで元のvectorの要素数が変化してもクラスに反映されたいのかと思ったわけですよ
それだったらconst&で参照を握るのが一番いいでしょって話
レベルが落ちてるのは君の頭では?
0201デフォルトの名無しさん
2016/12/02(金) 15:53:53.33ID:jbEu1BDa0202デフォルトの名無しさん
2016/12/02(金) 16:04:44.72ID:kfHVwGjqsum(int* arr, size_t arrsize); のように計算したいときにその配列を渡すだけでいい。
>>170の人は、クラス設計の基礎について学んでいる最中なのだろう。
>>200
内部でvectorを持てなどど初心者をミスリードするような言説は支持できない。
参照渡ししようがsum()実行時に配列がすでに破棄されている危険は避けられない。
0203デフォルトの名無しさん
2016/12/02(金) 16:07:07.03ID:uzv70fADそれはそうだけど、精神科医でもないのに他人を精神病呼ばわりするのはどうかと思うね
0204デフォルトの名無しさん
2016/12/02(金) 20:25:46.27ID:CA3LJl/S0205デフォルトの名無しさん
2016/12/02(金) 20:55:50.99ID:u0tVj5kOん?何か問題でも?
0206デフォルトの名無しさん
2016/12/02(金) 21:54:40.66ID:U8hBv6+y0207デフォルトの名無しさん
2016/12/02(金) 22:09:36.42ID:7p6FlYPM自分およびリアルの周りの連中に精神病の奴が多いから、すぐにそう呼ぶんだよ
プログラマは、基地外・低脳・ド素人でもなれる底辺職業だからしょうがない
あと,2chに来る連中は基地外・低脳が普通でコミュ障害の奴が多い
0208デフォルトの名無しさん
2016/12/02(金) 22:22:54.67ID:bT0HhoKK類は友を呼ぶって言うからお前も頭おかしいんだな
だからお前の回りばっかり精神病の奴がたくさん集まるわけだ
俺の周囲にそんなおかしい奴いないぞ
0209デフォルトの名無しさん
2016/12/02(金) 22:35:27.15ID:7p6FlYPMお前も、2chに来ている。つまり、お前もおかしい奴で基地外の仲間
0210デフォルトの名無しさん
2016/12/02(金) 22:42:18.13ID:bT0HhoKK無理があり過ぎるよそれ
2chに来ていたら頭おかしいってどうなんだよ
極論過ぎるだろ
0211デフォルトの名無しさん
2016/12/02(金) 22:57:40.10ID:kfHVwGjq質問者はvectorをメンバ変数に持つつもりなら最初からやってるよ。
質問者がクラスにやらせるべきこととそうでないことを判断するトレーニング中であることぐらい、察したらどうか。
0212デフォルトの名無しさん
2016/12/02(金) 23:17:08.89ID:bT0HhoKK0213デフォルトの名無しさん
2016/12/03(土) 00:40:47.30ID:lJ+FIy6l普通の奴はそんなことは普通は言わないからな
0214デフォルトの名無しさん
2016/12/03(土) 01:16:45.36ID:o5juI1ev0215デフォルトの名無しさん
2016/12/03(土) 01:45:59.55ID:lJ+FIy6l>>170 の
19. hoge huga(&[&]{return a;}()[0],a.size());
20. cout<<huga.sum()<<endl;
21. a.push_back(4);
22. cout<<huga.sum()<<endl;
質問者が聞いているのは、19のところの渡し方のみで
21でpush_backしたことが22のhuga.sum()に反映されなくてもOK
ってことでこのコードなのか。でも、普通は反映されないと駄目だろうってなるが
しかし、そのあたりのことは質問者の方針しだいだからな
0216デフォルトの名無しさん
2016/12/03(土) 02:11:45.06ID:VaD9CZL6そもそもそのコード未定義だから。コピーされた一時オブジェクトの寿命がfugaのコンストラクタの終了時までしかない。つまりコンストラクタが終わった時点でfugaは無効なポインタを保持している。
俺意外誰も指摘してないこのレベルの低さよ
まともなバッファーオーバーフローチェックツールもないWindows使ってるだろうからずっと気付かないんだろうけどさ。
0217デフォルトの名無しさん
2016/12/03(土) 02:17:26.63ID:Ub2Qtd0LVisual Studio に静的コード分析するツールがついてるよ。
http://qiita.com/t_takahari/items/8886b84f16c21dcf3169
ツールバーの[ビルド] → [ソリューションでコード分析を実行]
0218デフォルトの名無しさん
2016/12/03(土) 02:45:48.72ID:VaD9CZL6この流れで紹介するから検出すんのかと思って件のコードに使ったけど検出しねえじゃん。
何で紹介したの?見てください。こんなゴミしかありませんって言いたかったの?
0219デフォルトの名無しさん
2016/12/03(土) 03:22:46.71ID:Ub2Qtd0L無理だったか。人柱になってくれてありがとう。参考になったわ。
0220デフォルトの名無しさん
2016/12/03(土) 06:19:52.60ID:Dg5vNEL0文脈を理解できずに単語レベルで脊髄反射したから
以外の理由が思いつかない
0221デフォルトの名無しさん
2016/12/03(土) 09:55:36.59ID:PFahUF7+0222デフォルトの名無しさん
2016/12/03(土) 10:41:31.67ID:VaD9CZL6そんなどうでもいい事しか指摘出来ないんかね?
×fuga
○huga
これで満足かね?
あと、勝手に脳内補完したんだろうけどバッファーオーバーフローしているとは言っていない。
0223デフォルトの名無しさん
2016/12/03(土) 11:01:08.63ID:ueq5z8BCビルド不可能な致命的なミスをどうでもいいとかレベルが知れるね
0224デフォルトの名無しさん
2016/12/03(土) 11:09:33.93ID:VaD9CZL6へえ、お前はあのコメントビルドしなきゃ解釈出来ないんだ?
融通の効かない脳みそ持ってて大変そうだね。
ちょっと気の利いた実在するコンパイラですらfugaじゃなくてhugaじゃない?と提案してくれだろうに
0225デフォルトの名無しさん
2016/12/03(土) 11:35:29.83ID:msYNpxCE>>170もタイプミスで
hoge huga(&[&]{return a;}()[0],a.size());
としたんだよ
ほんとは、
hoge huga( &[&]()->std::vector<int>&{return a;}()[0], a.size());
(でも、ラムダを使った意図が分からんが)
で、一方、a.size()はラムダじゃないところがなかなか良いな
>>216で言っているチェックツールはなんていうもの?
0227デフォルトの名無しさん
2016/12/03(土) 11:55:45.48ID:msYNpxCE>>215と>>170ぐらいしか読んでいない
で、チェックツールはなんていうもの?
0228デフォルトの名無しさん
2016/12/03(土) 13:30:42.63ID:NvhxMxG92.既存のライブラリをそのまま使いたいのでクラスの変更はなし(>>174)
だからラッパー作るしかないんじゃ
0229デフォルトの名無しさん
2016/12/03(土) 13:32:28.64ID:yMrCSOQZそんなの誰でも気づいてるんだが・・・
「誰も気付いてないことに気づいてる、俺偉い!」みたいなガキみたいな発言やめようよ
0230デフォルトの名無しさん
2016/12/03(土) 14:13:03.65ID:10B4blEiラムダを使った意図が分からんと言っている人が
無効ポンタの問題に気付いているなんてありえるんか?
0231デフォルトの名無しさん
2016/12/03(土) 14:32:15.79ID:ibetNlvyくやしいのうくやしいのうwww
0232デフォルトの名無しさん
2016/12/03(土) 14:38:22.39ID:VaD9CZL6後からならなんとでも言えるよねw
それに”俺偉い”じゃなくて”お前ら役立たず”だから。
0233デフォルトの名無しさん
2016/12/03(土) 14:49:46.37ID:3jlcDMZyローソンで使わないとポインタつかないよ
0234デフォルトの名無しさん
2016/12/03(土) 15:34:57.86ID:RB4pAnBd0235デフォルトの名無しさん
2016/12/03(土) 17:47:38.70ID:obyPXWW/これでダメならラップだな
http://ideone.com/FdmnJX
0236デフォルトの名無しさん
2016/12/03(土) 20:55:37.22ID:nmEGc+VH0237デフォルトの名無しさん
2016/12/03(土) 21:35:23.01ID:Ub2Qtd0Lmake_shared によるshared_ptrインスタンス作成は避けた方がよさげ?
0238デフォルトの名無しさん
2016/12/03(土) 22:49:36.24ID:P2bjLPkk質問者はLambda覚えてうれしいみたいだから
auto getsum_of_vec_a = [&](){ return hoge(a.data(),a.size()).sum();};
or
auto getsum_of_vec_int = [](std::vector<int>& rveci){return hoge(rveci.data(),rveci.size()).sum();};
の方が好きなんじゃないのか
0239デフォルトの名無しさん
2016/12/04(日) 01:18:15.57ID:NuV6w8qlQはID入ってから消えたけど老害なのにC++11/14やり始めたのか
0240デフォルトの名無しさん
2016/12/04(日) 01:21:08.10ID:ym269Z+p見ていて哀れな自演をするのが片山
自演せずにアホなレスを続けるのがQ
024180
2016/12/04(日) 11:02:45.11ID:VNQPodhLありがとうございます。
毎週土曜日に囲碁ソフトを作ってる仲間で集まって対戦しているのですが、
昨日は、とうとう勝率で最下位に転落してしまいました。
というわけで来週の対戦に備えて、C言語のままでレベルをはかります。
C++への移植は、C++をもうちっと勉強してからにします。
0242デフォルトの名無しさん
2016/12/04(日) 11:30:28.53ID:lLLqnakU> 毎週土曜日に囲碁ソフトを作ってる仲間で集まって対戦しているのですが、
面白そうだな、羨ましい
0243デフォルトの名無しさん
2016/12/04(日) 12:44:55.51ID:3hO5sNCQ0244デフォルトの名無しさん
2016/12/04(日) 12:52:15.85ID:vQKkq8/O0245デフォルトの名無しさん
2016/12/04(日) 13:15:12.36ID:G39rTcwPいくらでもあるじゃん
0246デフォルトの名無しさん
2016/12/04(日) 13:18:43.46ID:0x/ZyvVg英断
C++なんて初めたら囲碁ソフトどころじゃなくなるからな
0247デフォルトの名無しさん
2016/12/04(日) 13:22:41.10ID:npHUCn5F集まってわいわいやるのが楽しいんだろ
0248デフォルトの名無しさん
2016/12/04(日) 13:34:54.43ID:3bGgXPCqぼっちか?
0249デフォルトの名無しさん
2016/12/04(日) 15:02:30.49ID:3hO5sNCQ集まるか?
まあ楽しいんだろうけど。
そういう場で言語の話題になったりしないのかな?
0250デフォルトの名無しさん
2016/12/04(日) 19:50:57.71ID:IGd+W/R5同好の士との交流だけをし続けるやつキモすぎ
0251デフォルトの名無しさん
2016/12/04(日) 21:01:23.82ID:3hO5sNCQC++忘年会には出るけどな
0252デフォルトの名無しさん
2016/12/04(日) 21:22:06.89ID:c0yJ+Nvf0253デフォルトの名無しさん
2016/12/04(日) 21:31:12.40ID:WzPfJn5TC++のレベルは低くてC++の話はたいしてできないんだから
もう、C++な奴のの雑談スレで良いな
0254デフォルトの名無しさん
2016/12/04(日) 21:34:02.43ID:IGd+W/R50255デフォルトの名無しさん
2016/12/04(日) 21:44:00.38ID:3bGgXPCqこのスレ基準だとすぐ喧嘩になりそう
0256デフォルトの名無しさん
2016/12/04(日) 22:05:03.03ID:ORLi/53Uそんな気がする
0257デフォルトの名無しさん
2016/12/04(日) 22:21:04.25ID:mxVYcsZLついったーとかですればいい
0258デフォルトの名無しさん
2016/12/04(日) 22:21:43.19ID:mxVYcsZL>>253
れべるの高い話はついったーとかですればいい
0259デフォルトの名無しさん
2016/12/04(日) 22:53:20.88ID:BLPKeA8O「インスタンスはコンパイラが明示的または暗黙的に作成するもの。イミフ」
「会話の流れから常識で理解できない馬鹿はお辛そうですねww」
「論破されて反論出来なくなると人格攻撃ミジメwww」
こんな感じだな
0260112
2016/12/04(日) 23:39:04.98ID:Auh8Qey4VS2017RC の std や boost の make_shared<>(args) は、しれっと new/delete オーバーライドを無視して、通常のnew/deleteを使うので要注意。
最初はコンパイルできないeastlの問題かと思ったが、今はむしろ意図しない解釈を許す std や boostの方が問題に思える。
0261デフォルトの名無しさん
2016/12/04(日) 23:39:11.45ID:WzPfJn5Tここには俺も含めてそうなる連中以外いないだろ
いまや,2chは基本的にコミュ障(議論っぽいことはしているが、実はコミュニケーションはできていない)
者が集まるところ。
議論にはコミュニケーション能力必要だが、雑談ならコミュニケーション能力なくていい。
意味不明の独り言でもよいし
>>258
れべるの高い話だけじゃなく低い話もついったーとかで
雑談はここで良いが、C++のこと(議論)をここですると(コミュ障全開の)罵倒・喧嘩・基地りあいになるから
雑談以外はついったーとかですればいい
0262デフォルトの名無しさん
2016/12/05(月) 00:01:16.81ID:JXZGoe9zmake_shared<T>はTとshared_ptrの管理ブロック用の領域を合わせた大きさで
一回しかメモリ確保を行わないからそういうもの
Tの大きさ分のメモリしか確保しないオーバーロードされたnewはメモリ確保には使わない
0263デフォルトの名無しさん
2016/12/05(月) 00:19:06.63ID:oh/e0eB5そういうもの、とはどういう意味ですか?
やはりコンパイルエラーが出るEASTLが間違っているということでしょうか。
0264デフォルトの名無しさん
2016/12/05(月) 00:23:17.61ID:soEx3sdp特定のアロケーター使って欲しい場合のためのstd::allocate_shared
0265263
2016/12/05(月) 00:33:53.91ID:oh/e0eB5代替的な解決策のご提示、ありがとうございます。
正直、クラスのnew/deleteオーバーライドを警告なしに無視することが make_shared() の仕様であるとは思いたくないです。
0266デフォルトの名無しさん
2016/12/05(月) 00:43:42.73ID:soEx3sdpstd::listなどのコンテナ関係が警告なしに無視するのは許せるの?
逆に言えば標準ライブラリの中でクラスのnew deleteがあればそれを使うなんてもの殆ど無いよ
0267263
2016/12/05(月) 02:11:52.64ID:oh/e0eB5警告くらいは出してもいい気がしますが。
list<shared_ptr<T>> を使えばクラスのnew/deleteオーバーライドを呼ぶよう対処可能だけど、
そのshared_ptr<T>インスタンスをmake_shared<T>()で作ると要素をshared_ptrでラップした意図も台無しになる。
0268デフォルトの名無しさん
2016/12/05(月) 03:07:21.93ID:PDKg3SYv0269デフォルトの名無しさん
2016/12/05(月) 07:38:41.26ID:nBxFX+pdだが仕様は確認しない。
そう誓ったに相違ない
0270デフォルトの名無しさん
2016/12/05(月) 08:03:39.13ID:soEx3sdp何のためにクラスのnew deleteをオーバーロードしてるのか知らんけどスタックに構築するのはいいの?
std::list<T> a;って出来るのはいいの?
それらが良くてmake_shared<T>()がダメな理由が解らないよ。
0271263
2016/12/05(月) 09:14:32.56ID:oh/e0eB5> 何のためにクラスのnew deleteをオーバーロードしてるのか知らんけどスタックに構築するのはいいの?
ん?オーバーロードじゃなくてオーバーライドの話してるんだけど。
Win32APIのGDI+ のクラスはすべてGdiplusBaseを基底クラスとして持っていて、
GdiplusBaseのnew/deleteオーバーライドがヘッダーファイル GdiPlusBase.h に定義されている。
何のためにオーバーライドしてるのかこっちが聴きたいくらい。
0272デフォルトの名無しさん
2016/12/05(月) 10:16:56.47ID:soEx3sdpnew deleteはオーバーライド出来ません
gdiplusは恐らくそのクラスをgdiplusのdllの中でnewしてポインタ返しユーザーにdeleteさせるような設計になってるからdllの中のnewとアプリケーションのdeleteが不一致になるのを防ぐ為だと思う。
だからアプリケーションコードの中で生成、削除する分には必ずしもオーバーロードされてるnew deleteを使う必要はないんじゃねえかな
0273263
2016/12/05(月) 10:33:28.39ID:oh/e0eB5ここはC++相談室スレだから、憶測のデタラメな回答はやめましょう。
雑談はよそのスレでどうぞ。
0274デフォルトの名無しさん
2016/12/05(月) 11:18:49.61ID:AODxEeuP反論できなくなったり、気に入らなかったりしたら
「雑談はよそのスレでどうぞ」
かよ
ことの発端はお前だろ
で、new delete の「オーバーライド」の話はどうなったの?
0275デフォルトの名無しさん
2016/12/05(月) 11:20:32.71ID:soEx3sdp触っちゃダメな人だよ
0276263
2016/12/05(月) 11:42:41.49ID:oh/e0eB5このスレは、質問者の想定する前提条件を勝手に変更する読解力のない人がちょくちょく来るんだけど、何なの?
ほかのスレにこんな人いないよ。
0277デフォルトの名無しさん
2016/12/05(月) 11:44:07.18ID:soEx3sdp0278デフォルトの名無しさん
2016/12/05(月) 11:51:24.58ID:soEx3sdp通じる人に向けて書こうと思ったけど面倒くさくなったからいいや。
0279デフォルトの名無しさん
2016/12/05(月) 12:02:47.33ID:soEx3sdpそれをユーザーコードでdeleteするとnew deleteをオーバーロードしていなけれはnewはDLLの中でリンクされているライブラリのメモリ確保が呼ばれる。
deleteはアプリケーションでリンクされているライブラリのメモリ解放が呼ばれる。
自分の知識の無さを棚に上げてデタラメ呼ばわりしたことを恥じて貰うために詳細に説明してあげたよ。
0280263
2016/12/05(月) 12:17:58.38ID:oh/e0eB5基底クラスが newやdeleteをオーバーロードすることの説明になってない。
あなたの言っていることは根本的にズレているんだが。
あなたが自分で書いた>>270の質問に自分で回答してみたらどうか。
0281デフォルトの名無しさん
2016/12/05(月) 12:22:37.14ID:AODxEeuPは>>272の
>gdiplusのdllの中でnewしてポインタ返しユーザーにdeleteさせるような設計
には該当してないんですか?
頭大丈夫?
そのあとの説明も、お前のはタイプミスしているようだが、ともかく
お前の長々書き上げたその説明も
>>272の
>dllの中のnewとアプリケーションのdeleteが不一致になるのを防ぐ為だと思う。
を意味もなく長く書いただけにすぎないと思うが
まったくお前の行動は意味不明すぎて訳が分からない
否定しておいて自分で同じことを言いなおすのが趣味の人?
0282デフォルトの名無しさん
2016/12/05(月) 12:28:33.16ID:IcdzVsWlいや、それ俺(同一人物)だから…
270の回答は良いんだよstd::vector<Bitmap> a;しても。
0284デフォルトの名無しさん
2016/12/05(月) 12:42:20.04ID:IcdzVsWl0285デフォルトの名無しさん
2016/12/05(月) 12:53:16.01ID:AODxEeuP素で間違えたわ・・・・ゴメンゴ
ついでににmake_sharedも問題ないね
DLLの内部でnewされるものにmake_sharedは使えないからね
0286263
2016/12/05(月) 12:54:28.05ID:oh/e0eB5Bitmapをコンテナで使うには、生ポでいれるかshared_ptrでくるんで入れるしか選択肢がない。
前にも書いたが、stdやboostの場合、shared_ptrをmake_sharedで作るとnew/deleteの不整合問題が暗黙のうちに発生する。
0287デフォルトの名無しさん
2016/12/05(月) 13:19:44.05ID:MCpw3CLlそれは何が不整合になると言ってんだ?
new deleteのオーバーロードが使われないというだけなら問題ないという話をしてたわけだけど
0288デフォルトの名無しさん
2016/12/05(月) 16:56:12.05ID:rZWSQmpd横レス失礼
そのBitmapとやらは、内部的にはHBITMAPだったりするのか?
コピコンがprivateってあたりが、そのように聞こえるんだが
だとしたらnew/deleteじゃなくCreateDIBSection/DeleteObjectだろ
0289デフォルトの名無しさん
2016/12/05(月) 16:57:36.27ID:rZWSQmpd忘れてw
0290デフォルトの名無しさん
2016/12/05(月) 17:39:58.18ID:IxGDT3As0291デフォルトの名無しさん
2016/12/05(月) 18:23:28.13ID:5HZvpDM+増える原因不明死 死因解明が追いつかない
(NHK・クローズアップ現代)
某看護師会の集まりで
「なぜ最近20代の突然死が急に増えたのか」
というテーマが議題にあがったそう。
みんな全く理由がわからなかったらしい。
1990年以降、被曝医学が
カリキュラムから追放された事情も大きい
たくさんの人があっけなく死んでいく
ベンチに座ったまま バスを待ちながら
説明のつかない死が多かった
多くの人が脳卒中や心筋梗塞を起こした
駅やバスの中で (『チェルノブイリの祈り』)
朝本浩文、自転車転倒死。(UAなど作曲、53)
小泉義仁、駅で脳梗塞。(スピリチュアルTV 51)
森岡賢、、心不全。 (元ソフトバレエ 49)
飯野賢治、心不全。 (株式会社ワープ 42)
今井洋介、心筋梗塞。(テラスハウス出演者 31)
杉崎由佳、急死。(『進撃の巨人』作画監督 26)
今井雅之54 盛田幸妃45 松来未祐38 泉政行35
宮田紘次34 黒木奈々32 丸山夏鈴21 椎名もた20
0292263
2016/12/05(月) 19:02:40.60ID:oh/e0eB5>newのオーバーライドなんてできたっけ??
newはオーバーライドできる。さらに独自にクラス内でオーバーロードもできる。
世間では オーバーロード が使われることが多いが、オーバーライド を使うのが正しい。
オーバーライドは、 異なるクラスの同名メソッド
オーバーロードは、 同じクラスの引数違いの同名メソッド
new /delete を引数違いで複数定義すればオーバーロードになる。
多くの場合、newした場所を特定するデバッグ手段としてオーバーロードしているため、誤用が広まった。
0293デフォルトの名無しさん
2016/12/05(月) 19:06:45.48ID:Ij/A1A/cそこは触れないでおきたい、おもしろそうだから。
あー、でも もう263逃げちゃったかな。
> ん?オーバーロードじゃなくてオーバーライドの話してるんだけど。
名言だな
0294デフォルトの名無しさん
2016/12/05(月) 19:12:16.92ID:Ij/A1A/c盛り上がってくるの?
0295263
2016/12/05(月) 19:18:05.98ID:oh/e0eB5Gduplusは、MFCやと違ってcyginやmingw向けにもクラスライブラリが提供されている。皮肉交じりに言えば、
意のままにならない他社製クラスをC++のコンテナやテンプレートで扱うためのスキルを磨くのに、Gdiplusのクラスが一役買うかもしれない。
>>293
何を対象として話しているか曖昧になるので、オーバーロードの誤用は控えるべき。ヘッダーを見ればすぐわかることだが、
そもそもGdiplusBaseはサイズ引数1つだけをとる基本の new, new[], delete, delete[] がオーバーライドされているだけであり、オーバロードはされてない。
0296デフォルトの名無しさん
2016/12/05(月) 19:19:21.48ID:HK8B5iWyそいつの相手をしている人は最初からオーバーロードの話をしているんだろ。
最初から議論がかみ合っていない、やっぱり2chだよな。議論はついったーとかでだな
0297デフォルトの名無しさん
2016/12/05(月) 19:23:45.88ID:TTRwCBA5お前はoperator+書くときもオーバーライドって言うのか
0298デフォルトの名無しさん
2016/12/05(月) 19:28:52.02ID:HK8B5iWy>>260はnew deleteのオーバーロード(operator+のオーバーロードじゃなく)の話じゃなく
継承でオーバーライドされたnew deleteの話をしているんだろ
0299デフォルトの名無しさん
2016/12/05(月) 19:29:18.41ID:TTRwCBA5Class-specific overloads
0300263
2016/12/05(月) 19:35:38.93ID:oh/e0eB5同一クラス内で operator+ がひとつだけならオーバーライド。
同一クラス内で operator+ が複数あればオーバーロード。
オーバーロードという語を誤用しても普通は問題ない。
誤用すると混乱する話題だからあえて指摘した。
0301デフォルトの名無しさん
2016/12/05(月) 19:37:03.33ID:2NaB5jfDそれが誤用だって言ってんだよ
お前は派生クラスで基底クラスのvirtualではない関数と同じ名前付けて隠した場合もoverrideって言うのかよ。
そうだとしたら根本的に話通じない相手だな。
0302デフォルトの名無しさん
2016/12/05(月) 19:47:51.17ID:HK8B5iWy俺は>>298のように>>263(>>260?)のオーバーロードとオーバーライドの違いと理解したが
でも、>>300からするとなんか違ったみたいだが。
0303デフォルトの名無しさん
2016/12/05(月) 19:53:49.64ID:2NaB5jfD最初に述べたようにnew deleteはオーバーライド出来ない。
クラス内に書くnew deleteもオーバーロード。
グローバルのnew deleteの他にそのクラスだけで使うnew deleteを多重定義できるからオーバーロード。
そのクラスを派生して基底のメンバーを使用したからと言ってオーバーライドされてるなんて言わない
0304デフォルトの名無しさん
2016/12/05(月) 19:53:59.55ID:HK8B5iWy>>263(>>260?)が言っているnew/deleteことが分からんのかもしれないが。
当然、俺は全く見ていない
0305デフォルトの名無しさん
2016/12/05(月) 19:59:25.50ID:Ij/A1A/c0306デフォルトの名無しさん
2016/12/05(月) 20:07:08.59ID:lQvX1MVrなんだよその謎基準w
0307263
2016/12/05(月) 20:25:56.28ID:oh/e0eB5override = inter-
overload = intra-
内と外の境界をどこに置くかで定義が変わる。
0308デフォルトの名無しさん
2016/12/05(月) 20:31:39.99ID:SJelErcpこのスレ見ていますと、
C++は、難しい言語なんですね。
覚えてしまえば便利なんだけど
誰しも完全には覚えていない
言語のように思います。
私は記憶力の悪い馬鹿なので
頭のよくなる薬ができるまで
C++は触らないようにいたします。
0309デフォルトの名無しさん
2016/12/05(月) 20:36:21.46ID:q1I0LUvJ0310デフォルトの名無しさん
2016/12/05(月) 20:41:41.42ID:lQvX1MVr0311デフォルトの名無しさん
2016/12/05(月) 21:03:57.36ID:Xa5pMyWrそもそもnewもdeleteも非staticなメンバとして定義できない
だからnewとdeleteはoverloadはできるが、そもそもoverrideどうのこうのという議論自体がおかしい
ID:oh/e0eB5は完全に勘違いしててクラス内に書いてあるメソッドをoverrideできるんじゃなくて仮想メソッドをoverrideできるの
こういう人ってクラスのメンバを全部virtual宣言したり必ず仮想デストラクタをつけるよね
C++の言語仕様を全く理解してないと言っても過言ではないが、Javaとかから流れてきた人なのかな
0312263
2016/12/05(月) 21:15:20.00ID:oh/e0eB5抽象的なoverrideの話は、言語仕様に依存する static や virtual といった属性と何の関係もない。
あなたが、既定のグローバルな new や delete がどのように定義されているかさえ知らないってのはよくわかった。
0313デフォルトの名無しさん
2016/12/05(月) 21:21:35.11ID:ddMLk6teC++のreplaceable functionってよく理解してないんだ
アホな俺に教えて
0314デフォルトの名無しさん
2016/12/05(月) 21:25:06.89ID:0ETq54/D違う
overrideというのはサブクラスからベースクラスのメソッドを上書きすること
staticメソッドでは非staticメソッドと違って暗黙的にクラスのインスタンスを受け取ることがないためクラスの話ですらない
ADLについて議論するならまだしも、クラス内に書いたら強制的にstaticにされてしまうnewやdeleteをクラスという枠組み前提で話すのは間違いだよ
そもそもクラスのメンバ関数と言うものが何かもわかってないのかな?
0315263
2016/12/05(月) 21:27:27.80ID:oh/e0eB5<new> をインクルードして グローバルな new や delete を置き換えるのはオーバーロード。
グローバルなnew や deleteを呼ばないようクラスのnew deleteで置き換えるのはオーバーライド。
さらにそのクラスでnew や deleteの引数違いなメソッドを複数提供すればオーバーロード。
0316263
2016/12/05(月) 21:32:31.98ID:oh/e0eB5グローバルの new, delete は暗黙の基底クラスの静的メソッド扱い。名前なしだからそう見えないだけ。
0317デフォルトの名無しさん
2016/12/05(月) 21:33:42.07ID:nEyLAjLtもうこれ以上にわかりやすい説明は無理
誰か変わってくれ
0318デフォルトの名無しさん
2016/12/05(月) 21:38:26.70ID:2NaB5jfD無理
無知はバカとは思わないがアレは本当にバカってやつだと思う
0319263
2016/12/05(月) 21:43:39.81ID:oh/e0eB5オーバライドすることなくクラスの new delete を規定の名前なしグローバルのnew, deleteから置き換えることなどできないからだ。
オーバロードとオーバライドの定義をちゃんと理解せずに回答するのはもうやめてもらえるか?
0320デフォルトの名無しさん
2016/12/05(月) 21:46:15.11ID:kGsjhS/Joperator newは型引数と実引数でオーバーロードされた関数
オーバーライドは派生クラスが親クラスの仮想関数の挙動を上書きする事
0321デフォルトの名無しさん
2016/12/05(月) 21:49:30.78ID:kGsjhS/J0322デフォルトの名無しさん
2016/12/05(月) 21:50:58.52ID:GeoPwQ8Rあなたにとって
class Base {
static void doSomething();
};
class Sub : public Base {
static void doSomething();
};
はオーバーライド?オーバーロード?
0323デフォルトの名無しさん
2016/12/05(月) 21:54:27.23ID:ryWJUcx/0324263
2016/12/05(月) 21:54:33.97ID:oh/e0eB5オーバーロードでは、静的な型推論の優先付けできない。
オーバーライドすることにより、はじめて静的な型推論の優先付けが成立する。
まず自分のメソッドを、なければ親のメソッドを辿って探す型推論の優先付け。
0325デフォルトの名無しさん
2016/12/05(月) 21:56:27.49ID:nEyLAjLt0326263
2016/12/05(月) 21:58:11.44ID:oh/e0eB5少なくともオーバーライドである事は確か。親子関係による優先付けが発生するから。
オーバロードの誤用も可。
0327デフォルトの名無しさん
2016/12/05(月) 22:07:57.44ID:rZWSQmpdできるわけないやろw
0328263
2016/12/05(月) 22:16:44.60ID:oh/e0eB50329デフォルトの名無しさん
2016/12/05(月) 22:19:29.78ID:nEyLAjLt0330デフォルトの名無しさん
2016/12/05(月) 22:23:15.37ID:kGsjhS/J0331デフォルトの名無しさん
2016/12/05(月) 22:27:22.59ID:+86vS9TV0332263
2016/12/05(月) 22:32:43.25ID:oh/e0eB5親子関係などによるメソッド推論の優先付けを伴うのがオーバーライド。
オーバーライドとオーバーロードは同時に成立しうる。排他的ではない。
0333デフォルトの名無しさん
2016/12/05(月) 22:34:17.42ID:x3Qm2Sdl0334デフォルトの名無しさん
2016/12/05(月) 22:36:02.30ID:+86vS9TVnew から離れていいから,オーバーライドとオーバーロードが同時に成立するコードを見せてくれ
0335デフォルトの名無しさん
2016/12/05(月) 22:37:53.65ID:kGsjhS/J究極的には呼び出し先がインスタンス毎に変わるのだから。
0336デフォルトの名無しさん
2016/12/05(月) 22:38:15.95ID:2NaB5jfDそれは普通に成立するぞ
0337デフォルトの名無しさん
2016/12/05(月) 22:41:20.81ID:W20d9Bunもともと中途半端な動作な訳だからオブジェクト指向的には~とかの議論でさえする意味ないとおもうが
C++は自身のこの機能についてどっちとも言ってない、だからどっちでもないでいいだろ
0338デフォルトの名無しさん
2016/12/05(月) 22:48:00.07ID:lQvX1MVr厳格な話をするなら規格が必要であって、それはすなわち特定の言語に絞って語らないと無理
0339デフォルトの名無しさん
2016/12/05(月) 22:48:07.34ID:+86vS9TVオーバーライドは引数の種類が変わらない,オーバーロードは引数の種類が変わる.
だから両立は出来ないはずなんだが
0340デフォルトの名無しさん
2016/12/05(月) 22:48:15.59ID:2NaB5jfD普通に”Overloaded operators”の中でnew deleteが書かれてるけど
0341デフォルトの名無しさん
2016/12/05(月) 22:50:10.06ID:lQvX1MVr厳格で言語によらない定義だというなら根拠を示すべきだ。
0342デフォルトの名無しさん
2016/12/05(月) 22:51:57.06ID:2NaB5jfD俺とお前で両立の定義が違ったかもな
struct A{
virtual void a()=0;
virtual void a(int)=0;
};
これを構築できるように派生したらaはオーバーロードしてるしオーバーライドもしてる。という意味で俺は両立出来ると言った
0343デフォルトの名無しさん
2016/12/05(月) 22:52:22.32ID:lQvX1MVrいや、一度オーバーロードしたものを(引数の種類は変えずに)サブクラスでオーバーライドすることはできる
0344デフォルトの名無しさん
2016/12/05(月) 22:53:46.89ID:nEyLAjLtそれはオーバーロードであってオーバーライドの例ではない
0345デフォルトの名無しさん
2016/12/05(月) 22:54:51.57ID:2NaB5jfD構築できるように派生するにはオーバーライドするしかないだろう?
0346デフォルトの名無しさん
2016/12/05(月) 22:58:01.25ID:lQvX1MVrobj.func(); という式においてobj の動的な型に応じて実際の関数が呼ばれることをオーバーライドと言う。
0347デフォルトの名無しさん
2016/12/05(月) 22:58:36.17ID:nBxFX+pd><new> をインクルードして グローバルな new や delete を置き換え
置き換えるのにどうしてインクルードが必要なのか
0348デフォルトの名無しさん
2016/12/05(月) 23:06:27.98ID:kGsjhS/J仮想関数でない奴は
0349デフォルトの名無しさん
2016/12/05(月) 23:11:21.87ID:nBxFX+pd規格の10.3にはoverridesという単語が出てきてかつ斜字体なので用語なのだが何を言っているんだお前は
因みにC++98の時からある
まさか規格にカタカナは書かれていないとでも言いたいのか
0350デフォルトの名無しさん
2016/12/05(月) 23:24:58.31ID:Ij/A1A/c日付変わってID変わったらいなくなるよ。
0351263
2016/12/05(月) 23:31:31.40ID:oh/e0eB5釣ってなどいない。
オーバーロードが既存のメソッドを置き換えできるのは、オーバーライドが行われたから。
>>347
失礼。<new>は必要ない。nothrowの制御と勘違いしてた。
0352デフォルトの名無しさん
2016/12/05(月) 23:41:10.21ID:2NaB5jfD0353263
2016/12/05(月) 23:56:17.43ID:oh/e0eB50354デフォルトの名無しさん
2016/12/05(月) 23:59:54.08ID:kX3Q4svv抽象化したオブジェクト指向は人によって考え方に差があるから用語の定義とかについて論ずるだけ無駄
0355デフォルトの名無しさん
2016/12/06(火) 00:06:10.61ID:QfNOYQI4「現象AをBと解釈することもできる。」で満足すべきところで
「AはBだ!」と主張してしまうのか。
0356デフォルトの名無しさん
2016/12/06(火) 00:11:44.86ID:VyUdPje10357デフォルトの名無しさん
2016/12/06(火) 00:20:55.18ID:ed0lUfqA0358デフォルトの名無しさん
2016/12/06(火) 00:27:15.13ID:Eq2L1D850359デフォルトの名無しさん
2016/12/06(火) 01:02:27.01ID:0b/2xA1kさっぱりわからんが、勝利おめでとう!
0360デフォルトの名無しさん
2016/12/06(火) 01:14:21.67ID:0b/2xA1kオーバーロードやオーバーライドはオブジェクト指向の中で定義されている言葉なのか?
もう、コンピュータサイエンスの言葉としてのオーバーロードやオーバーライドの話
をしているような感じからな
俺、情報系の学科には縁遠いところの出だから、ズバリコンピュータサイエンスの知識
は幼稚園児レベルになるからな。。大学レベルにはほど遠い,orz
(ほんとはコンピュータサイエンスは超重要なんだろうけどな)
0361デフォルトの名無しさん
2016/12/06(火) 02:23:43.51ID:PnhmU0S20362デフォルトの名無しさん
2016/12/06(火) 02:24:21.93ID:PnhmU0S20363デフォルトの名無しさん
2016/12/06(火) 03:02:41.09ID:Wqo8M9+m俺も参加したかったわー
0364デフォルトの名無しさん
2016/12/06(火) 04:15:23.89ID:8D/vbLGJ誰が見に行くんだろうな
0365デフォルトの名無しさん
2016/12/06(火) 05:01:33.51ID:ig7i7qkABoost使えばc++11のlambdaが使えなくても出来ますか?
0366デフォルトの名無しさん
2016/12/06(火) 07:58:54.09ID:qXZeYWw/関数オブジェクトを引数にとる関数はテンプレートであり、関数オブジェクトの型ごとに別々の関数としてコンパイルされるのでファイルサイズも大きくなる。
配列で実行したい場合は、基底クラスのpublicな仮想関数を実装した派生クラスのインスタンスをテンプレートでない関数に参照なりポインタなりで渡すといい。
0367デフォルトの名無しさん
2016/12/06(火) 08:04:00.59ID:EqtjFn+Mstd::function
0368デフォルトの名無しさん
2016/12/06(火) 13:32:25.71ID:QJVgZbOVその制約はどこからくるの?
0369デフォルトの名無しさん
2016/12/06(火) 13:33:39.26ID:S+t491v80370デフォルトの名無しさん
2016/12/06(火) 13:42:09.34ID:MylKYtcA要件出し全否定か
0371デフォルトの名無しさん
2016/12/06(火) 13:43:39.76ID:S+t491v8>>365の仕様を>>368が実装するわけじゃないのでその反駁は無意味
0372デフォルトの名無しさん
2016/12/06(火) 14:07:32.78ID:QJVgZbOV0373デフォルトの名無しさん
2016/12/06(火) 14:09:34.92ID:Y8nBMTUHstd::bindとstd::mem_fnは面倒っちいけどメンバ関数のポインタだから仕方ない
http://ideone.com/91JDrF
この場合std::unique_ptrはコピーコンストラクタがdelete指定になっているので使えない
0374デフォルトの名無しさん
2016/12/06(火) 16:04:03.46ID:EzooQ0Q1関数オブジェクトの配列は各要素がnaitiveコード列かと思った
0375デフォルトの名無しさん
2016/12/06(火) 20:10:27.18ID:QJVgZbOV0376デフォルトの名無しさん
2016/12/06(火) 20:15:35.52ID:ndfTDeJnということだな
0377デフォルトの名無しさん
2016/12/06(火) 21:42:11.99ID:7XmOARyRお前アスペか?unique_ptrを使ってみたところbindでエラーが出たから
仕方なくshared_ptrを使ったってことだろ
生ポインタでも当然構わない
http://stackoverflow.com/questions/20268482/binding-functions-with-unique-ptr-arguments-to-stdfunctionvoid
http://qiita.com/rinse_/items/2873fa75e63153dd6f85
こういう件もあるしいろいろ面倒なんだろ
でも少し考えてみると当然なんだよな
関数にunique_ptrを渡すと所有権が呼び出し先に移ってしまいいろいろ面倒なことになる
0378366
2016/12/06(火) 21:52:31.40ID:qXZeYWw/std::bindとstd::mem_fnは必要ない。当然、shared_ptr も必要ない。
http://ideone.com/q8ngfp
0379デフォルトの名無しさん
2016/12/06(火) 22:10:33.84ID:ltofPI3Uナマポで構わないところにshared_ptrを持ち出すことが不適切と言われている
という認識には至らなかったようだ
0380デフォルトの名無しさん
2016/12/07(水) 02:07:23.12ID:GZUHYq4pいやだからさ・・・classをnewしなきゃらならないでしょ今回の場合
誰がdeleteするかって話をしてるんだが
deleteが面倒だからスマポ使ったわけでしょ
0381デフォルトの名無しさん
2016/12/07(水) 02:13:54.48ID:GZUHYq4pnew不要だなこれ
http://ideone.com/AeaHf4
0382デフォルトの名無しさん
2016/12/07(水) 03:19:04.95ID:ujGMInBHc++11が使えなくてBoostでって話ならboost::functionあたりで適当に
0383デフォルトの名無しさん
2016/12/07(水) 10:13:47.80ID:aRBhCK1gwinsock2でTCP IP通信をするプログラムを勉強しているのですが、
クライアントプログラムを立ち上げていないのにも関わらず、listen(serverSock,5);の戻り値が0になります。
なぜでしょうか?listen(serverSock,5)の引数を間違えているのでしょうか?
また、listen関数のタイムアウト時間は何秒程度に設定されているのでしょうか?
開発環境はVS2015,VC++です。必要があれば追記します。
0384デフォルトの名無しさん
2016/12/07(水) 10:51:22.83ID:eOxcQ6140(成功)になって正しいんじゃ?
0385383
2016/12/07(水) 12:50:14.65ID:aRBhCK1g勘違いしていました。ありがとうございます
0386デフォルトの名無しさん
2016/12/07(水) 18:15:44.93ID:+0olbaDalistenしたら受け付けはオペレーティングシステムが行う
アプリが固まっていてもクライアントからの接続要求は処理される
acceptは接続をオペレーティングシステムシステムから受け取るだけ
接続要求がなければ無期限に待つ
0387デフォルトの名無しさん
2016/12/07(水) 18:37:28.05ID:1BXK2gQc0389デフォルトの名無しさん
2016/12/07(水) 19:05:18.68ID:iM29S6qT「やるまえ」でなくても、同時でおk
同時でCだけでなくアセンブラも必要
0390デフォルトの名無しさん
2016/12/07(水) 19:22:50.32ID:lJ3XWqgd>>286は間違っているからね
GDIplusのBitmapをmake_sharedしても問題ない
make_sharedはグローバルなアロケーターを使ってBitmapを確保するし
また、グローバルなアロケーターを使ってdeleteするから
整合性は保たれる
Bitmapは基底クラスにGDIplus独自のnew/deleteを持っているけど
make_sharedした場合は、これらは使われない
だから問題は起きない
Bitmap::FromFileのように、DLL内でBitmapをnewしてナマポを返す場合
クラス定義のdeleteを使わなければならないが
Bitmapの生成時にmake_sharedを挟み込む余地はないので
初めっから使えないし、問題は起きない
Bitmap::FromFileのように、DLL内でBitmapをnewしてナマポを返す場合
使い手が自分でdeleteするわけだけど、この時、DLLとアプリの間で
new/deleteが不一致になったらマズいので、自前のdeleteが定義してある
普通に delete bitmap; としても問題が出ないようにね
で、deleteを独自のものにしたのなら、newも独自のものに定義しとかないとマズいよね
ってことで、newも独自なものに定義してある
普通にnew/deleteした場合や、ナマポをshared_ptrに入れた場合は
クラス定義のnew/deleteが使われるので、これはこれで問題がない
常に確保した時と同じ方法で解放されるので問題が起きないって理屈
0391デフォルトの名無しさん
2016/12/07(水) 19:26:27.65ID:lJ3XWqgd>Bitmap::FromFileのように、DLL内でBitmapをnewしてナマポを返す場合
>クラス定義のdeleteを使わなければならないが
>( Bitmap::FromFile内部で行われる )
>Bitmapの生成時にmake_sharedを挟み込む余地はないので
>初めっから使えないし、問題は起きない
0392デフォルトの名無しさん
2016/12/07(水) 19:39:19.41ID:1BXK2gQcありがとうございます
0393デフォルトの名無しさん
2016/12/07(水) 19:52:06.31ID:Ao5egMeLアメリカ人やイギリス人の
作ったプログラムを
よみながら直してるけど
さっぱりわかりません。
とりあえず見るのが20万ステップで
ドキュメントはないです。
ささやかなコメントが頼りです。
勉強しながら見てますけど
どう見てもぐちゃぐちゃです。
もう辞めたいです。
つか辞めます。
0394デフォルトの名無しさん
2016/12/07(水) 20:20:42.25ID:2yTgyuYL問題あるかどうかはクラスを提供するマイクロソフトが判断すること。
ヘッダーを見る限りvoid* 型別名 GpImage* のポインタが返されてることだけがわかる。
>>390,391がマイクロソフト社のソースを実際に見て確認したのなら信頼していいだろう。
0395デフォルトの名無しさん
2016/12/07(水) 20:35:25.36ID:pN2ME9ZlGdiplusが配置newを使ってるせいでDEBUG_NEWが使えなくて面倒くさいなと思っていたが、
そんな理由だったのか。
いままでnew/deleteの問題があるからDLLのインターフェースはどうしてもC++っぽくない形に
せざるを得なかったんだけど、そんな手も使えるんだな。参考になった。
0396デフォルトの名無しさん
2016/12/07(水) 20:37:31.13ID:2yTgyuYL>>390,391が情報源を示してくれれば、ある程度の説得力は得られるだろうが、
この人は、delete とデストラクタを混同して語っている気がしてならなない。
0397デフォルトの名無しさん
2016/12/07(水) 20:48:59.93ID:2yTgyuYL0398デフォルトの名無しさん
2016/12/07(水) 20:51:11.20ID:uSFo19YS0399デフォルトの名無しさん
2016/12/07(水) 20:55:48.50ID:uSFo19YS0400デフォルトの名無しさん
2016/12/07(水) 21:03:14.74ID:pN2ME9Zl・Gdiplusはそんなことしていない
・自前のnew/delete定義でもDLL境界の問題を隠蔽することはできない
0401デフォルトの名無しさん
2016/12/07(水) 21:17:36.98ID:uSFo19YSgdiplusbase.hでググれば
0402デフォルトの名無しさん
2016/12/07(水) 21:17:42.26ID:2yTgyuYLこのスレがワッチョイ非対応であることを八百万の神に感謝し、今日という日が終わるのを待て。
0403デフォルトの名無しさん
2016/12/07(水) 21:21:58.54ID:KapaWVji0404デフォルトの名無しさん
2016/12/07(水) 21:31:26.04ID:uSFo19YSあと、newオーバーライド君はnew deleteのDLL境界の問題について一ミリも理解してないし、理解する気もないみたいだから聞いても仕方ないよ
0405デフォルトの名無しさん
2016/12/07(水) 21:36:23.67ID:lJ3XWqgd>またもやズレた話になってきた印象。
Bitmap bmp(〜);
とした場合はどうなんだねチミ
この場合はクラス定義のnew/deleteは呼ばれないぞ
スタック上に作ることがOKなら
クラス定義のnew以外の方法で確保した領域にBitmap置くのも自由だろ
メモリ確保/解放の整合性さえあってればな
スタックがOKでmake_sharedがダメな理由がどこにある?
0406デフォルトの名無しさん
2016/12/07(水) 21:47:16.13ID:5VlRXYq6一対多で勝利を収めた方ですよね?その偉業と名声を語り継ぐべくコテハン付けるべきだと思います!
この人の言葉なら… と周囲からの反応も違った物になると思いますので。
0407デフォルトの名無しさん
2016/12/07(水) 21:50:16.54ID:2yTgyuYL>スタックがOKでmake_sharedがダメな理由がどこにある?
それを言い出すとクラス独自なnew/deleteの存在意義を否定することになるけど、
それでいいかどうかはクラス利用者ではなくクラス設計者が判断すべきことじゃないかな。
あなたがあえてマイクロソフトに代わってGDI+クラスを保守サポートする覚悟があるなら、ぜひ勝利宣言なさってください。
0408デフォルトの名無しさん
2016/12/07(水) 21:57:37.18ID:lJ3XWqgdnew/deleteを独自定義しているhoge_tクラスがあったとしよう
struct piyo_t
{
int reference_counter;
hoge_t hoge;
};
auto piyo = new piyo_t;
この場合、hoge_tで独自定義したnew/deleteは呼ばれないが、これはどうするんだ?
C++はこーゆー入れ子の構造体を認めているし
実際make_shared内で起こっていることもコレなわけ
これを一切禁止するときは、コンスラクタ/デストラクタを隠す
逆にコンストラクタ/デストラクタが公開されているということは
こーゆーのを認めているということ
0409デフォルトの名無しさん
2016/12/07(水) 22:08:01.19ID:lJ3XWqgd何故そうなる?
存在意義は>>390で書いた
new/deleteで不整合が発生しないようにするため
>それでいいかどうかはクラス利用者ではなくクラス設計者が判断すべきことじゃないかな。
コンストラクタが公開されている以上、どこに生成するかはプログラマの自由
スタックがOKなのにmake_sharedがダメな理由など無い
ただし、DLL内で生成されたものに関しては、クラス定義のdeleteを使ってくださいってだけ
0410デフォルトの名無しさん
2016/12/07(水) 22:08:12.80ID:2yTgyuYL私ではなくhoge_tクラス設計者にご確認のうえ、勝利宣言をどうぞ。
0411デフォルトの名無しさん
2016/12/07(水) 22:16:10.80ID:uSFo19YS0412デフォルトの名無しさん
2016/12/07(水) 22:30:57.55ID:2yTgyuYL0413デフォルトの名無しさん
2016/12/07(水) 23:37:18.51ID:lJ3XWqgdコンストラクタを公開しているのに
スタックには作れません、構造体で入れ子にできません、make_sharedは使えません
っていうんなら、ドキュメントに書いておかないと最大限マズイ
だからお前はMSDNを漁ってmake_sharedが使えないって文章を探してこい
書かれてない場合は通常の発想、使えるってこと
0414デフォルトの名無しさん
2016/12/08(木) 00:28:40.63ID:Dl6k+dfyそしてスタックのアドレスの範囲を決めうちし、それ以外のアドレスに構築されたら故意に不具合が発生するような実装をしない限りスタック以外に構築しても問題ない。
そんなアホみたいな実装をしているという大胆な主張ですね。わかりません。
0415デフォルトの名無しさん
2016/12/08(木) 09:22:15.11ID:V15cSFDlglslのような、スウィズル文法をC++で定義することはできるか?
glslの例
float3 v = float3(1,2,3);
float3 y = v.yyy; // y = (2,2,2)
実用上、float3クラスに余計な成分は持たせたくない
class float3{public : float x,y,z; ...(?)...};
(全てのスウィズルに対応する成分をもたせることで可能だが、消費するメモリ量が組合せ爆発を起こす)
逆に、メモリが増えなければ成分は持たせてもよいから
サイズ0の中間クラスを定義してそこからキャストすればできそうな気がしたがどうだか?
0416デフォルトの名無しさん
2016/12/08(木) 09:43:44.17ID:f999g3yestruct A{};
sizeof(A)==1
だから。
やるとしたら
struct XXX{float x,y,z;operator vec3(){return vec3(x,x,x);}}
のような型を(3要素だけなら)27通り作ってunionで持たせるとか。
0417デフォルトの名無しさん
2016/12/08(木) 09:48:16.18ID:V15cSFDlああvec3でしたな
あとunion という手がありましたねえ
考え直してみます
0418デフォルトの名無しさん
2016/12/08(木) 13:31:27.61ID:iaOJa8znC++ならC++らしく書くべきじゃん
https://ideone.com/N697kB
0419デフォルトの名無しさん
2016/12/08(木) 13:38:19.98ID:vGsZ5jRRtemplateのインスタンス化を利用してメンバの組み合わせをコンパイル時に決定するのもあった
0420デフォルトの名無しさん
2016/12/08(木) 13:40:05.12ID:vGsZ5jRRtypedef float float3::*member_type;
を
using member_type = float float3::*;
と書いても同じだね
0421デフォルトの名無しさん
2016/12/08(木) 13:53:59.18ID:dGX7aDi+その書き方は使う方が流石に面倒すぎて無くない?
0422デフォルトの名無しさん
2016/12/08(木) 13:57:52.40ID:vGsZ5jRRわかってないなあ
もし3^3通りでなくて10^10通りだったらどうなるかって話なのに
0423デフォルトの名無しさん
2016/12/08(木) 14:00:52.41ID:dGX7aDi+それでも
float3 b(a.x,a.z,a.z);
の方が書くの楽なのは本末転倒だと思うよ
0424デフォルトの名無しさん
2016/12/08(木) 14:11:00.32ID:WXYhvZot最大でも4^4通りです
パターン化できれば書き出しは別にプログラムすればいいと思っています
今>>416案でできそうな詰まりそうな感じです
0425デフォルトの名無しさん
2016/12/08(木) 14:22:13.82ID:vGsZ5jRRこの場合はな
メンバ関数を含んでたりしたらまた違うんだよ
そういう場合constexprの威力を感じる
C++11はconstexprの用途が大幅に制限されてたのがC++14で目覚めたしな
unionも目覚めたんだぜ
0426デフォルトの名無しさん
2016/12/08(木) 14:52:06.28ID:iaOJa8znそっちより短くしてやったぜ
https://ideone.com/N697kB
0427デフォルトの名無しさん
2016/12/08(木) 19:55:50.56ID:Oqc+z4pdEffective Modern C++の訳がひどすぎる
0428デフォルトの名無しさん
2016/12/08(木) 19:59:18.54ID:nWlkNCguhttps://ideone.com/OwnhEG
メンバのx, y, zがメモリ上で連続してるかどうかは保障されてないんだっけ?
0429デフォルトの名無しさん
2016/12/08(木) 20:28:22.34ID:NkEermSohttp://thbecker.net/articles/rvalue_references/section_01.html
0430デフォルトの名無しさん
2016/12/08(木) 22:06:28.35ID:eMOVQdLSおっこれ良さそう。ありがとう
0431デフォルトの名無しさん
2016/12/08(木) 22:43:09.13ID:ZbTHf5INわりと速いし、stdのSTLを使った実行ファイルよりもファイルサイズが小さくなるし。
0432デフォルトの名無しさん
2016/12/08(木) 23:03:53.33ID:mq/wDsmO0433デフォルトの名無しさん
2016/12/08(木) 23:34:38.83ID:UAmWCZIjどうして保証されると思った?
0434デフォルトの名無しさん
2016/12/09(金) 00:35:55.63ID:5DBzrJdLstdみたいに見る方法あれば完璧
0435デフォルトの名無しさん
2016/12/09(金) 05:35:34.69ID:b9kIASzF試してないがVisual Studioだったら autoexp.datを編集すればいける気がする
ttps://msdn.microsoft.com/ja-jp/library/zf0e8s14.aspx
ttp://blogs.wankuma.com/melt/archive/2007/10/01/98927.aspx
0436デフォルトの名無しさん
2016/12/09(金) 05:45:05.45ID:b9kIASzF公式のがあったわ
https://github.com/electronicarts/EASTL/blob/master/doc/AutoExp.dat
0437デフォルトの名無しさん
2016/12/09(金) 09:17:44.85ID:inf5Yz5xありがとう
これで無敵な気がする
0438デフォルトの名無しさん
2016/12/09(金) 09:51:47.55ID:wyGLW805VS2017RCにはautoexp.datがないのでNatvis一択っぽい。
ネイティブ オブジェクトのカスタム ビューの作成
https://msdn.microsoft.com/JA-JP/library/jj620914(v=VS.140,d=hv.2).aspx
0440デフォルトの名無しさん
2016/12/09(金) 17:02:16.15ID:iZKXxh2B>>415が最近やったことなんで自分のやり方
http://ideone.com/33POAz
a.xy とか a.xxx とかを括弧なしでやろうとしたのでメンバ関数の数はえらいことになるけどGLSLと同じ書き方ができる
xyとかxyzとかyzwとかは左辺値にも出来るお
あとswizzle関数は可変長テンプレートでまとめることも一応できる
無名共用体で別の名前で参照するコードが混在するのはパフォーマンス的にはよくないらしいけど
0441デフォルトの名無しさん
2016/12/09(金) 18:23:14.01ID:wsqzeERHマクロで大量にグローバルな名前汚すのはちょっとな…
0442デフォルトの名無しさん
2016/12/09(金) 19:04:38.52ID:iZKXxh2B括弧を不要にして大量のマクロか、括弧必要にしてxyz()みたいな形か、利用者が選べるようにはしてる
まぁそもそも280かそこらのメンバ関数が作られるんでpch使いたくなるけど・・・
xy, xxxとかの書き方をあきらめればswizzle<1, 2, 0>()みたいな単一のメンバ関数テンプレートにまとめられるとは思う
左辺値になるものと右辺値のみのものを両方作れるかどうかは不明
0443デフォルトの名無しさん
2016/12/09(金) 19:14:50.35ID:wyGLW805VS2017RCでEASTL.natvisを使うことでネイティブ オブジェクトのカスタム ビューが機能することを確認できた。
以下 natvisファイルを 開発環境の \Common7\Packages\Debugger\Visualizersディレクトリに入れればOK。
https://github.com/electronicarts/EASTL/blob/master/doc/EASTL.natvis
余談だが、Visual Studio CodeのC/C++拡張パッケージもnatvisファイルによるデバッガ支援に対応しているらしく、
以下に示したユーザープロファイルのフォルダにnatvisファイルが配置されているのがわかる。
%USERPROFILE%\.vscode\extensions\ms-vscode.cpptools-0.9.2\debugAdapters\vsdbg\bin\Visualizers
0444デフォルトの名無しさん
2016/12/09(金) 20:22:28.59ID:Xrkhmoyj保障されているともいないとも思ってないよ
最初から配列使っとけばよかったね
http://ideone.com/Sz1fP4
0445デフォルトの名無しさん
2016/12/09(金) 20:38:44.65ID:EUMrXHYZ0446デフォルトの名無しさん
2016/12/09(金) 21:05:10.62ID:wsqzeERHアクセス指定子が同じであれば連続するから
0447デフォルトの名無しさん
2016/12/09(金) 22:24:22.58ID:RdgUgAkihttp://melpon.org/wandbox/permlink/UirL2gCU10W6t5Z3
0448デフォルトの名無しさん
2016/12/09(金) 22:50:57.81ID:3Hvgn27Vソースは?
0449デフォルトの名無しさん
2016/12/09(金) 23:07:53.41ID:iZKXxh2Bえぐいなこれ・・・w
理解に苦労したけど要するに関数呼び出しでなく、暗黙のキャストで構造体にswizzleを実行させてるのね
415じゃないけど有難く使わせてもらおう
0450デフォルトの名無しさん
2016/12/09(金) 23:17:49.70ID:wsqzeERH方法論は >>416 と一緒だね
それをBoost.Preprocssorで実装してる。
0451デフォルトの名無しさん
2016/12/09(金) 23:21:00.61ID:wsqzeERH自分で規格読め
0452デフォルトの名無しさん
2016/12/09(金) 23:40:19.73ID:1bTr9oX7って言えばいいのに…
0453デフォルトの名無しさん
2016/12/10(土) 00:53:02.38ID:6N2vubn232bit/64bit環境の違いも影響するだろうし
ILP64環境でlong a b c;なら連続するんじゃね(すっとぼけ)
0454デフォルトの名無しさん
2016/12/10(土) 06:21:03.18ID:RDLcPD4mアラインメントの問題なら配列でも同じように配置される。
規格上はデータメンバーの順番は定められてはいるが間のパディングについては定められていない
実際多くのコンパイラでpragma packでパディング入れ方を制御できる。
ただアラインメントの問題も無いのにパディング入れる理由もないしデフォルトでそんな事する処理系も存在しないだろうから考慮しなくていいんじゃね。
0455デフォルトの名無しさん
2016/12/10(土) 08:18:46.73ID:0wqqV0ls0456デフォルトの名無しさん
2016/12/10(土) 08:30:52.62ID:sVZRaydg0457デフォルトの名無しさん
2016/12/10(土) 09:04:34.24ID:FMtwqCBj0458デフォルトの名無しさん
2016/12/10(土) 09:18:41.66ID:sVZRaydg>アクセス指定子が同じであれば連続するから
アクセス指定子?
オツムの進化がC++03で止まっているハゲに騙されたのだろうか
0459デフォルトの名無しさん
2016/12/10(土) 10:46:24.06ID:RDLcPD4m0460デフォルトの名無しさん
2016/12/10(土) 14:15:18.10ID:SiBj5VPEリアルでは普通に違いない
0461デフォルトの名無しさん
2016/12/10(土) 14:42:33.83ID:Cln915zj0462デフォルトの名無しさん
2016/12/10(土) 20:01:22.25ID:RDLcPD4m0463デフォルトの名無しさん
2016/12/10(土) 22:18:07.27ID:eJ00H2uaだが俺もID:RDLcPD4mみたいにはなりたくないな
0464デフォルトの名無しさん
2016/12/10(土) 23:13:30.46ID:RDLcPD4mへぇ、具体的にどんな所が?
0465デフォルトの名無しさん
2016/12/10(土) 23:46:10.91ID:eJ00H2uaリアルでもわざわざ人にくってかかんのか?
お前も同類
0466デフォルトの名無しさん
2016/12/10(土) 23:49:19.28ID:RDLcPD4m行動が矛盾しすぎだろw
0467デフォルトの名無しさん
2016/12/11(日) 01:32:59.58ID:MKBClLrx0468デフォルトの名無しさん
2016/12/11(日) 10:11:52.76ID:V6KbZEV0論に属人性を持ち込もうとする低劣な輩には参加資格がない
0469デフォルトの名無しさん
2016/12/11(日) 10:22:18.26ID:vFkR62Wjいや明らかに間違っていることを強弁してる場合性格を疑うが
0470デフォルトの名無しさん
2016/12/11(日) 10:25:39.87ID:/H9INus/>明らかに間違っていることを強弁
ってどのレスのことよ
0471デフォルトの名無しさん
2016/12/11(日) 10:50:57.60ID:28MCt8dd自分はアカデミックな対話は出来ませんっていう自己紹介?
0472デフォルトの名無しさん
2016/12/11(日) 10:56:25.56ID:ZUXzDC9zそれはそうと、EASTL 3.05.00 リリース
https://github.com/electronicarts/EASTL/releases/tag/3.05.00
・Implemented eastl:string_view, a non-owning string type that isn't templated on an allocator making it suitable for use at API boundaries.
http://en.cppreference.com/w/cpp/string/basic_string_view
・Adding support for typed get for tuple (e.g. get(tuple& t)).
・CoreAllocatorAdapter::operator= now copies the allocator name.
・Fixed strict-aliasing issues in the eastl::intrusive_list implementation.
・Adding move semantic guards around test code requiring that language feature.
・Improving eastl::vector implementation to move elements (instead of copying) during a resize.
0473デフォルトの名無しさん
2016/12/11(日) 11:37:08.38ID:ZUXzDC9z固定バッファに対して basic_stringに似た機能を扱うためのアロケーターなしクラスだったか。
なるほど今までなかったのが不思議なほどだ。
GCCでは試験的にヘッダーファイルでbasic_string_viewが提供されているが、VisualStudioではまだ提供しないようだ。
VisualStudioでbasic_string_viewを試したければ、boostかeastlを使うことになるのかな。
0474デフォルトの名無しさん
2016/12/11(日) 12:43:26.39ID:/H9INus/2015でもnugetにあったような気がするけど
0475デフォルトの名無しさん
2016/12/11(日) 13:18:35.08ID:vQQtrq1FEASTLは次期規格にも積極的だな
0476デフォルトの名無しさん
2016/12/11(日) 21:28:51.79ID:NV+vmDfg0477デフォルトの名無しさん
2016/12/11(日) 21:32:13.90ID:NV+vmDfg0478デフォルトの名無しさん
2016/12/11(日) 23:09:46.00ID:28MCt8ddだから説明は全くしないチキンが多いのよ。
それに罵倒が入るのは何も具体的な事は語らない安全な位置だから反撃来ないだろうと思ってるんだろうね。
端的に言うと他人を攻撃する事にしか興味の無い奴が居座ってる
0479デフォルトの名無しさん
2016/12/11(日) 23:17:03.44ID:6HZEdd7Mどちらかというと嘘を平気でつくから指摘を受けるのだと思っていたが
0480デフォルトの名無しさん
2016/12/11(日) 23:47:20.99ID:yhEzNFx3反撃来ないだろうと思ってるクズは死すべし
間違いが入らないよう全く説明しないけどエスパーしろって?
0481デフォルトの名無しさん
2016/12/11(日) 23:53:11.96ID:VXRcpztNエスパーして頑張って答えた奴に対して労いどころかダメ出しする始末
自演なのかわからんが、質問者と一緒になって回答者煽るのが出るのも、まともな回答者が寄り付かない原因
0482デフォルトの名無しさん
2016/12/11(日) 23:57:45.43ID:28MCt8ddそれも具体的な事は何も語らず安全な位置から他人を攻撃する奴だね。
0483デフォルトの名無しさん
2016/12/11(日) 23:58:42.93ID:yhEzNFx30484デフォルトの名無しさん
2016/12/12(月) 04:00:54.66ID:nqvHYcKk個人の主張として批判せず、いたずらにある類として扱うのは極めて恣意的かおバカの批判にあらざる攻撃の特徴。
まあ、その軽蔑すべき発想で返した俺も反省はしてもよいが
はっきり言って精神病とバカの特徴でしかない論法でレスするなよ。
俺はバカと精神病きらいだからな。
おまえら、マジで精神病と思われる宣言的絶対主義の形而上学バカの一味は人類の公的な敵だとおもっているからな。
さしあたりお前らが馬鹿にされていることは科学的認識の健全性をそれなりに示すから喜ばしいがな。
それにしても、単なる知識を披露しあっているだけの時は頭良さそうなふりはできるが、
いよいよ自身の認識を問われる事態になるとここにいる連中、そこの浅さを露呈するやつ多すぎ
所詮、2chだな
0485デフォルトの名無しさん
2016/12/12(月) 04:23:26.60ID:wAsQV1H6何故かEASTLに関してはSTLは化石と言い張る連中が出てこない不思議
奴らも認識を改めたのだろうか
0486デフォルトの名無しさん
2016/12/12(月) 07:26:08.62ID:QGPJ2cbM何かのコピペ?
0487デフォルトの名無しさん
2016/12/12(月) 07:28:00.97ID:BFgije+s「EASTLあるよ」
↓
「STLなどというものは規格にない」
↓
「いきなり関係ないことを言い出してどうした。EASTLの話なのにSTLとかイミフ」
0488デフォルトの名無しさん
2016/12/12(月) 07:35:32.89ID:Wpm6TEVIコピペなのか?。これぞまさしく2ch住人の鑑ってカキ込みに笑ったよ
激早朝に必死コピペ・長文カキコは2chの鑑じゃないとできないよな
0489デフォルトの名無しさん
2016/12/12(月) 07:53:47.40ID:u9yJk1SjC/C++のスレッドで何回か見たから定型文なのかもしれないね。
それぞれ独自のアレンジを加えてるのかもしれないけど詳しく見ない。
質問に対しては正しい回答をするのが望ましいけど、
「それは間違ってる」「どうしてそう思った?」みたいな
間違いであることの指摘だけの反応は歯がゆいね。
じゃあ何が正しいんだよ? と思っても「規格を読め」という
万能かつ追加情報量ゼロの答えしか返らないことが多いし。
0490デフォルトの名無しさん
2016/12/12(月) 08:08:33.31ID:wAsQV1H6間違ってるという指摘だけならまだいいよ。
「どうしてそう思った?」なんてそんな感じの意図を含ませてるだけで間違いの指摘ですらないし
0491デフォルトの名無しさん
2016/12/12(月) 08:09:45.74ID:BFgije+s>じゃあ何が正しいんだよ? と思っても
そこはフツー、規格を読み直して確認してみるだろ
知ってるなら言えよとは思うけど
0492デフォルトの名無しさん
2016/12/12(月) 09:38:58.53ID:wAsQV1H6それを鬼の首取ったかのように責め立てて人格まで否定して、間違いを言いづらい空気を作って。
そんな空気だから間違えるわけにはいかないのか罵倒するやつは自分でも大抵何も説明しない。こうなると行き着く果ては何か解るよね?
まぁ、こういう場を潰したい、もしくは単に他人を攻撃したいだけというのであればそういう行動も理解できるが。
0493デフォルトの名無しさん
2016/12/12(月) 10:21:45.81ID:zVjVBBEL善意による回答であろうとも、間違いは間違いなのだから訂正して取り下げるのが回答者のあるべき姿。
「たとえ間違っていようとも、俺の善意を受け入れろ」みたいなのは絶対ダメ。技術板では特に。
0494デフォルトの名無しさん
2016/12/12(月) 10:22:57.83ID:+gwThOjs> それを鬼の首取ったかのように責め立てて人格まで否定して、間違いを言いづらい空気を作って。
よくわかんないんだけど、たとえばどのレスのこと言ってるの?
0495デフォルトの名無しさん
2016/12/12(月) 10:28:51.18ID:wAsQV1H6いちばん最近だと
ID:sVZRaydg
とか
0496デフォルトの名無しさん
2016/12/12(月) 10:57:55.60ID:+gwThOjsこんなの無視か「ちょっと何言ってるかわからない」ぐらいでいいと思うんだけどな。
0497デフォルトの名無しさん
2016/12/12(月) 11:20:15.49ID:+gwThOjsこの主張を ID:sVZRaydg のレス先である ID:wsqzeERH を見ながら考えるに、
ID:sVZRaydg は無視すれば済むいっぽうで ID:wsqzeERH は誤った情報を正しいもの
であるかのように流したという点で、どちらかというと ID:wsqzeERH のほうがマズいだろう
と思った。
0498デフォルトの名無しさん
2016/12/12(月) 11:28:40.94ID:wAsQV1H6つまり、間違った事を言うぐらいなら黙ってろって事?
0499デフォルトの名無しさん
2016/12/12(月) 11:42:34.42ID:wAsQV1H6間違ってる事を見つけて、それを広めたくないなら具体的に誤りをそれ以上の説得力を持って指摘すりゃいいだろ。
0500デフォルトの名無しさん
2016/12/12(月) 11:46:51.51ID:+gwThOjs別に間違ったことを言ってもいいよ。有益な議論の種になるなら歓迎もする。
異なる意見のどちらも間違いと正しいともいえないことはあるし。たとえば規格に不備があるときとかね。
ただ、異なる意見をぶつけるなら論拠を示してほしいな。少なくとも明示的にそれを要求されたときぐらいは。
そして間違ってると分かったら撤回してほしい。
0501デフォルトの名無しさん
2016/12/12(月) 11:54:36.94ID:+gwThOjsID:wsqzeERH は規格に定めのないと思われるところの動作らしきものを主張した。
定めが無いことの論拠を示すのは難しい。規格全体とその解釈を洗わないといけないからね。
そこで逆に定めがあることの出典(これは主張が正しければ簡単なはず)を要求されたわけだけど、
なぜかそれを拒否した。そこがわからない。
0502デフォルトの名無しさん
2016/12/12(月) 12:05:21.37ID:wAsQV1H6出典を拒否したならそれで正確性が疑われると判断すれば良くない?
0503デフォルトの名無しさん
2016/12/12(月) 12:05:56.62ID:iHRm80/h0504デフォルトの名無しさん
2016/12/12(月) 12:09:45.51ID:twbdB4odこんなの続いてるうちに入らないだろ
0505デフォルトの名無しさん
2016/12/12(月) 12:20:54.10ID:+gwThOjs本人にとってはそれでいいんだろうけど、見てる側としてはせっかく話題に上がった論点が
「正確性が疑われる」とかいう曖昧な状態で終わるのが嫌かな。
実は規格に対応する定めがあるのかもしれないし、
主張した本人が未だに誤りを信じてるかもしれないわけで。
0506デフォルトの名無しさん
2016/12/12(月) 12:29:55.88ID:wAsQV1H6そういうぐらいなんだからあなたの中では曖昧な状態ではなく誤りと確信してるんでしょ?
その理由を書けばいいんじゃない?
0507デフォルトの名無しさん
2016/12/12(月) 12:40:39.49ID:iHRm80/hプログラム絡まない不毛な会話が続くのは珍しくない?
0508デフォルトの名無しさん
2016/12/12(月) 13:04:44.32ID:pCtNIeWj回答者はエスパーせずに不明な点があれば質問者に要件を確認する。
この二つを徹底させる必要がある。
0509デフォルトの名無しさん
2016/12/12(月) 13:17:17.99ID:GRRPu0hD質問に質問を返すなというバカが現れるが無視する。
も加えないとな
0510デフォルトの名無しさん
2016/12/12(月) 14:00:07.95ID:GtH+849B質問の主旨・・・何について尋ねているのか
明晰な質問文が作れる人は、自分で答えを導く力をすでに持っている
本当にわかっていない人は、自分が何をわかっていないのかを、わかっていない
無知の知ってやつ
0511デフォルトの名無しさん
2016/12/12(月) 17:51:59.67ID:bNwcWuUI0512デフォルトの名無しさん
2016/12/12(月) 17:56:16.45ID:M1+cJD9Bいいね。結婚してください。
0513デフォルトの名無しさん
2016/12/12(月) 18:34:35.43ID:bNwcWuUIなお出典拒否を見たらオマエが正確性を疑えばいいだけ」
ちょっとアタマおかしいのではないだろうか
>>505が不憫でならない
0514デフォルトの名無しさん
2016/12/12(月) 19:19:02.30ID:mxfi3nOt毛の壁氏のコピペだよ
0515デフォルトの名無しさん
2016/12/12(月) 19:59:06.58ID:eHvHtzFgなんでそれらを同じ人が言ったように纏めるわけ?
0516デフォルトの名無しさん
2016/12/12(月) 20:51:00.44ID:ER7G210i2chは嘘を嘘と見抜けないようじゃなんとかって言われているからな
あと、2chはスラム街であって普通の人が来るところではない
スラム住人に普通の人の行動・マナーを要求するって無理
0517デフォルトの名無しさん
2016/12/13(火) 01:47:50.23ID:3XO5JWcw出典はデータメンバーの順序しか示せないけど(それも面倒だからやりたくない)、納得いく間違いという説明があればごめんなさいするよ。
0518デフォルトの名無しさん
2016/12/13(火) 02:10:32.03ID:R+yFeKlS間違いと言われてるのは>>446でしょ。
>>454の中段にあるとおりパディングについては定められていないので、連続しない可能性がある。
メモリレイアウトが連続すれば配列のようにアクセスしてよい、というわけでもないので、
>>454の最後の「考慮しなくていいんじゃね」が「配列アクセスしてもいいんじゃね」という意味で
言ってるなら、これもマズい。
0519デフォルトの名無しさん
2016/12/13(火) 06:15:11.71ID:3XO5JWcwうーん。連続するかどうかしか話題になってなかったから
元々の話が
union{
struct {float x,y,z;};
float elem[3];
};
てな感じの定義になっててそれがズレる的な話なのかと思ってたけど、
発端の >>428 から読み返したら違うみたいね。
それでも >>518 の言うマズいが具体的に何がマズいのかは解らないな。メモリレイアウトは配列と同じになるけど配列アクセスするとマズい理由。
428のような書き方はしないけど、struct vec3{float x,y,z;};
的なレイアウトのクラスの配列の先頭ポインタをOpenGLの頂点配列に渡したり普通にするよね。
0520デフォルトの名無しさん
2016/12/13(火) 06:41:39.14ID:MMXxHZC00521デフォルトの名無しさん
2016/12/13(火) 07:09:41.18ID:3Hyjk+HW質問者の日本語が読めないのだろうか
『保障されてないんだっけ?』
0522デフォルトの名無しさん
2016/12/13(火) 07:27:22.26ID:exhxuOGE0523デフォルトの名無しさん
2016/12/13(火) 07:31:31.56ID:vJwCdf+q> メモリレイアウトは配列と同じになるけど配列アクセスするとマズい理由。
動作が保証されないから
> struct vec3{float x,y,z;};
vec3 v;
float *a = &v;
の場合に 8086 などのセグメントアーキテクチャだと v.x と v.y でセグメント切り替えを行う必要があるかもしれないからそのようなコードを生成するけど a[0] と a[1] でその切り替えを行う保証がないとか
(配列として宣言されてればサイズがわかっているのでセグメント切り替えをサボることができるように配置できる)
0524デフォルトの名無しさん
2016/12/13(火) 07:37:31.17ID:KT6JI3xhsequentialの意味で解釈するのはアホ
0525デフォルトの名無しさん
2016/12/13(火) 07:52:37.70ID:3XO5JWcwその理屈だと昔ながらのCのmemsetとか標準機能で実装できなくない?
0526デフォルトの名無しさん
2016/12/13(火) 08:04:16.16ID:KT6JI3xhfloatポインタのアドレッシングまでは規定されてないからな
0527デフォルトの名無しさん
2016/12/13(火) 08:10:29.68ID:vJwCdf+qunion とかキャストも保証されないから自己責任でよろしく
って言語ですから
現実にそんな変な処理系にぶち当たったことはないしこれからもないと思うから俺は普通に使うけど
0528デフォルトの名無しさん
2016/12/13(火) 08:38:35.05ID:17Hk+0wM0529デフォルトの名無しさん
2016/12/13(火) 08:56:31.87ID:tD8W/Rko{
float elem[3];
float &x, &y, &z;
vec3() : x(elem[0]), y(elem[1]), z(elem[2]) { }
};
これだけのことだろ
0530デフォルトの名無しさん
2016/12/13(火) 11:17:02.60ID:R+yFeKlS配列外参照が未定義動作なのは知ってるよね?
struct vec3 {float x,y,z;}; の x とか、非配列について配列アクセス(ポインタ演算)できる範囲は
要素数1の配列と同じになるので、 (&x)[1] を読み書きしたり (&x) + 2 したりすると未定義動作になる。
コンパイラはそういう操作が無いことを前提とした「最適化」を行ってよい。
https://cpplover.blogspot.jp/2014/06/old-new-thing.html
いま動いてても何かの拍子に静かに壊れる可能性のあるコードはマズいでしょ。
0531デフォルトの名無しさん
2016/12/13(火) 11:40:12.26ID:3XO5JWcwそれで、char*の場合は配列外参照についても特別扱いって事?
URLの先の記事の例だとintの配列ではなくcharの配列だったら同じように最適化されないと?
0532デフォルトの名無しさん
2016/12/13(火) 11:52:43.25ID:R+yFeKlS少なくとも現行の規格では、配列アクセス(ポインタ演算)の制限についてchar類についての特例は無いよ。
>>525 つまりmemsetの類をユーザーコードで実装できる保証も無い。これは規格中で曖昧なところでもある。
http://wg21.cmeerw.net/cwg/issue1701
ただ、伝統的なコンパイラは既存のコードを守るためなどの理由で、最適化を控える判断をする可能性は高い
だろうとは思う。
0533デフォルトの名無しさん
2016/12/13(火) 12:14:32.65ID:3XO5JWcwん?そのURLの先のには
オブジェクトTはN個のunsigned charのシーケンスとして表現できる。Nはsizeof(T)と等しい
って書いてるから少なくともunsigned charのポインタとしてオブジェクトの範囲内を操作出来るって事じゃないの?
曖昧と言ってるのはそのシーケンスを配列のように扱っていいのかどうか。
つまりunsigned charについては特別扱いされてそうだけど、
帰ったら規格読んでみるかな…
0534デフォルトの名無しさん
2016/12/13(火) 12:20:19.43ID:ZDIceSoSちょっと笑った
0535デフォルトの名無しさん
2016/12/13(火) 12:42:22.36ID:3XO5JWcw発端を読み間違えていたとはいえ >>454 は良くないレスでした。ごめんなさい。
データメンバーを配列としても扱いたいなら手抜きせずunionを使いましょう。
少なくとも俺はそうしてます。
0536デフォルトの名無しさん
2016/12/13(火) 13:07:00.96ID:KT6JI3xh>>527と>>529が目に入っていないのか理解できなかったのか
0537デフォルトの名無しさん
2016/12/13(火) 13:20:29.45ID:hs9s/v66> データメンバーを配列としても扱いたいなら手抜きせずunionを使いましょう。
ここまでずっと
union {
struct {float x, y, z;};
float f3[3];
} a;
これがピッタリ重なる保証はないよね?(a.xとa.f3[0]…a.zとa.f3[2])
という話でもあったったのでは?
unionはすべての要素のメモリ開始位置が一致する事以外は保障してないのでは?
0538デフォルトの名無しさん
2016/12/13(火) 13:54:57.03ID:3XO5JWcwその話をしてるつもりはなかったかな。
俺はsizeof(float[3])==sizeof(vec3)であること前提で話してたから。
そこは規格の話ではなく環境の話でそんな環境存在しないから考慮する意味ないよねって事
0539デフォルトの名無しさん
2016/12/13(火) 13:56:42.26ID:3XO5JWcw0540デフォルトの名無しさん
2016/12/13(火) 18:04:22.99ID:esmzfSZb↓
「もちろん無意味にメモリを3倍消費するような実装は目に入ってません」
池沼はひっこんでろ
0541デフォルトの名無しさん
2016/12/13(火) 19:42:41.67ID:E4yvkIVkgcc はアラインメントなしだよ
0542デフォルトの名無しさん
2016/12/13(火) 19:56:23.08ID:vJwCdf+q周回遅れで環境依存云々って言われても困惑するだけだし...
0543デフォルトの名無しさん
2016/12/13(火) 19:57:23.59ID:vJwCdf+qアライメント「なし」ってなんだ?
0544デフォルトの名無しさん
2016/12/13(火) 20:36:46.77ID:3XO5JWcw0545デフォルトの名無しさん
2016/12/13(火) 20:48:53.21ID:3Hyjk+HWこれは「何か考えがある」ことを仮定しているが
「どれだけ追究しても実は答えが無い」という可能性に気付きつつ、それに目を背けてしまっているのではないだろうか
0546デフォルトの名無しさん
2016/12/13(火) 20:52:33.22ID:rAk2P0Xd0547デフォルトの名無しさん
2016/12/13(火) 21:04:49.28ID:3Hyjk+HW仮説だが「ボクのレス(オツム?)は中身が無し」に置き換えると>>543も意外にすっきりするのではないか
0548デフォルトの名無しさん
2016/12/13(火) 21:08:33.14ID:3XO5JWcwstruct vec3{float x,y,z;};
sizeof(float[3])==sizeof(vec3)
にならない可能性がある合理的な理由、もしくは現時点で実在する処理系をあげてもらわないと。
>>454 で俺はそんな処理系存在しないだろうから考慮する必要ないと述べた、いや、ある!というならその理由を述べてくれってだけの話だよ。
規格で許されてるんだからアラインメントも関係なく間にパディング入れるコンパイラが今後出現するかもしれない、と理由もなくフワッとした感じで主張するなら、
そんな扱いづらいコンパイラを使う日が来ないことを祈るよとしか言えないけど
0549デフォルトの名無しさん
2016/12/13(火) 21:17:44.32ID:rAk2P0XdC++11のinitializer_list<T>に置き換える方法を考えたが建設的じゃないかね?
0550デフォルトの名無しさん
2016/12/13(火) 21:19:16.56ID:ewxTG/d/0551デフォルトの名無しさん
2016/12/13(火) 21:25:33.01ID:rAk2P0Xdコンパイラ依存をエレガントに解決するC++的記法とかならアリだが。
0552デフォルトの名無しさん
2016/12/13(火) 21:37:30.55ID:FfoiWr4S> struct vec3{float x,y,z;};
> sizeof(float[3])==sizeof(vec3)
になっててもダメって言われてることすら理解してないのかよ...
0553デフォルトの名無しさん
2016/12/13(火) 21:41:05.59ID:3XO5JWcwだからその理由を言えよ
0554デフォルトの名無しさん
2016/12/13(火) 21:51:33.50ID:3Hyjk+HW↓
「その理由を言え」
健常者なら仮に理解できなくても「どのレスなんだ?」という日本語になっただろうが、そうはならなかったようだ
0555デフォルトの名無しさん
2016/12/13(火) 22:05:23.69ID:vKGN+G2Sunion {
struct {float x, y, z;};
float f3[3];
} a;
#pragma pop
でいいだろ
もう文句言うなよ
あとはC言語スレでやれ
ほれ、帰った!帰った!
0556デフォルトの名無しさん
2016/12/13(火) 22:14:46.20ID:FfoiWr4S>>550
0557デフォルトの名無しさん
2016/12/13(火) 22:19:10.87ID:3XO5JWcwunion使って
>(配列として宣言されてればサイズがわかっているのでセグメント切り替えをサボることができるように配置できる)
のまさに配列として宣言してるわけだけど
0558デフォルトの名無しさん
2016/12/13(火) 22:23:00.91ID:3XO5JWcw0559デフォルトの名無しさん
2016/12/13(火) 23:16:38.37ID:FfoiWr4Sもしかして同じアドレスを複数の方法でアクセスするアーキテクチャを知らんのか?
それなら 8086 の本でも買って勉強してこい
0560デフォルトの名無しさん
2016/12/13(火) 23:24:14.57ID:rAk2P0Xdhttp://qiita.com/kaityo256/items/fadffae00e517efbc8aa
0561デフォルトの名無しさん
2016/12/13(火) 23:38:22.25ID:3XO5JWcw知らんけど。
その環境で標準準拠のC++が動くのか?
0562デフォルトの名無しさん
2016/12/13(火) 23:41:25.70ID:3Hyjk+HWと思ったら墓穴を掘るようなアホレスが続いて脱力だ
「その環境で標準準拠のC++が動くのか?」
0563デフォルトの名無しさん
2016/12/13(火) 23:44:19.32ID:3XO5JWcw0564デフォルトの名無しさん
2016/12/13(火) 23:58:07.70ID:R+yFeKlS> 同じ領域を別の型で解釈するunionという明確な機能がある
C++のunionにそんな機能は無いよ。
アクティブなメンバ以外を通して読み書きすると未定義動作になる。
(構造体同士のcommon initial sequence部分の読み取りだけ特例でOK)
(Cの規格にはいけそうな文面があるんだけど、複数のDRへの委員会回答が
さらなる混乱を醸しててカオス状態だから結局ポータブルとは言い難い
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65892)
0565デフォルトの名無しさん
2016/12/14(水) 00:10:53.69ID:Sz6DS640動かせない理由がない
>>562
> フルボッコのID:3XO5JWcwだが>>559については>>557への反論になっていないと言わざるを得ない
union 中の構造体と配列で同じアドレスの要素に違う方法でアクセスする話だぞ
理解できないならいちいちしゃしゃり出てくるなよ...
0566デフォルトの名無しさん
2016/12/14(水) 00:11:46.47ID:j9bleiozPOD型では。
0567デフォルトの名無しさん
2016/12/14(水) 00:13:33.01ID:pL75kfvJ0568デフォルトの名無しさん
2016/12/14(水) 00:16:58.67ID:MOfhcMLlほんとだ。C99では記述あるけどC++の規格には書かれてないのな。
0569デフォルトの名無しさん
2016/12/14(水) 00:25:09.39ID:pL75kfvJ少なくとも規格上はNGって事でしょ
unionはもともとメモリをケチるために同じ領域を使いまわすための物だから
キャスト目的の使い方は本来の使い方ではないってだけで
なんかアレだよね
まるでバッドノウハウじゃないですか
やっぱ、本来の使い方から外れた使い方は良くないんじゃないですかねー
悪用ってやつでしょ
規格上NGってのも痛いでしょ
0570デフォルトの名無しさん
2016/12/14(水) 00:26:44.27ID:MOfhcMLl丁度ぴったりな質問と解答みつけた。
ID:R+yFeKlS さんだけがまともなレスくれるわ。ありがたい。
0571デフォルトの名無しさん
2016/12/14(水) 00:39:25.21ID:4ENgz5lN最後に書いたメンバ以外の読み出しは未定義なのか
0572デフォルトの名無しさん
2016/12/14(水) 00:50:30.59ID:4ENgz5lN0573デフォルトの名無しさん
2016/12/14(水) 03:34:55.80ID:4GTows1q0574デフォルトの名無しさん
2016/12/14(水) 04:06:39.46ID:19iGSV5Phttps://msdn.microsoft.com/ja-jp/library/windows/desktop/aa383742(v=vs.85).aspx
typedef union _ULARGE_INTEGER {
struct {
DWORD LowPart;
DWORD HighPart;
};
struct {
DWORD LowPart;
DWORD HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
0575デフォルトの名無しさん
2016/12/14(水) 04:12:41.86ID:pL75kfvJ0576デフォルトの名無しさん
2016/12/14(水) 06:10:35.98ID:TuSrwtRX0577デフォルトの名無しさん
2016/12/14(水) 07:04:38.50ID:FjhkxVYfその話のなかで>>523の理由には納得できなかった>>557が居て、>>557の日本語が理解できなかったので
(523の理由ではなく)許されるかどうかの話にすり替えたいのですねわかります
0578デフォルトの名無しさん
2016/12/14(水) 07:07:03.44ID:ItxoOukr0579577
2016/12/14(水) 07:58:27.23ID:FjhkxVYfこれは失礼
「規格上保証されないとする理由の源泉を>>523とするなら>>557の反論は尤もで妥当。>>523単独では論拠として不完全。
>>557が拘っているのは>>523の後半部分なのでまずそれに対する回答を済ませるべき」
といえば良かったか
0580デフォルトの名無しさん
2016/12/14(水) 08:23:33.22ID:ItxoOukr>>565 を読んでわからないような奴に説明するすべを持たない
0581デフォルトの名無しさん
2016/12/14(水) 08:49:56.21ID:Bi35R/pC0582デフォルトの名無しさん
2016/12/14(水) 18:03:49.53ID:vdJGZhx+0583デフォルトの名無しさん
2016/12/14(水) 18:26:05.54ID:bVVmVNC+0584デフォルトの名無しさん
2016/12/14(水) 22:02:38.63ID:D6UN0xSnコンパイラや環境に依存して当然やろ
空想の処理系を語るやつはshine
0585デフォルトの名無しさん
2016/12/14(水) 23:05:51.41ID:CnQeYnTC0586デフォルトの名無しさん
2016/12/14(水) 23:18:56.34ID:4ENgz5lNとかっていわゆるPODだからfloat [3]とunionしてもちゃんとアクセスできるんじゃねーのか
0587デフォルトの名無しさん
2016/12/14(水) 23:19:16.54ID:hiLU9Xxd自分のレベルとしてはC言語の基本だけ知ってるレベルです
わからないところは調べつつやろうと思っています
0588デフォルトの名無しさん
2016/12/15(木) 00:03:21.45ID:21oBCq6J0589デフォルトの名無しさん
2016/12/15(木) 01:08:01.89ID:jtCJlu/uunionのアクセスについてPODを特別扱いするルールは無い。
0590デフォルトの名無しさん
2016/12/15(木) 07:31:58.80ID:J5ztPLlo0591デフォルトの名無しさん
2016/12/15(木) 07:59:00.72ID:21oBCq6J特別扱いではなくて、PODであるから必然的にアクセスできるのではないかね。
つーかPODな型同士ならreinterpret_castでいいじゃん
0592デフォルトの名無しさん
2016/12/15(木) 08:10:42.84ID:xMFaiiqqC++の規格上保証されていないとしても、CのAPIを直接呼べる事を望まれているC++のコンパイラがそれを考慮しないって事は現実的には有り得ない選択だと思う
0593デフォルトの名無しさん
2016/12/15(木) 08:16:21.44ID:xMFaiiqqそれがC++では規格上は保証されていないという話
0594デフォルトの名無しさん
2016/12/15(木) 08:20:01.66ID:Rg7daUM6アライメントをちゃんと考えて char/int でエンディアンを考慮してアクセスするだけなら破綻する環境はまずない
0596デフォルトの名無しさん
2016/12/15(木) 09:59:36.89ID:jtCJlu/u「Cでは保証されてる」って、何が?
Cでも環境依存のパディングが入る可能性があるのは同じだし型ベースのエイリアシングルールは
あるし、>>586のいうようなアクセスについて保証はないでしょ。
「ちゃんとアクセス」の意味によるのかもしれないけど。
0598デフォルトの名無しさん
2016/12/15(木) 10:23:21.22ID:T67tgzmGtype punningと呼ばれるやつ
0599デフォルトの名無しさん
2016/12/15(木) 10:24:50.60ID:jtCJlu/uそれでもやっぱり「Cでは保証されてる」が何のこと言ってるのかわからない。
0600デフォルトの名無しさん
2016/12/15(木) 10:39:52.88ID:jtCJlu/u>>598
未定義動作じゃないってだけで環境依存ではあるんだから、
この流れで「保証されてる」というのもいかがなものかと。
>>564のリンク先の例にもあるように、unionにしとけばすべて期待したとおりになるとは限らないわけで。
0601デフォルトの名無しさん
2016/12/15(木) 10:49:41.51ID:T67tgzmGそのリンク先で期待通りにならないっていうのはstrict aliasing ruleのせいであってunionと直接関係ないよ
例のコードの関数は引数に渡された二つの互換性のない型がunionのメンバーと解らない状態だからね。
0602デフォルトの名無しさん
2016/12/15(木) 11:04:05.47ID:jtCJlu/uうーん・・・まぁいいやCの話だし。きっと言外に「(〜な場合は)保証されてる」って限定があったんだろう。
0603デフォルトの名無しさん
2016/12/15(木) 11:18:18.89ID:T67tgzmG単純な話だよ。リンク先の例の関数はunionのメンバーとしてアクセスしてないでしょ?
0604デフォルトの名無しさん
2016/12/15(木) 11:25:29.34ID:k7cNIRIoだからPODな型どうしならエンディアンやら内部表現の意味やらはおいといて、
ポインタ、参照をreinterpret_castで相互に変換しても
全く存在しないアドレスを指して壊れるみたいなことはないじゃん。
0605デフォルトの名無しさん
2016/12/15(木) 11:38:15.00ID:T67tgzmGそれはちょっと違う
上にも書いたけどstrict aliasing ruleっていうのがあって互換性のない別の型にreinterpret_castして書き換えた後、元の型で参照しても書き換えた結果が反映されないということがあり得る。そのルールではcharなどのバイト型とかについては特別扱い
strict aliasing ruleについては詳しくはググって。
解りやすい翻訳記事が出るから
0606デフォルトの名無しさん
2016/12/15(木) 13:08:36.72ID:Mt/OUcfG「保証されない」のは未定義の動作と未規定の動作だぞ
処理系定義の動作や文化圏固有の動作は「保証される」事項にあたるわけだが
おまえさんは未定義じゃないなら未規定とでも言いたいのか?
0607デフォルトの名無しさん
2016/12/15(木) 18:38:09.08ID:8RRI46Yvvolatileにしときゃきっと動くだろ
0608デフォルトの名無しさん
2016/12/15(木) 20:55:47.39ID:qjVjn2tr0609デフォルトの名無しさん
2016/12/15(木) 21:32:15.56ID:ryYHdhLD0610デフォルトの名無しさん
2016/12/15(木) 23:30:53.41ID:XnpLdVDTだからstrict aliasing ruleの回避の為にvolatileを使うのは悪手
0611デフォルトの名無しさん
2016/12/16(金) 00:48:28.30ID:fGg7JmOu探して読んだ。
なるほど。
非互換なaliasはないものとして処理するのか。
で、PODだとmemcpyは使えるので、
非互換な型のポインタが示す領域間でmemcpyしてしまってから読み出せば問題ないと。
0612デフォルトの名無しさん
2016/12/16(金) 01:24:59.16ID:+Cerr3R4特定環境での動作が保証されるかどうかならそのとおりなんだろうけど、
ポータビリティが保証されるかどうかと考えれば>>600でもおかしくないでしょ。
0613デフォルトの名無しさん
2016/12/16(金) 01:31:25.08ID:VoJ0WBIMおまえが勝手に決めた移植性の範囲を
見も知らん馬の骨に押しつけてるだけだろ
どんな処理系にも移植できるコードを書けと言うなら
おまえ自身が世界中の全ての処理系で試す責任があるわけだが
0614デフォルトの名無しさん
2016/12/16(金) 02:05:15.84ID:+Cerr3R40615デフォルトの名無しさん
2016/12/16(金) 02:25:02.25ID:cho0HItf費用は613が支払う責任が出てくるのか
おいしい仕事うらやま
0616デフォルトの名無しさん
2016/12/16(金) 02:50:01.00ID:vLNiG0Uc0617デフォルトの名無しさん
2016/12/16(金) 03:43:44.86ID:bfViihU50618デフォルトの名無しさん
2016/12/16(金) 08:42:11.25ID:VoJ0WBIM0619デフォルトの名無しさん
2016/12/16(金) 09:14:08.98ID:QVt2AG5Iメーカー抜きに規格上どんな処理系でも意図した通り動くかの簡単なお仕事です
動かない条件が存在するのにそれを隠して保証されてると言った人が費用を払うのが筋です
0620デフォルトの名無しさん
2016/12/16(金) 13:27:00.23ID:6icF8y4Lがunion使っても正しく動かない場合があると言うのは、
{
lock_guard<mutex> lk(mutex);
}
value++;
と書いて
mutex使ったのにvalueが正しくインクリメントされない場合がある
というのと同じぐらい暴論だと思うぞ。
0621デフォルトの名無しさん
2016/12/16(金) 13:39:06.26ID:VoJ0WBIM異な事を仰る
PGの仕事は実機で動くコードを作ることで
規格上の正しさが第一条件なわけではない
規格票を読むこと自体が第一条件な人がいるようだが
手段が目的化してる痛いやつだ
0622デフォルトの名無しさん
2016/12/16(金) 14:04:50.98ID:vWCWSv0y処理系依存にならざるを得ない部分も有ると思うが
可能な限り減らす努力をするというのは言うまでもないだろう
未定義動作が含まれたコードは非常に不味く
コンパイラはとんでもない最適化をかけてくることがあるからね
unionの件でいえば、アクディブでないメンバの読出しは未定義動作なので
意味のないコードとして一切をバッサリ削除するっていう最適化も
規格上は許されていると思う
未定義動作に関してはコンパイラは何をしても許されることになっているからね
有名なのでは
before(p);
auto i = *p;
after(p);
このコードで、beforeとafterがインライン展開されたとき
beforeやafterでpのnullチェックをしていたとしても
そのチェックをコンパイラは削除しにかかるかもしれない
なぜならauto i = *p;があるのでpは絶対にnullではないという判断
この効能は、デリファレンスの前のコードにも及ぶ、つまりbeforeも最適化の対象
pがnullの時、auto i = *p;は未定義動作になるので
pがnullの場合においてはコンパイラは何をしても自由ってことで
バッサリ削除しにかかるわけだわ、おっそろし
例えばbeforeの中で、if(!p){ output_log(); abort(1); }としていて
プログラマはそのことを知っていたので、auto i = *p;の時にはnullチェックをしなかった
のかもしれないが、一切のコードは削除されて、ログも吐かずにセグフォで落ちるということもありうる
未定義動作というのは最適化において直感的にはわからない非常にまずいことが起こる場合があるので
避けたほうがよいだろう
0623デフォルトの名無しさん
2016/12/16(金) 15:09:13.83ID:6icF8y4L念のために言うがそれはC++では正しい。しかしC言語では正しくない。Cではunionのメンバーについて異なる型でアクセスしても大丈夫な事が保証されている
socketでunionが多用されている、というのに(socketAPIの)Cでは保証されているから、とレスしたらそれにつっこんできたのが >>600 だからね
0624デフォルトの名無しさん
2016/12/16(金) 16:31:31.51ID:7+CqS1oK○ 処理系の説明書では動作が規定されていたので使った
× 処理系の説明書にも動作は未定義とあるのに実験をして動作を確認して使った
0625デフォルトの名無しさん
2016/12/16(金) 17:49:52.73ID:9Wz/M+WC0626デフォルトの名無しさん
2016/12/16(金) 18:54:22.26ID:CA9Tfamg> できうる限り規格上認められたコードを書くように努力するべきだよ
これはできる限りではなくマストだろ
> 処理系依存にならざるを得ない部分も有ると思うが
> 可能な限り減らす努力をするというのは言うまでもないだろう
これはケースバイケース
移植を全く考慮しないプログラムは普通にありうる
0627デフォルトの名無しさん
2016/12/16(金) 19:23:06.69ID:zvOL+XWx> これはできる限りではなくマストだろ
異な事を仰る
PGの仕事は実機で動くコードを作ることで
規格上の正しさが第一条件なわけではない
規格票を読むこと自体が第一条件な人がいるようだが
手段が目的化してる痛いやつだ
0628デフォルトの名無しさん
2016/12/16(金) 19:26:22.91ID:BXmKubid実機で動くのは当たり前
可搬性があるのもあたりまえ
0629デフォルトの名無しさん
2016/12/16(金) 19:45:33.46ID:zvOL+XWx世界的にはgold platingといって避けるべきと考えられているんだな
顧客は技術屋の自己満足のためにお金を払ってるわけじゃないから
0630デフォルトの名無しさん
2016/12/16(金) 19:59:29.78ID:vLNiG0Ucそういう時は、「おお、クロスコンパイル、ちゃんとビルド通ったね、めでたしめでたし」程度のもんだ。
0631デフォルトの名無しさん
2016/12/16(金) 20:02:23.64ID:P4d6yKEb>そのチェックをコンパイラは削除しにかかるかもしれない
それはない
0632デフォルトの名無しさん
2016/12/16(金) 20:04:27.94ID:vLNiG0Uc0633デフォルトの名無しさん
2016/12/16(金) 20:22:54.70ID:vWCWSv0y実際この手の最適化でLinuxのカーネルにセキュリティーホールが出たことがあるし
http://blog.kmckk.com/archives/1202810.html
「未定義動作はタイムトラベルを引き起こす」
https://cpplover.blogspot.jp/2014/06/old-new-thing.html
にも、
>しかし、非古典的なコンパイラーは、このバグ関数を利用して、タイムトラベルを始めるのだ。
とある
0634デフォルトの名無しさん
2016/12/16(金) 21:24:35.92ID:X9dL4QxAそんな貴方にrust
0635デフォルトの名無しさん
2016/12/16(金) 22:42:01.97ID:NA9YnVudコンパイラがバージョンアップするだけで動かなくかもしれないようなコードは
> 実機で動くコード
とは言わんよ
0636デフォルトの名無しさん
2016/12/16(金) 23:30:15.36ID:RQniJWoR0637デフォルトの名無しさん
2016/12/17(土) 00:20:42.12ID:TZRPZZKHできる限りとマストってニュアンスは違うけど実質同じ意味だよね。
0638デフォルトの名無しさん
2016/12/17(土) 00:23:18.21ID:rz2849ZH0639デフォルトの名無しさん
2016/12/17(土) 00:39:42.79ID:fuQenMl00640デフォルトの名無しさん
2016/12/17(土) 00:50:12.05ID:TZRPZZKHまぁ、もし能力的に出来ないならやるなという意味も含めてマストと言ってる可能性もあるけど、うっかりバグも含めたらそんなこと出来る人殆ど居ないと思うんだ。
0641デフォルトの名無しさん
2016/12/17(土) 02:08:30.13ID:QGFH/8LE622で書いた例はおかしいんじゃないか。
beforeでnullチェックがあれば最適化しても消されないだろ。
記事の話はafter にnullチェックがあっても消されれるってだけ。
0642デフォルトの名無しさん
2016/12/17(土) 02:28:16.32ID:JNOD62wa> しかし、もしそのような実行が未定義の操作を含む場合、
> この国際標準規格は実装に対し、そのような入力に対し、
> いかなる実行上の制約をも課すことはない
> (未定義操作に先行する操作をも含む)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0643デフォルトの名無しさん
2016/12/17(土) 06:57:11.15ID:zNE1YHbQthrowしてるとか。
あるいはpに影響を与える処理がnull処理に続くとか。
nullの時にbeforeの中の処理を迂回してるだけならばっさりいくかもね。
*pの処理をbeforeより先にやっても問題ないようなフロー場合を考えれば消えるが理解出来ると思う
0644デフォルトの名無しさん
2016/12/17(土) 08:56:05.81ID:SZHJDyPT前か後ろかは全く関係ないよ
0645デフォルトの名無しさん
2016/12/17(土) 09:08:20.44ID:SZHJDyPT>例えばbeforeの中で、if(!p){ output_log(); abort(1); }としていて
abortが規格通りちゃんとnoreturnで修飾されてるならnullなら未定義にならずにそのまま終了するんだから消えないわな。
abortするコードだけが残る可能性がある。
0646デフォルトの名無しさん
2016/12/17(土) 09:14:59.02ID:SZHJDyPT0647デフォルトの名無しさん
2016/12/17(土) 09:18:30.23ID:qqGfUFWcstatic int si = 2016;
if (!p) p = &si;
}
0648デフォルトの名無しさん
2016/12/17(土) 09:28:03.97ID:SZHJDyPT翻訳単位が違うなどで中身の解らない関数を呼び出したとき、その中で必ず例外飛ばすとかterminateする可能性は捨てきれないから、noreturnで修飾されてようがいまいが関係ないか。
0649デフォルトの名無しさん
2016/12/17(土) 15:25:33.86ID:sjHKoy2h中身が分かってる場合に限られるだろう
0650デフォルトの名無しさん
2016/12/17(土) 16:07:38.42ID:zNE1YHbQ俺としては素直にrestrictをC++にも入れろと思う
0651デフォルトの名無しさん
2016/12/18(日) 16:04:27.19ID:ZiJh313Bさすがに後ろは遠慮願いたいです
0652デフォルトの名無しさん
2016/12/18(日) 17:55:14.50ID:A5RLn4gx0653デフォルトの名無しさん
2016/12/18(日) 18:44:38.95ID:3mNBVKev0654デフォルトの名無しさん
2016/12/18(日) 19:44:57.34ID:O7+9i5Ii)*(
0655デフォルトの名無しさん
2016/12/18(日) 20:12:23.61ID:FPWIWuxB気恥ずかしげに『はじめてのC』とか読んでるお子様とは一味違う。
0656デフォルトの名無しさん
2016/12/18(日) 20:15:17.44ID:r3yaM0uJ0657デフォルトの名無しさん
2016/12/18(日) 21:39:25.38ID:CFuzcgv7俺ももう定年が視野に入る年で K&R スタイルの引数しか使えないコンパイラ使ってたけど i =- 1 とかは知らんかった
0658デフォルトの名無しさん
2016/12/18(日) 23:47:58.18ID:O7+9i5Ii0659デフォルトの名無しさん
2016/12/19(月) 07:13:19.83ID:JfSEkcBS0660デフォルトの名無しさん
2016/12/19(月) 07:58:47.55ID:TguvqWsq0661デフォルトの名無しさん
2016/12/19(月) 08:07:11.64ID:TguvqWsqJavaと違いC++は仮想VMで動くわけではないので、古いC++コンパイラを使い続ける積極的な理由はない。
C++11よりも前のコンパイラを使って新しいコードを書いている人は偉くもなんともなくて単にPG業界の負け組である。
0662デフォルトの名無しさん
2016/12/19(月) 08:13:02.94ID:s4WNerU2むしろ若いつもりならこんな古い掲示板にたむろせずにお前らがどっか行けよ...
0663デフォルトの名無しさん
2016/12/19(月) 08:33:37.08ID:BpYOD4yf積極的な理由あるだろ
GCCの2.95縛りとか長かったぞ
0664デフォルトの名無しさん
2016/12/19(月) 08:40:59.48ID:qUwjyat80665デフォルトの名無しさん
2016/12/19(月) 08:46:52.03ID:TguvqWsqC++11コンパイラが供給されない見捨てられたハードで仕事している人はお気の毒としか言いようがない。
0666デフォルトの名無しさん
2016/12/19(月) 08:49:25.00ID:BpYOD4yfあの件を知らないんだな
0668デフォルトの名無しさん
2016/12/19(月) 09:18:32.10ID:JfSEkcBS例えばubuntu12.04とか
0669デフォルトの名無しさん
2016/12/19(月) 10:41:05.41ID:LsCIfPmCオーメン
0670デフォルトの名無しさん
2016/12/19(月) 10:44:56.78ID:dPpwmd9E0671デフォルトの名無しさん
2016/12/19(月) 18:33:47.49ID:UkY+ZLT4わざわざ新しいコンパイラを使おうとは思わないな
0672デフォルトの名無しさん
2016/12/19(月) 19:09:05.16ID:nkfgQpHK0673デフォルトの名無しさん
2016/12/19(月) 19:15:33.01ID:CiSzNtO40674デフォルトの名無しさん
2016/12/19(月) 20:15:07.54ID:kP/9omRt0675デフォルトの名無しさん
2016/12/19(月) 20:30:11.70ID:ssWThwsz0676デフォルトの名無しさん
2016/12/19(月) 21:13:03.29ID:VOmGrAJz0677デフォルトの名無しさん
2016/12/19(月) 21:21:21.56ID:875KlIZO開発する話にすり替えるよくある詭弁
0678デフォルトの名無しさん
2016/12/19(月) 22:39:58.41ID:K8raT0NFこれは良くやる。
0679デフォルトの名無しさん
2016/12/19(月) 23:09:24.11ID:TaYHseGNヒキコモリなの?
0680デフォルトの名無しさん
2016/12/19(月) 23:44:45.04ID:32YrbjETLinuxサバでもサポート限界まで使うってところも多いだろうからな
それに搭載のstdC++ライブラリがC++11すら対応していないのものなのに
あえて新しいC++14のコンパイラーでいじくるなんてしないからな。
0681デフォルトの名無しさん
2016/12/20(火) 00:27:57.04ID:D+KHLjez0682デフォルトの名無しさん
2016/12/20(火) 00:43:37.90ID:2R+ZSOQx0683デフォルトの名無しさん
2016/12/20(火) 06:54:54.82ID:IznJBAG+0684デフォルトの名無しさん
2016/12/20(火) 08:45:37.75ID:/4ZK922w0685デフォルトの名無しさん
2016/12/21(水) 11:55:31.48ID:uc71CH8D0686デフォルトの名無しさん
2016/12/21(水) 11:58:27.70ID:E3mPp/qZ0687デフォルトの名無しさん
2016/12/21(水) 12:00:04.08ID:E3mPp/qZテキストなら "a+t"
0688デフォルトの名無しさん
2016/12/21(水) 12:36:04.09ID:KtI+UjCHファイルを開く → 書き出す → ファイルを閉じる
ってやってるクチかな。
ファイルを開く → 書く書く書く... → ファイルを閉じる
て感じにするんだ。
またはパイプでteeに送る
$ camerapos | tee output.txt
0689デフォルトの名無しさん
2016/12/21(水) 12:44:27.31ID:aubTzGvR座標を書き込むたびごとにcloseしてるだろ
void app::display_point(POINT const& pt){
std::fstream fs{filename, std::ios_base::out}; //ここで定義するとデストラクタでcloseされる
fs << pt;
}
↓
std::fstream fs{std::ios_base::out};
void app::display_point(POINT const& pt){
fs << pt;
} //これならcloseされない
0690デフォルトの名無しさん
2016/12/21(水) 12:45:36.40ID:aubTzGvRわりいわりい、でもわかるよな
0691デフォルトの名無しさん
2016/12/21(水) 12:48:25.28ID:hcCdx4AT今のプログラムが
outputfile=fopen("text名","w");
fprint(optputfile, "カメラ座標¥n");
fclose(outputfile);
なんだけど、fopenのところに*a+t書き込むってこと?
0692デフォルトの名無しさん
2016/12/21(水) 12:55:05.83ID:hQfd8N4Iwをat+にする
0693デフォルトの名無しさん
2016/12/21(水) 12:58:37.40ID:hcCdx4ATおおおお!ありがとうございます
0694デフォルトの名無しさん
2016/12/21(水) 13:16:35.27ID:u1MDUlHV0695デフォルトの名無しさん
2016/12/21(水) 13:32:09.04ID:E3mPp/qZ0696デフォルトの名無しさん
2016/12/21(水) 14:00:14.59ID:hcCdx4AT0697デフォルトの名無しさん
2016/12/21(水) 15:23:41.98ID:nQIVUYH+0698デフォルトの名無しさん
2016/12/21(水) 16:20:38.14ID:aubTzGvRそれ以上に他意があって欲しそうなヒマネラーがつまらん戯れ言をほざきやがる
0699デフォルトの名無しさん
2016/12/21(水) 16:41:16.79ID:KtI+UjCH最初の質問と回答、それに質問者からの再質問がCの話になってるよ。
それで互いに通じてるから支障はないんだろうけど。
0700デフォルトの名無しさん
2016/12/21(水) 17:36:29.71ID:aubTzGvR個人的にはfstreamは気安く使いたくないものなので
fopenを使っている質問者には内心同調してた
0701デフォルトの名無しさん
2016/12/21(水) 18:20:37.55ID:MHGJUGGs>Cの話になってるよ
どこが?
fopenみたいなC++の標準ライブラリに有る関数の話しかしてないだろ
0702デフォルトの名無しさん
2016/12/21(水) 18:50:02.12ID:PZYB8k4ustd::fopenだからセーフ
0703デフォルトの名無しさん
2016/12/21(水) 19:06:50.08ID:u1MDUlHV0704デフォルトの名無しさん
2016/12/21(水) 19:10:12.26ID:hQfd8N4I0705デフォルトの名無しさん
2016/12/21(水) 19:41:35.47ID:ZtnFV01Y0706デフォルトの名無しさん
2016/12/21(水) 23:42:58.89ID:Padeiior0707デフォルトの名無しさん
2016/12/21(水) 23:49:07.58ID:/5DtifXwhttp://d.hatena.ne.jp/s-yata/20100726/1280138663
http://tatanaideyo.hatenablog.com/entry/2014/10/24/214714
0709デフォルトの名無しさん
2016/12/22(木) 00:00:22.95ID:uQsPz27Eリンク先のコメントに書いてあるね
>なお,Dinkumware による実装においては,そのソースコードのコメントにあるとおり,std::sync_with_stdio() の呼び出しは意味がないようです.
0710デフォルトの名無しさん
2016/12/22(木) 00:06:55.05ID:nspPuHe1センキュ
前のレスの名前欄435は無視してくれ、別スレのだ
0711デフォルトの名無しさん
2016/12/22(木) 00:12:02.06ID:uQsPz27E0712デフォルトの名無しさん
2016/12/22(木) 01:11:23.48ID:kb3vxaUU遅くなっても速くなることはない気がするんだけど
0713デフォルトの名無しさん
2016/12/22(木) 08:33:08.27ID:/kaZRMcK0714デフォルトの名無しさん
2016/12/22(木) 09:22:57.56ID:oqG6b75c0715デフォルトの名無しさん
2016/12/22(木) 10:26:29.07ID:RBqM6sioフォーマット文字列と引数の対応を間違ったらアレっていう問題はあるが
0716デフォルトの名無しさん
2016/12/22(木) 10:32:56.90ID:RBqM6sio外部から入力された文字列をそのままprintfに渡しちゃうっていうやつ
文字列に%dとかが入ってるとヤバイ
その辺は気をつけなきゃダメだけど
iostreamより可読性自体は良いんだよねぇ
0717デフォルトの名無しさん
2016/12/22(木) 13:16:20.95ID:RhVrJNPB0718デフォルトの名無しさん
2016/12/22(木) 13:35:46.24ID:duhm3nbBソートじゃなくてね,入れるときに並べときたい
それでこんな感じでしたらエラー出てしまった なんでかな?
vector<Point> points;
for(int i=0;i<100;i++){
Point new(rand()%i,0);
if(points.size()!=0){
int k=0;
for(auto it=points.begin();it!=points.end();it++){
Point tmp = (Point)(*it);
if(new.x < tmp.x) points.insert(points.begin()+k, new);
else if(i+1==points.size()) points.push_back(new);
else k++;
}
}
else points.push_back(new);
}
0720デフォルトの名無しさん
2016/12/22(木) 13:56:28.13ID:duhm3nbBすみません 適当な名前にしてみたところ出来ませんでした。
Expression:vector iterator not incrementable
だそうですが,どうしてでしょうか?
0721デフォルトの名無しさん
2016/12/22(木) 14:29:58.93ID:oqG6b75cバイナリソートか
vectorならヒープソート使った方が良い希ガス
0723デフォルトの名無しさん
2016/12/22(木) 14:49:04.38ID:/ytrOsGa0724デフォルトの名無しさん
2016/12/22(木) 15:08:00.97ID:duhm3nbBエラーが出ずにこの順に追加できるなら何でもいいです
>>722
少しやってみます.
>>723
どう改良すればよいですか?
0725デフォルトの名無しさん
2016/12/22(木) 15:16:58.19ID:duhm3nbBこれで上げ方あってますでしょうか?
上げる用に多少変えましたが,こんな感じです.
http://ideone.com/AoWC3A
0726デフォルトの名無しさん
2016/12/22(木) 15:28:35.64ID:V2qxRM4o0727デフォルトの名無しさん
2016/12/22(木) 15:38:54.62ID:duhm3nbBご指摘ありがとうございます,その通りでした.
修正してみましたが,まだ上手くいきませんでした.
vectorがおかしいみたいです
0728デフォルトの名無しさん
2016/12/22(木) 15:45:54.11ID:V2qxRM4o0729デフォルトの名無しさん
2016/12/22(木) 15:47:33.76ID:k8IxKIg+基本的にオリジナルのコードを尊重
#include <iostream>
#include <vector>
#include <stdio.h>
#include <cstdlib>
using namespace std;
struct Point{
int x, y;
};
int main() {
vector<Point> points;
for (int i = 0; i < 100; i++) {
Point pt = { rand() % (i + 1), 0 };
if (points.size() < 1) {
points.push_back(pt);
continue;
}
for (auto it = points.begin(); it != points.end(); ++it) {
if (pt.x < it->x) {points.insert(it, pt); break;}
else if (it + 1 == points.end()) {points.push_back(pt); break;}
}
}
for (int i = 0; i < points.size(); i++) {
cout << points[i].x << endl;
}
return 0;
}
0730デフォルトの名無しさん
2016/12/22(木) 15:52:39.03ID:duhm3nbBできました.
insertしたあとにbreakしないといけなかったんですね.
無事に解決しました,ありがとうございました.
0731デフォルトの名無しさん
2016/12/22(木) 15:53:09.33ID:V2qxRM4o0732デフォルトの名無しさん
2016/12/22(木) 16:05:21.54ID:oqG6b75cy座標はなにに使うんだ??
0733デフォルトの名無しさん
2016/12/22(木) 16:26:05.92ID:oqG6b75c順列乱さないで追加ならこんな感じなりかのう
0734デフォルトの名無しさん
2016/12/22(木) 17:11:12.46ID:oJ9BUBiVどうしたの?
0735デフォルトの名無しさん
2016/12/22(木) 17:25:12.22ID:oqG6b75clower_boundも昔の扱いだと値が一致しない場合、end返すんだっけな?
自分、昔自作したinsert_posっての使ってやってみるとこんな感じ…
quick_sortの位置返し版みたいなやつ
0736デフォルトの名無しさん
2016/12/22(木) 17:32:34.32ID:E3eibBgybeginのときもあるんじゃない?
0737デフォルトの名無しさん
2016/12/22(木) 17:42:59.92ID:oqG6b75c次の反復子返すライブラリとend返すやつとまたはbeginなのか?
0738デフォルトの名無しさん
2016/12/22(木) 17:47:13.98ID:E3eibBgyつねに[begin, end)の中に該当物がある、と覚えておけばいいんじゃないか
0739デフォルトの名無しさん
2016/12/22(木) 17:57:02.94ID:WpoSlvHb0740デフォルトの名無しさん
2016/12/22(木) 17:59:55.76ID:91Kua5tc無いだろう
0741デフォルトの名無しさん
2016/12/22(木) 18:09:01.81ID:E3eibBgy間違えた
[lower, upper)の中
ね
0742デフォルトの名無しさん
2016/12/22(木) 18:47:02.19ID:sqn1ckjAwin10 win7の
32ビット環境・wow64環境・64ビット環境で使えるようにする予定だったのですが
32ビット環境以外では動作がぼこぼこでどういうところを注意すれば良いかアドバイス頂けないでしょうか...
sizeof演算子のようなバイト数で変わりそうなものは利用してないです
0743デフォルトの名無しさん
2016/12/22(木) 21:03:10.94ID:YR5bk+a50744デフォルトの名無しさん
2016/12/23(金) 09:35:24.61ID:ynZqqi62size_tとかな。
LLP64だからポインタをlongに入れるとかお行儀悪いことをしたら死ぬ
0745デフォルトの名無しさん
2016/12/23(金) 12:27:57.34ID:xkktLNTS64bitプロセスとかドライバとやりとりするときくらいかな。
何がぼこぼこなんだ。そもそもぼこぼこってのがどういう意味?
0746デフォルトの名無しさん
2016/12/23(金) 13:49:39.13ID:2uBTaJD7データのメモリレイアウト変わったら互換性が脅かされるだろドアホ
0747片山博文MZ ◆T6xkBnTXz7B0
2016/12/23(金) 13:51:51.50ID:3xdKhrkh0748デフォルトの名無しさん
2016/12/23(金) 14:02:35.26ID:2uBTaJD70749デフォルトの名無しさん
2016/12/23(金) 14:34:14.93ID:gcrFo8Yk0750デフォルトの名無しさん
2016/12/23(金) 18:57:05.52ID:XiISUE9C0751デフォルトの名無しさん
2016/12/23(金) 19:21:12.14ID:B95XUOMz会社の製品だから内部について詳しく書けないが概要を話すと
オブジェクトとして32bitと64bit用のdll読み込んで実行するexeを作成中だった
簡単に言えばそのdllのテストをするexe
32bit環境と64bit環境で違いはないと思っていたんだが
WaitForSingleObject使ったところでスレッドの処理順序が逆になったりとか微妙なさが生まれてる
逆ってのは
スレッドA B(Bがサブ)が存在しているときに
Aが待機してBが処理を投げるってのをすると
A待機→Bがイベント生成→B終了→A続行ってやりたかったのが
A待機→Bがイベント生成→A続行→B終了みたいな順序になってしまったっぽい
解析はまだしてないから確定ではないが月曜に備えて学んでおきたいんだ
0752デフォルトの名無しさん
2016/12/23(金) 19:29:54.56ID:RIl3d4il0753デフォルトの名無しさん
2016/12/23(金) 19:30:49.21ID:B95XUOMzと言うとビルドの時に壊れたってことだろうか?
0754デフォルトの名無しさん
2016/12/23(金) 19:52:00.19ID:BpfBtVzRもともとコードに問題があって不定な動作になってたのが、環境によって違う結果になったとか。
0755デフォルトの名無しさん
2016/12/23(金) 19:56:02.26ID:B95XUOMz元々のコードについては何ら問題はないはず
一応32bitの環境では意図通り動作してくれてるからさ
ただdllの中身の話と、あと32とwow64・64の違いの話で何かしら注意することがあるなら
もっと知りたいと思って恥を忍んできてる
sizeof演算子だったりsize_tだったりは使用してないから影響ないだろうと浅はかに考えていてこうなっている
0756デフォルトの名無しさん
2016/12/23(金) 20:01:29.50ID:tydkaaKw単にマルチスレッドを理解してないだけじゃ...
> A待機→Bがイベント生成→B終了→A続行ってやりたかったのが
そもそも今時のPCだとB終了とA続行がほんとに同時に動くこともあるし
0757デフォルトの名無しさん
2016/12/23(金) 20:32:03.67ID:h0dHaDo6https://msdn.microsoft.com/ja-jp/library/bb427430(v=vs.85).aspx
自分が引っかかったのは、LPARAMの型が32bitと64bitで変わっていたことぐらいかな。
0758デフォルトの名無しさん
2016/12/23(金) 20:41:37.05ID:2E3hGVLcA待機→Bがイベント生成→B終了→A続行って動作を保証するには
Bの終了確認→A続行って作り込んでなきゃいけないが
そんなことせずにOS任せにしてたらそう動いてたというだけの話だろ
それが問題かどうかは知らないが
0759デフォルトの名無しさん
2016/12/23(金) 22:07:47.02ID:hTM2VAPk0760デフォルトの名無しさん
2016/12/23(金) 22:43:21.33ID:B95XUOMzWaitforSingleobgectでそれは保証されてると俺は考えていた
それとは別にだろうか
>>756
>>757
>>759
少し読んでみるわ
速度が早すぎるとほぼ同時実行なんだな
何かで越えてしまったのだろうか
0761デフォルトの名無しさん
2016/12/24(土) 00:12:51.73ID:pRsMHrqNもうこの時点でUNKO確定
>>758の助言もなんのその
0762デフォルトの名無しさん
2016/12/24(土) 00:34:42.73ID:AuIvJJ/c察するにBの終了コードでも欲しかったんだろうけど、
イベント待ちをするのではなく、
WaitForSingleObject(Bのスレッドハンドル,...)
のようにして、Bの終了待ちにしないとだめです。
0763デフォルトの名無しさん
2016/12/24(土) 00:43:38.00ID:pRsMHrqN特に
『元々のコードについては何ら問題はないはず
一応32bitの環境では意図通り動作してくれてるからさ』
ここまで知能が低いと生きているのも辛いだろう
0764デフォルトの名無しさん
2016/12/24(土) 00:59:51.41ID:13QAQt3w0765デフォルトの名無しさん
2016/12/24(土) 01:23:17.09ID:c2QXRfZmAがCreateEvent
Bにハンドルを渡してBの処理開始
AがWaitFor で待機
Bが終了するタイミングでSetEvent
AのWaitForの待機が終わる
普通はこれでおかしくならないと思うけど。
0766デフォルトの名無しさん
2016/12/24(土) 02:03:27.96ID:Nwl7kpj00767デフォルトの名無しさん
2016/12/24(土) 05:48:56.42ID:pRsMHrqNスレッドの終了を待つ必要がある例を示した>>762のレスなどなんのその
0768デフォルトの名無しさん
2016/12/24(土) 07:28:55.50ID:hL5gqOrjよし、どうにか20行以内に纏まったぞ
0769デフォルトの名無しさん
2016/12/24(土) 08:35:36.98ID:8lcOa/+v内部でやってるのこれなんだよね
>>762と>>765の違い何かあるのだろうか
>>767を見る限りでは何かあるような感じなのだが....
0770デフォルトの名無しさん
2016/12/24(土) 08:39:38.34ID:dPbQS77J> Bが終了するタイミングでSetEvent
こう書く人は
# Thread-A Thread-B
---------------------------
1 WaitForSingleObject
2 SetEvent
3 ExitThread
4 GetEixtCodeThread
のようなコードを書いてそうでちょっと怖い
0771デフォルトの名無しさん
2016/12/24(土) 08:58:48.31ID:c2QXRfZmスレッドの終了コードを取りたいとはもともと言ってないのだから
スレッドの終了を待つ必要はないんじゃないのか?
スレッドの終了を待ちたいのならスレッドハンドルで待機する必要があるけど。
0772デフォルトの名無しさん
2016/12/24(土) 09:26:03.14ID:jiDVWPIU>A待機→Bがイベント生成→B終了→A続行ってやりたかったのが
>A待機→Bがイベント生成→A続行→B終了みたいな順序になってしまったっぽい
は、どちらの順序でも問題がないはず。
0773デフォルトの名無しさん
2016/12/24(土) 10:00:21.96ID:hL5gqOrj0774デフォルトの名無しさん
2016/12/24(土) 10:11:57.24ID:dPbQS77J終了コードの取得は単なる例
言いたいのは
> Bが終了するタイミングでSetEvent
なんて書いちゃダメって話
終了と SetEvent は同時にはできない
なので SetEvent とスレッドの終了の間には必ず隙間が生じる
その隙間に他のスレッドが動作しておかしくなる
って言うのはマルチスレッドに慣れてない人がよく陥るミスの一つ
0775デフォルトの名無しさん
2016/12/24(土) 10:18:42.02ID:pRsMHrqNそれに引き替え>>769の日本語も読めない>>773は一体…
『内部でやってるのこれなんだよね』
ここはひとつ、スレッドの終了コードにする予定だった値を代わりに独自の変数に入れてからSetEventする方式をすすめるべきではないだろうか
0776デフォルトの名無しさん
2016/12/24(土) 10:34:27.86ID:hL5gqOrjスレッド作成時のことを言っているんだが
状況もすんなり理解出来ないほど堅物なの?
0777デフォルトの名無しさん
2016/12/24(土) 10:40:23.81ID:13QAQt3w触るなよ
0778デフォルトの名無しさん
2016/12/24(土) 11:15:46.54ID:dPbQS77J0779デフォルトの名無しさん
2016/12/24(土) 11:25:36.19ID:hL5gqOrjおまいらなんの解決策も提示できていない癖に口だけは達者だな
0780デフォルトの名無しさん
2016/12/24(土) 11:46:30.68ID:A+UuIzcaどんだけ嘘つきなの
0781デフォルトの名無しさん
2016/12/25(日) 10:32:25.63ID:0PY0aCVgclass D1 : public B{void func(const B& o);};
class D2 : public B{void func(const B& o);};
...
class Dn : public B{void func(const B& o);}:
funcはDiとDjの組み合わせで変化する関数ですが
各Diクラスのfuncを実装する場合
DiクラスでD0~Dnに対するfunc_jを定義
Diクラスのfuncの実装でdynamic_castを使い?func_jに誘導?
なんか筋が悪い気がしますが、他にやり方ありますか?
0782デフォルトの名無しさん
2016/12/25(日) 10:55:52.46ID:gzohGyN7dynamicしなくてもDj::funcで呼び出せるやろ
0783デフォルトの名無しさん
2016/12/25(日) 10:59:07.88ID:0PY0aCVg0784デフォルトの名無しさん
2016/12/25(日) 11:00:28.97ID:gzohGyN7ていうか継承した関数を後継でも使用する場合はprotectedにしておかないとそのままでは呼び出せんぞ
0785デフォルトの名無しさん
2016/12/25(日) 11:28:39.39ID:kHsO0S5C0786デフォルトの名無しさん
2016/12/25(日) 11:29:58.40ID:Lu3Vvdec0787デフォルトの名無しさん
2016/12/25(日) 11:44:37.67ID:kHsO0S5Chttp://ideon.com/46KJPS
0788デフォルトの名無しさん
2016/12/25(日) 11:45:13.17ID:kHsO0S5Chttp://ideone.com/46KJPS
0789デフォルトの名無しさん
2016/12/25(日) 11:58:11.55ID:crG++i4Mhttps://www.youtube.com/watch?v=g2ig-iQU9mo
0790デフォルトの名無しさん
2016/12/25(日) 12:12:43.43ID:dmtrl+ZZ> funcはDiとDjの組み合わせで変化する関数ですが
どう変化するのかを書かないとなんとも
0791デフォルトの名無しさん
2016/12/25(日) 12:31:52.27ID:hxH29S3q「ダブルディスパッチ」でググると幸せになるかも
0792デフォルトの名無しさん
2016/12/25(日) 12:38:31.50ID:6QEq7FnEC++は全く思想が異なる言語がC言語の振りをしている。
という指摘が一番合っているかと。少し前のMSDNでも
テンプレート使ってprintf実装するなんて話があったぐらい。
0793デフォルトの名無しさん
2016/12/25(日) 13:33:20.29ID:S3W4YDfqもはや流れと違ってるからツッコむのもアホらしいが、
windowsなら32bitと64bitでDLLのバイナリ互換がないから
データのメモリレイアウトが変わったところで何ら問題がない。
ファイルやパイプを介して結合するなら、エンディアン含めて
環境に依存しないシリアライズを考えるだけ。
データのメモリレイアウトが変わって困るようなプログラムが糞だろw
0794デフォルトの名無しさん
2016/12/25(日) 13:59:08.36ID:d1z2kMp7むしろ不幸になるような気がする
0795デフォルトの名無しさん
2016/12/25(日) 14:26:29.61ID:D6Y6Gc11うん、できる。
俺でもできたんだから
みんな大丈夫なはず。
0796デフォルトの名無しさん
2016/12/25(日) 15:08:55.85ID:SibbJTGEむしろ理解しやすいかも
0797デフォルトの名無しさん
2016/12/25(日) 15:13:01.88ID:crG++i4M実行時に意図しない動作されるよりは、コンパイルエラーになった方がはるかに楽だから。
0798デフォルトの名無しさん
2016/12/25(日) 17:13:02.45ID:Lu3Vvdecでは、このまま勧めて勉強していきたいと思います。
0799デフォルトの名無しさん
2016/12/25(日) 18:17:49.05ID:S3W4YDfq他人の話かよ
0800デフォルトの名無しさん
2016/12/25(日) 19:09:35.10ID:Lu3Vvdecグループ内での話です。
すいません。
0801デフォルトの名無しさん
2016/12/25(日) 19:42:55.04ID:S3W4YDfq0802デフォルトの名無しさん
2016/12/26(月) 05:51:22.17ID:HXwuwdhI0803デフォルトの名無しさん
2016/12/26(月) 06:36:04.57ID:lGaHGaRq0804デフォルトの名無しさん
2016/12/26(月) 14:44:41.19ID:bkz3PoYD要素たった二つなのに激遅です… なんででしょうか??
class A{ int a; };
class B : public A{ int t; };
struct g {
bool operator() (const B* &p1, const B* &p2) const {
return(p1->a > p2->a);
}
};
std::list<B*> b_list;
B *p1 = new B(); p1->a = 0;
B *p2 = new B(); p2->a = 1;
b_list.push_back(p1);
b_list.push_back(p2);
b_list.sort(g ());
0805デフォルトの名無しさん
2016/12/26(月) 15:47:38.29ID:B60orki6コンパイルが通らない。エラーログを見落としていて、最後にビルド成功した古い実行バイナリの挙動を見ているだけなのでは?
0806デフォルトの名無しさん
2016/12/26(月) 16:24:18.78ID:bkz3PoYDいやちょっと今環境が無いのと急いで書いたので
ここではコンパイル通らないコードが含まれてるかもしれないんですが
実際には通ってるんです…
ちょっとわかりにくくてすみません。
0807デフォルトの名無しさん
2016/12/26(月) 16:58:02.40ID:1PwuyQJn0808デフォルトの名無しさん
2016/12/26(月) 17:12:30.18ID:0UQS5t27Wandbox等で確認してみては
0809デフォルトの名無しさん
2016/12/26(月) 17:15:43.99ID:B60orki6Windows10では最近のアップデートで、アクセス違反が発生した時にエラーダイアログが出ずに裏でエラーレポート作成アプリが走るようになっている。
アプリがクラッシュしててOSによるダンプデータ収集に時間かかっているのでは?
0810デフォルトの名無しさん
2016/12/26(月) 17:16:12.27ID:bkz3PoYD>>808
そういえば昔、Pentiumマシンで実行した時は遅くなかったような気が…
ありがとうございます。もうちょっと調査してみます!
0811デフォルトの名無しさん
2016/12/26(月) 17:17:16.70ID:bkz3PoYDなるほどです。その辺もしらべてみます!
0812デフォルトの名無しさん
2016/12/26(月) 21:12:17.54ID:wb4zf1kz0813デフォルトの名無しさん
2016/12/26(月) 22:20:10.81ID:K9pbdry/↓
>listってチェーンリンカーだから遅いのかね
リテラシーが足りないのではないだろうか
0814デフォルトの名無しさん
2016/12/26(月) 23:52:43.74ID:wb4zf1kz0815デフォルトの名無しさん
2016/12/27(火) 02:32:57.36ID:SQsOUYP20816デフォルトの名無しさん
2016/12/27(火) 08:36:45.20ID:CVPZfFKk0817804
2016/12/27(火) 09:30:09.78ID:REz3izginewとdelete演算子を定義し直してメモリ状態をチェックするようにしてたのですが
それが原因でした!!自分のプログラムのせいでした!
実際には要素二つをループの中でずっとソートしてたので
ソート中にSTL(sortメソッド)が内部でnewとdeleteを繰り返してたのが原因だったようです。
0818デフォルトの名無しさん
2016/12/27(火) 09:49:38.32ID:mf9uACo2純粋な疑問なんだけどさ、なんでメモリ状態の確認に既存のツール使わないの?
0819デフォルトの名無しさん
2016/12/27(火) 09:55:30.83ID:ooIzE4iMおまえ今感想書いているじゃねぇかよハゲ
0820デフォルトの名無しさん
2016/12/27(火) 10:17:24.26ID:sjoi84j7解析していったら読み込んでるdllの方に不具合が見つかりました
ご意見ありがとうございました
0821デフォルトの名無しさん
2016/12/27(火) 12:43:01.75ID:CVPZfFKkどう見たら感想に見えるんだよ...
それこそリテラシー無さすぎやろ w
0822デフォルトの名無しさん
2016/12/27(火) 14:10:07.58ID:3ZgUrie80823デフォルトの名無しさん
2016/12/27(火) 17:18:42.02ID:B94R3vH/0824デフォルトの名無しさん
2016/12/27(火) 19:56:42.70ID:vDOdsba4会話の流れ無視していきなりlistの感想述べるバカに構わないで
0825デフォルトの名無しさん
2016/12/27(火) 20:44:49.67ID:ooIzE4iMID変えて自演してんじゃねーよハゲ
0826デフォルトの名無しさん
2016/12/27(火) 21:19:53.66ID:bExJ5BFF0827デフォルトの名無しさん
2016/12/27(火) 21:41:32.30ID:taDSxYLE>>826
統合失調症になると何でも自演に見えることがあるらしい
でも不治の病だとか
0828デフォルトの名無しさん
2016/12/27(火) 22:22:25.93ID:70y60g+7たとえば、C2143のエラーに対して「こういうミスによるエラーの可能性が多い」みたいな感じの文章を
追加で表示(出力?)するようにしたいのですが、エラーメッセージを編集することは可能でしょうか?
0829デフォルトの名無しさん
2016/12/28(水) 01:12:00.11ID:ETTH3dv3どんな環境でもログに残せるようにしてました。
0830デフォルトの名無しさん
2016/12/28(水) 04:00:48.47ID:yWrP/m5t考え方が俺と逆だなぁ
0831デフォルトの名無しさん
2016/12/28(水) 11:03:34.04ID:J8k3KBrD0832デフォルトの名無しさん
2016/12/28(水) 12:12:38.46ID:1k+b+5LA結合テスト以後に持ち越してるのかなあ
0833デフォルトの名無しさん
2016/12/28(水) 16:48:27.51ID:mX+MonYx0834デフォルトの名無しさん
2016/12/28(水) 18:05:01.05ID:Pde3P7vx0835デフォルトの名無しさん
2016/12/28(水) 19:01:21.75ID:N788bEQH0836デフォルトの名無しさん
2016/12/29(木) 14:33:44.12ID:Tbw9F1U5まず君の「依存型をやる」の定義を述べたまへ
0837デフォルトの名無しさん
2016/12/29(木) 15:00:27.91ID:B8IUc9rj0838デフォルトの名無しさん
2016/12/29(木) 15:39:46.00ID:QycqsppM0839デフォルトの名無しさん
2016/12/29(木) 16:34:38.37ID:B8IUc9rj最近4年以内測定結果ないかな?
0840デフォルトの名無しさん
2016/12/29(木) 16:47:17.04ID:bUdbWaJHstlじゃ不満?
0841デフォルトの名無しさん
2016/12/29(木) 18:29:34.32ID:B8IUc9rjregexがC++標準機能になって数年が経ち、非stdな正規表現ライブラリの存在意義について現状把握したくなった次第
0842デフォルトの名無しさん
2016/12/29(木) 19:25:53.51ID:AiXb9Xql0843デフォルトの名無しさん
2016/12/29(木) 19:39:41.23ID:4SBHJX0Y0844デフォルトの名無しさん
2016/12/29(木) 20:27:08.08ID:mmdDlTxQライブラリ以外ではGNU egrepが最速なのは相変わらずだと思うけど
0845デフォルトの名無しさん
2016/12/29(木) 20:37:24.10ID:B8IUc9rjなるほど。egrepってことは、事実上PCRE。
windows環境に関して言えば、pcre2を使ったサンプル実行ファイルである pcre2grep は、 msys の grep -E よりさらに速いので色々謎。
0846デフォルトの名無しさん
2016/12/29(木) 20:46:06.10ID:mmdDlTxQegrepはPCREじゃない自前の方のつもりで書いた
0847デフォルトの名無しさん
2016/12/30(金) 06:49:45.51ID:0ZFj7vnKArtistic Style(AStyle) 2.06
https://sourceforge.net/projects/astyle/
2016-12-27
0848デフォルトの名無しさん
2016/12/30(金) 07:26:12.73ID:0ZFj7vnK0849デフォルトの名無しさん
2016/12/30(金) 07:54:52.18ID:l5WpNL3H0850デフォルトの名無しさん
2016/12/30(金) 08:40:14.55ID:n0+bjvYh0851デフォルトの名無しさん
2016/12/30(金) 20:39:13.07ID:F4cb6AGO10年前に何があったのか
0852デフォルトの名無しさん
2016/12/31(土) 19:44:49.13ID:1zLOHjMk0853デフォルトの名無しさん
2016/12/31(土) 19:55:54.01ID:RP5GqFRcテキストの一部からデータ取り出したりが楽になるから覚えていて損はない
そもそもそんなに難しいものでもないし
0854デフォルトの名無しさん
2016/12/31(土) 19:58:53.31ID:bmD+g+A2プログラム内で使うよりも、テキストエディタの機能や、コマンドラインのツールで使うことが多いかな。
ツールとして覚えておいて損はないと思う。
0855デフォルトの名無しさん
2016/12/31(土) 20:05:26.98ID:1zLOHjMk>>854
全然学んでないから知識がないから学んでみるよ
データ整理が楽になるのかな
0856片山博文MZ ◆T6xkBnTXz7B0
2016/12/31(土) 20:12:12.83ID:JCMJkH4b「(。|、)$」→「」と置き換えすれば、行末の句読点を取り除くことができる。
「(\d+|[0123456789]+)」→「【\1】」と置き換えすれば、数字の並びを【】で囲むことができる。
0857デフォルトの名無しさん
2016/12/31(土) 23:10:24.57ID:1zLOHjMkstring型に入ってる奴にやるんだよね?
勉強の序列低いが早めにすべきなのかな
業務にいきそうだ
ちなみに正規表現を違う箇所に応用できたりする?
0858デフォルトの名無しさん
2016/12/31(土) 23:21:26.60ID:Kmz/fYBF0859デフォルトの名無しさん
2016/12/31(土) 23:53:29.69ID:dx9vbJE4正規表現の入門にはここを勧めてる
http://qiita.com/jnchito/items/893c887fbf19e17d3ff9
検索して始めに出てくるサルにも〜は分かりにくかったが
こちらはステップが整理されてて二日ほどでかなり理解できるようになった
0860デフォルトの名無しさん
2017/01/01(日) 13:06:23.86ID:/PcE0jFZ匿名掲示板でいきなり自分語りし始める奴w
0861デフォルトの名無しさん
2017/01/01(日) 13:36:30.73ID:YlDkqvBjオッ 有難い
0862デフォルトの名無しさん
2017/01/01(日) 14:43:43.14ID:t97nghu2有用な情報が含まれてるなら、自分語りでも何でもいいよ。単なる茶々入れよりよほどいい。
0863デフォルトの名無しさん
2017/01/01(日) 14:54:44.07ID:Z1rYB3lC日付とかメールアドレスとか、桁数含めた数値チェックとか
0864デフォルトの名無しさん
2017/01/01(日) 15:51:28.82ID:iPavsRR3文系でも事務に使えるし
0865デフォルトの名無しさん
2017/01/01(日) 19:22:56.00ID:3ABdABSGis_base_of を使った部分特殊化の方法を試したのですが、そもそも関数テンプレートは
部分特殊化できないことを知り困っています。
具体的なコードは以下ですが、こういう場合どうすればいいでしょうか?
http://ideone.com/5eUtRr
適合しないものは弾くような仕組みにしないとコンパイルエラーがドパーと出てきて大変なので・・・
0866デフォルトの名無しさん
2017/01/01(日) 19:35:56.90ID:HLv5dR03いいのありませんか?
0867デフォルトの名無しさん
2017/01/01(日) 19:36:17.54ID:HLv5dR030868デフォルトの名無しさん
2017/01/01(日) 19:52:26.65ID:d6FH7xPKその程度ならSFINAEで何とかなりそうだが部分特殊化したいならクラステンプレートを作って処理を任せるしかない
template<typename T, typename U>
struct unko_impl {
static int f(T , U ) {…}
};
template<…> struct unko_impl<…, …> {
特殊化
};
template<typename T, typename U>
int unko(T &t, U &&u) {
return unko_impl<T, U>::f( forward<T>(t), forward<U>(u) );
}
0869デフォルトの名無しさん
2017/01/01(日) 20:37:00.14ID:H4wHe4cD0870デフォルトの名無しさん
2017/01/01(日) 21:31:53.32ID:jsYYlNsD計算理論の基礎
0871デフォルトの名無しさん
2017/01/02(月) 02:41:11.52ID:cNm7joN7ありがとうございます。SFINAEで何とかなるというのは、以下のoperatorについて
SFINAEを使うという意味でしょうか?例をいただけると助かります
template <class T>
ostream& operator << (ostream& os, const Base<T>& base)
0872デフォルトの名無しさん
2017/01/02(月) 09:59:06.00ID:gBF+qdso0873デフォルトの名無しさん
2017/01/02(月) 15:21:19.01ID:cNm7joN7自分で考えてみます
0874デフォルトの名無しさん
2017/01/02(月) 16:56:07.98ID:b/RASLC2amazon リンクで頼む
0875デフォルトの名無しさん
2017/01/04(水) 00:07:09.31ID:wOLmnoYC0876デフォルトの名無しさん
2017/01/04(水) 00:24:46.75ID:H7YeB4eeおそらく仕様通り
http://www.cplusplus.com/reference/regex/regex_traits/imbue/
デフォルトはグローバルに設定されてるlocaleに従う
0877デフォルトの名無しさん
2017/01/04(水) 03:30:01.56ID:rabvmYP60878デフォルトの名無しさん
2017/01/04(水) 09:30:33.56ID:oS0JsegY0879デフォルトの名無しさん
2017/01/04(水) 09:53:11.57ID:4nJc+6+vちゃんと聞いて来いよwwww
0880デフォルトの名無しさん
2017/01/04(水) 09:57:08.10ID:zzeNA6vAくだらん個別質問すぎて相手されんのだろうけど
0881デフォルトの名無しさん
2017/01/04(水) 16:54:18.44ID:Gyk6VmEdリズムネタとか合いの手みたいな感じ。
もちろん「江添さんの文書に載ってるんじゃね?」という
気持ちでの書き込みもあるだろうけど。
こんな場で、ある種の最高権威として引き合いに出されたり
いじられたりしてるのをご当人は知ってるのかな、どう思ってるのかな?
(という流れに乗せて合いの手を入れます)
0882デフォルトの名無しさん
2017/01/04(水) 19:39:15.10ID:zzeNA6vA江添は禿をこき下ろしてるけど
江添に禿と同じことをする器はない
0883デフォルトの名無しさん
2017/01/04(水) 20:02:57.32ID:hbEVCuwD0884デフォルトの名無しさん
2017/01/04(水) 20:11:11.31ID:xue+qv3N0885デフォルトの名無しさん
2017/01/04(水) 20:36:05.10ID:EEzN430Y0886デフォルトの名無しさん
2017/01/04(水) 21:02:29.75ID:mtnpTOaF0887デフォルトの名無しさん
2017/01/04(水) 23:00:03.85ID:6PKdRVzk0888デフォルトの名無しさん
2017/01/04(水) 23:54:30.99ID:EEzN430Y0889デフォルトの名無しさん
2017/01/05(木) 20:30:05.54ID:t1F+0NcLエピステーメーとか長尾とか
ああいう面々の1人
0890デフォルトの名無しさん
2017/01/05(木) 21:31:43.21ID:AnMF2hlNそれ、日本じゃ c++ は今後絶対に流行らんっていってるようなもんだぞ。
0891デフォルトの名無しさん
2017/01/05(木) 22:33:09.50ID:t1F+0NcL0892デフォルトの名無しさん
2017/01/06(金) 08:43:46.20ID:S2R5Pk4v0893デフォルトの名無しさん
2017/01/06(金) 09:30:18.02ID:xjtPVBC90894デフォルトの名無しさん
2017/01/06(金) 10:02:18.40ID:/isfUrR6そんなに使えない子なんですかね?
0895デフォルトの名無しさん
2017/01/06(金) 10:29:14.23ID:WtZv9CUa0896デフォルトの名無しさん
2017/01/06(金) 10:53:25.37ID:kp6frqnDunique_ptr以外からのdeleteを禁止できるようにしてほしいくらい。
0897デフォルトの名無しさん
2017/01/06(金) 10:54:24.87ID:F2kTLbsXあまりスマポ使わないということはあるよ
0898デフォルトの名無しさん
2017/01/06(金) 11:03:53.62ID:CA8nRNGdメモリーリークご法度なネトゲサーバーは当然ながらスマートポインタ使う。
0899デフォルトの名無しさん
2017/01/06(金) 11:23:02.62ID:MoQlItJ9スマートポインタを使うと管理責任がはっきりしなくなるかのようだけど、そんなことはありませんね。
0900デフォルトの名無しさん
2017/01/06(金) 11:24:56.24ID:sDqigDOyそうでもないぞー、定期メンテナンス入るしな
もっとも最近はC++で書くこと自体が減ってるようだけど
0901デフォルトの名無しさん
2017/01/06(金) 11:47:14.92ID:PtltXM4L0902デフォルトの名無しさん
2017/01/06(金) 11:53:30.14ID:F2kTLbsXそうじゃなくてスマポが必須になる場面は少ない
>>896の言うように自分はunique_ptrはよく使うけど
0903デフォルトの名無しさん
2017/01/06(金) 11:55:44.68ID:sDqigDOyjavaとかphpとか…最近サーバーやってないから詳しくはシラネ
ネトゲじゃなくてソシャゲになるのかな
0904デフォルトの名無しさん
2017/01/06(金) 12:02:59.42ID:MoQlItJ9unique_ptrはスマートポインタではないかのようだけど、そんなことはありませんね。
0905デフォルトの名無しさん
2017/01/06(金) 12:36:47.82ID:SQ/n1Ais言うと思ったw
0906デフォルトの名無しさん
2017/01/06(金) 12:46:07.95ID:ImmF6TXv0907デフォルトの名無しさん
2017/01/06(金) 12:47:58.70ID:EZTJvYq1組み込み系は03から脱却できてないから
0908デフォルトの名無しさん
2017/01/06(金) 12:52:40.87ID:xeAB6nW40909デフォルトの名無しさん
2017/01/06(金) 12:58:04.82ID:eo4zpTs/むしろ技術的に高度な分野なんだけどね
ただ、ゲームを作るときは、
こんなことできないかなーとアイディアを先行させるのが大事で、
それが必ずしも真面目くさった学問から始まるとは限らないのが
傍目には興味がないように見えてしまう
いざというとき力を発揮できる人とボンクラの差は無慈悲にでるけど
0910デフォルトの名無しさん
2017/01/06(金) 17:37:11.91ID:bbamnLhE本の名前を教えてください
0911デフォルトの名無しさん
2017/01/06(金) 17:45:59.04ID:eo4zpTs/普通に14使ってますが何か?
0912デフォルトの名無しさん
2017/01/06(金) 20:28:46.43ID:S2R5Pk4v別に組み込みだから開発環境がプアって訳じゃないぞ
普通に11とか14使ってるし
0913デフォルトの名無しさん
2017/01/06(金) 20:34:45.33ID:EZTJvYq1gccのバージョン4.3とか使ってたりするし
ゲーム業界は移植が当たり前だから無難に03でやるのが通例になってる
時代と共に変わってきてるけど
0914デフォルトの名無しさん
2017/01/06(金) 20:36:49.98ID:EZTJvYq1criなんて未だにc言語だし
0915デフォルトの名無しさん
2017/01/06(金) 20:39:09.74ID:S2R5Pk4v0916デフォルトの名無しさん
2017/01/06(金) 21:31:50.93ID:eo4zpTs/0917デフォルトの名無しさん
2017/01/06(金) 21:33:28.30ID:ueXke68e0918デフォルトの名無しさん
2017/01/06(金) 21:58:54.59ID:xeAB6nW4Game Programming Patterns ソフトウェア開発の問題解決メニュー
以前はKindle Unlimitedにラインナップされてたけど、今はもう外されてるみたいだな
0919デフォルトの名無しさん
2017/01/07(土) 22:51:47.80ID:OA9F1BWNfalseをnullptrに暗黙的に変換できるんですか?
ポインタにfalseを突っ込むのは明らかにミスであるから
コンパイルエラーにしてほしいのですが
0920デフォルトの名無しさん
2017/01/07(土) 23:11:08.10ID:yMwU2C2KC++11までは値が0になる整数定数式はすべてヌルポインタ定数とみなすと規定されていたから。
C++14からは値が0になる整数リテラルに範囲が狭められたのでfalseはポインタに変換できず、エラーになるよ。
http://wg21.cmeerw.net/cwg/issue903
https://github.com/cplusplus/draft/commit/878a6dc4bd50b6eee45dc51fc1e38a9b829679ac
つまりコンパイラの対応規格をアップグレードできれば望みの動作になるはず。
http://melpon.org/wandbox/permlink/rFbiBTMw7B5m9rc6
開発環境のコンパイラがダメでもgccやclangでコンパイルを通すチェックを入れるのがいいかもね。
0921デフォルトの名無しさん
2017/01/07(土) 23:26:56.17ID:OA9F1BWNいくら規格上認められているからと言って
warningぐらい出せと思いますがね
0922デフォルトの名無しさん
2017/01/07(土) 23:41:08.24ID:LoQGBcTO気持ちはわかるが…
0923デフォルトの名無しさん
2017/01/08(日) 00:36:35.60ID:2mrsTkIW↑こいつバカ
0924デフォルトの名無しさん
2017/01/08(日) 00:55:24.93ID:Fh8T+Er/0925デフォルトの名無しさん
2017/01/08(日) 01:00:15.48ID:bwuU6ymI>falseをnullptrに暗黙的に変換できるんですか?
見間違いだろう
言語仕様上不可能
>>920
>falseはポインタに変換できず
ポインターリテラルを勝手にポインターにお題改変しないで下さい
0926920
2017/01/08(日) 01:06:05.60ID:XEVpRZ5tあーごめんごめん。
>919の"nullptr"が文字通りリテラルを指してるとしたら変換って話が成り立たないから
「ヌルポインタ」の意味に勝手に読み替えて話してたわー。
0927デフォルトの名無しさん
2017/01/08(日) 01:33:25.80ID:qYFGvy5Rなぜ?
0928デフォルトの名無しさん
2017/01/08(日) 01:58:55.42ID:+qBxgbmJ規格上OKなものはコンパイルが通るし
規格上NGなものはコンパイルエラーになるし
この時点で、規格上OKなものに警告を出さないとなると
警告っていったい何よ、何に対して出すんよ
警告ってのは規格上は認められているけど
危なげなコードに対して出されるものなんじゃないの?
規格で決められたことが全てで、規格上OKなものには
警告を出さないとなると、警告なんて一切なくなるよ
0929デフォルトの名無しさん
2017/01/08(日) 02:10:10.49ID:81pnxdlMコンパイラに依存しない厳格な警告が欲しいならコンパイラに頼まずに
cppcheckみたいな静的解析ツールを使ってくれとしか言いようがない。
0930デフォルトの名無しさん
2017/01/08(日) 02:13:19.99ID:+qBxgbmJ0931デフォルトの名無しさん
2017/01/08(日) 02:24:45.48ID:81pnxdlMコンパイラのバージョンや使っているオプション引数もロクに書かずにダラダラ書き込んでも、誰も解決できない。
愚痴をこぼしたいだけなのであれば、C++相談室というスレの目的に合わないのでよそへ行ってもらえるかな。
0932デフォルトの名無しさん
2017/01/08(日) 05:08:33.01ID:v4eQ+MBaありがとう
0933デフォルトの名無しさん
2017/01/08(日) 05:36:19.83ID:qYFGvy5Rいや、そこじゃないでしょ
そんな当たり前なことを主張してどうする
その「危なげ」ってのが主観でしかないのに、全ての意見を拾えって言わんばかりの話に、そんな御無体なって話をしているのでは?
0934デフォルトの名無しさん
2017/01/08(日) 07:52:53.52ID:WcAAQ69G0935デフォルトの名無しさん
2017/01/08(日) 08:20:18.72ID:Y+kUVO9L0936デフォルトの名無しさん
2017/01/08(日) 09:13:37.39ID:bwuU6ymI>全ての意見を拾えって言わんばかりの話に、そんな御無体なって話をしているのでは?
そうではないぞ
規格上許された範囲の動作について希望を述べることが身勝手と主張する>>922についての話であって
「おれはこうして欲しいんだよな」を
「全ての意見を拾え」にすり替えられても…
0937デフォルトの名無しさん
2017/01/08(日) 10:41:20.69ID:Pah/Azv50938デフォルトの名無しさん
2017/01/08(日) 11:15:00.62ID:MCnIJfyv0939デフォルトの名無しさん
2017/01/08(日) 12:52:07.24ID:C9GVPqMv> 規格上NGなものはコンパイルエラーになるし
はあ?
ならないケースはいくらでもあるけど?
0940デフォルトの名無しさん
2017/01/08(日) 13:13:05.71ID:uBM7r9DB具体的には?
0941デフォルトの名無しさん
2017/01/08(日) 13:37:15.58ID:C9GVPqMvi = i++;
0942デフォルトの名無しさん
2017/01/08(日) 13:40:42.31ID:ji5cYzUPコンパイラのベンダーに聞け。
「自分の膝を打つ自由を残しています」と言われたら、そのコンパイラを窓から投げ捨てるなり対応規格を上げるなり自由にすればいい。
0943デフォルトの名無しさん
2017/01/08(日) 13:58:55.03ID:79WX7WfA規格上NGでは無いだろ
0944デフォルトの名無しさん
2017/01/08(日) 14:11:21.05ID:sZURLTxu儀式魔術の呪文みたいだ
0945デフォルトの名無しさん
2017/01/08(日) 14:18:37.69ID:aDyEaxK40946デフォルトの名無しさん
2017/01/08(日) 14:23:42.33ID:C9GVPqMvNGだろ
0947デフォルトの名無しさん
2017/01/08(日) 14:39:03.61ID:sZURLTxu#include <stdio.h>
int main()
{
int i = 1; i = i++; printf("%d\n",i); return 0;
}
E:\home>cl int.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
int.c
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:int.exe
int.obj
E:\home>int
2
E:\home>gcc --version
gcc (x86_64-posix-sjlj, built by strawberryperl.com project) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
E:\home>gcc -o int int.c
E:\home>int
1
0948デフォルトの名無しさん
2017/01/08(日) 14:41:18.42ID:XEVpRZ5t「規格」がC++14を指していて"NG"が未定義動作を含むなら「規格上NG」で正しい。
0949デフォルトの名無しさん
2017/01/08(日) 15:45:11.89ID:C9GVPqMv0950デフォルトの名無しさん
2017/01/08(日) 16:17:49.78ID:79WX7WfAwarningはあくまでコンパイラ側の親切心で出ているだけで規格上警告出せとか無いだろ
depricated属性にしたってヒントでしかない
0951デフォルトの名無しさん
2017/01/08(日) 16:33:58.94ID:79WX7WfA未定義だからコンパイラは検出して警告すべきって、そんなに簡単に検出できるならはじめから規格上ill-formedにしておくよ。
0952デフォルトの名無しさん
2017/01/08(日) 16:37:30.69ID:hjRij54l0953デフォルトの名無しさん
2017/01/08(日) 16:38:19.89ID:sZURLTxugcc -Wall -o int int.cpp
int.cpp: In function 'int main()':
int.cpp:5:9: warning: operation on 'i' may be undefined [-Wsequence-point]
i = i++;
^
0954デフォルトの名無しさん
2017/01/08(日) 16:52:27.54ID:C9GVPqMv> 未定義動作を含むコードは正当なc++のコード
はあ?
0955デフォルトの名無しさん
2017/01/08(日) 16:53:57.66ID:79WX7WfA0956デフォルトの名無しさん
2017/01/08(日) 17:13:22.89ID:wDUr6p7G素人じゃないんだから自分からソフトの方に合わせろよ
0957デフォルトの名無しさん
2017/01/08(日) 17:18:22.65ID:sZURLTxu0958デフォルトの名無しさん
2017/01/08(日) 17:32:16.09ID:hjRij54l0959デフォルトの名無しさん
2017/01/08(日) 17:35:15.89ID:79WX7WfA0960デフォルトの名無しさん
2017/01/08(日) 17:54:38.54ID:MJfiP+Ssここで map と priority_queue のそれぞれについて,別の operator< を使うにはどうすればいいのでしょうか?
0961片山博文MZ ◆T6xkBnTXz7B0
2017/01/08(日) 18:06:38.39ID:XUPIQMwT関数または関数オブジェクトのクラスをテンプレート引数に指定する。
0962デフォルトの名無しさん
2017/01/08(日) 21:25:34.97ID:MMBROJQ9delete i;とすると
実行時に
invaild next size(fast)
とエラーが出てしまいます。
どのように変えたらエラーが出なくて済むのでしょうか?
0963デフォルトの名無しさん
2017/01/08(日) 21:32:53.46ID:XEVpRZ5tそのコードじゃ問題を再現できない。
http://melpon.org/wandbox/permlink/JjDWGWkVz7oNi2RR
どっかでメモリ破壊してるんだろうけど、ソース見て見つけられないんならvalgrindとか使うといいかもね。
https://www.google.com/search?q=%22invaild+next+size%28fast%29%22
0964デフォルトの名無しさん
2017/01/08(日) 21:41:55.40ID:gWwBFCM3int main() {
int ** i = new int*;
delete i;
}
の4行でも再現することを確認もせずに質問するアホにマジレス
0965デフォルトの名無しさん
2017/01/08(日) 21:57:48.03ID:c5pY166L知らずに言うけど、先に、delete *i; してから、
delete i; すれば?
0966デフォルトの名無しさん
2017/01/08(日) 22:07:47.12ID:c5pY166L未定義は、変数にゴミが入っているのと同じ。
値が正しいとしても、たまたまだから、値に意味がない
MISRA-Cでは、100以上のルールに違反していないか、ツールを使ってチェックする。
トヨタでは、5%しかルールを守っていなかった。
外注と素人のプログラマーばかりだった
こういう会社は、医療機器・産業機械などを作ってはいけない。
アプリのバグで、すぐに人が死ぬから
0967デフォルトの名無しさん
2017/01/08(日) 22:28:17.50ID:sZURLTxu0968デフォルトの名無しさん
2017/01/09(月) 00:21:27.46ID:1sdVa/mI※命に関わる場合を除く
0969デフォルトの名無しさん
2017/01/09(月) 11:39:08.89ID:IZbe/h67再現てエラーが出るってことか?
おまえんとこの環境って何だ?
俺んとこ↓ではエラー出ないぞ。
Microsoft(R) C/C++ Optimizing Compiler Version 19.10.24629 for x86
g++ (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 6.1.0
そもそも出るわけないので、こちとら安心してるが。
0970デフォルトの名無しさん
2017/01/09(月) 11:58:31.52ID:sqCCzTuiFORTRAN77でも使ってりゃ良いのに
0971デフォルトの名無しさん
2017/01/09(月) 12:09:05.97ID:s0WlKSpH0972デフォルトの名無しさん
2017/01/09(月) 12:09:35.65ID:IZbe/h67個人的な美意識くさい押しつけが鼻につくあたり
0973デフォルトの名無しさん
2017/01/09(月) 12:09:51.28ID:s0WlKSpHMISRA チェッカーが手軽に手に入るのならば,ご利益があるんじゃない,ほしいよね
0974デフォルトの名無しさん
2017/01/09(月) 12:32:02.36ID:JTQclrckそもそも仕様に無理があるとかさ。
0975デフォルトの名無しさん
2017/01/09(月) 12:41:47.54ID:s0WlKSpHえ?コンパイラが不安定?MSVCとかですか?
0976デフォルトの名無しさん
2017/01/09(月) 12:43:41.22ID:IZbe/h67未定義や未規定はコンパイラのせいじゃないぜ
禁止事項が守れないPGがMTBFの短い不良パーツであるとき
不具合に関係しやすいってだけで
0977デフォルトの名無しさん
2017/01/09(月) 12:55:50.61ID:Ml4ZG/LKこれが問題になるのってどんな環境?
0978デフォルトの名無しさん
2017/01/09(月) 13:43:00.36ID:tlAVTCLvこういったスレって、元レスの文章がちゃんと読めてなくて
勘違いした人しかレスを付けないから、必ずと言っていいほど
流れがおかしな方向へ行くよな
ちゃんと文章が読めた人は何も思わないから反論もないし何も書き込まないっていうね
殆どの人はちゃんと読めているんだけど、100人に一人ぐらい読めてない人が居て
その人だけが書き込むから、スレ全体の書き込みにはアホっぽいのばかり残っていくっていう
0979デフォルトの名無しさん
2017/01/09(月) 13:44:34.19ID:s0WlKSpH0980デフォルトの名無しさん
2017/01/09(月) 13:45:17.98ID:s0WlKSpHいきなりどうしたの?
0981デフォルトの名無しさん
2017/01/09(月) 13:48:30.46ID:tlAVTCLv>>964 は、書き込んだ本人は「再現しない」ことが前提で話をしている
その上で質問者に、自分の環境で再現するかどうか確認してから質問しろ
って言ってるのに、なぜか変な流れになっている
ほとんどの人はちゃんと読めているんだけど100人に一人ぐらい
勘違いする人がいて、その人だけが「何言ってんだ?」って反論のレスを返すから
結果そちらが目立って、変な流れになる
0982デフォルトの名無しさん
2017/01/09(月) 13:51:43.92ID:XpNCyuGHそれは書き方悪いから誤解されても仕方ない。
俺も何言ってんのかわかんなかったよ
0983デフォルトの名無しさん
2017/01/09(月) 14:11:00.93ID:YmMsaSRh0984デフォルトの名無しさん
2017/01/09(月) 14:21:53.24ID:lAQ0GX8y0985デフォルトの名無しさん
2017/01/09(月) 14:21:59.71ID:Ml4ZG/LK>>964で問題が再現できちゃうのかとおもたんだよ・・・
0986964
2017/01/09(月) 14:25:08.19ID:YmMsaSRh0987デフォルトの名無しさん
2017/01/09(月) 14:27:53.50ID:Jef9VfGG誰かを揶揄しようとして結果何を言いたいのか解りにくくなってんだよね。
もっと解りやすい書き方いくらでもあるだろうに、程度問題だが大勢の人が誤解なく理解してたらもっと早く誤解してる人への指摘はあったろうに。
>>983
健常者判定機さん今日もお勤めご苦労さまです
0988デフォルトの名無しさん
2017/01/09(月) 14:50:10.93ID:p96WJVydC++相談室 part129
http://echo.2ch.net/test/read.cgi/tech/1483940967/
0989デフォルトの名無しさん
2017/01/09(月) 15:06:23.67ID:lAQ0GX8yこのように書いたところエラーが出てしまう、という内容で、
再現しないということは全く言ってなくて、
どうやってこのエラーを出なくしたら良いか?だと思う
>>964 は、
「簡単なコードで再現が確認できるのだから、再現できないことはないでしょう」
と言っているのではないか?
0990デフォルトの名無しさん
2017/01/09(月) 15:10:29.86ID:s0WlKSpH>>964 だったんだね.たしかにちょっと早合点してしまったね
二重ポインタ ** はあまり使わないな,どっちかというとポインタの参照 *& の方が好きだ
0991デフォルトの名無しさん
2017/01/09(月) 16:39:58.23ID:sqCCzTuiなんてアホなレスした>>964が悪い
0992デフォルトの名無しさん
2017/01/09(月) 17:12:10.91ID:s0WlKSpH的確なアドバイスありがとうございます.
http://echo.2ch.net/test/read.cgi/tech/1434079972/19
0993デフォルトの名無しさん
2017/01/09(月) 17:12:15.07ID:L89h9vCc再現したんなら>>964が答えたらいいのに
で、>>962はどこ行った?
0994デフォルトの名無しさん
2017/01/09(月) 18:27:43.10ID:YKENqwhN0995デフォルトの名無しさん
2017/01/09(月) 18:31:43.64ID:MgtRKFl00996デフォルトの名無しさん
2017/01/09(月) 18:43:28.99ID:tlAVTCLv自分の環境で
int main() {
int ** i = new int*;
delete i;
}
の4行で再現するかどうか、確認もせずに質問するアホにマジレス
かなぁ
0997デフォルトの名無しさん
2017/01/09(月) 18:50:24.02ID:lAQ0GX8yマジレスした奴に問題があるのか
その辺が曖昧
0998デフォルトの名無しさん
2017/01/09(月) 18:51:46.59ID:tlAVTCLvって言い回しは一見「再現する」と言っているようで、そうではない
原文から
「再現することを確認もせずに質問するアホにマジレス」
って抜き出してみればこれは何の問題もない
0999デフォルトの名無しさん
2017/01/09(月) 18:56:20.67ID:hlZkGY3C1000デフォルトの名無しさん
2017/01/09(月) 19:00:49.44ID:XpNCyuGH10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 43日 18時間 57分 0秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。