C++相談室 part121 [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2015/12/04(金) 23:54:41.33ID:rlbDZGLzただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part120
http://peace.2ch.net/test/read.cgi/tech/1445516998/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1439849418/
次期規格C++1zはこちら
C++14/C++1z 20
http://peace.2ch.net/test/read.cgi/tech/1410382924/
■長いソースを貼るときはここへ。■
http://codepad.org/
http://ideone.com/
0002デフォルトの名無しさん
2015/12/04(金) 23:57:15.45ID:rlbDZGLzhttps://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0003デフォルトの名無しさん
2015/12/04(金) 23:58:20.59ID:rlbDZGLz環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
0004デフォルトの名無しさん
2015/12/05(土) 00:00:25.92ID:TKq/RElB0005デフォルトの名無しさん
2015/12/05(土) 10:08:08.42ID:0KIgPYZB0006デフォルトの名無しさん
2015/12/05(土) 10:29:20.18ID:48FeOGNK繰り返しメモリから読んで欲しくないなら int b = a でいいんじゃないかな。
そういう話じゃないんだろうけど。
実際のところ思ってるより問題になるケースは少ないと思うよ。
https://goo.gl/cyhgw8
たとえばこんなコードならポインタ操作があっても一回しか読まれないわけで。
型ベースの aliasing rule もあるし。
0007デフォルトの名無しさん
2015/12/05(土) 11:13:41.33ID:NRX1k+Isレス�dクス、
まあint b = aと同じことなんですが、既存コードの高速化のため、
関数先頭に片っ端からconst int m_x = g_foo.m_x;(Fooのメンバ関数ならconst int m_x = Foo::m_x;)を挿入する「だけ」のソースコード変更で実験中なう
>ポインタ操作があっても一回しか読まれないわけで。
グローバル変数g_xと、別のグローバル変数のメンバg_foo.m_xが同一実体のaliasでありえないことはコンパイラにもひと目でワカルんでしょうけども、
問題はg_xのアドレスが関数引数で渡され、その関数内でg_foo.m_xを直接読むケースが悩ましい…
該当するケースについて、渡されてくるポインタを__restrictにすれば解決なんですが、これは怖くて機械的にはやれない
および参照で渡されたとき、参照の___restrictは比較的新しいコンパイラでないと対応していない…
>型ベースの aliasing rule もあるし。
言わんとすることは多分わかるんですが、
そこまで逝くともはやどこまでコンパイラの気持ちになれば良いのかわからん…
0008デフォルトの名無しさん
2015/12/05(土) 11:39:52.49ID:48FeOGNKそんな小手先の速度差がほんとうに問題になることは少ないし、
ほんとうにそこが問題ならローカル変数に引き上げればいいってのがわかってるわけで、
何が問題だと思ってるのかわからん。
0009デフォルトの名無しさん
2015/12/05(土) 11:44:20.03ID:NRX1k+Isものすごい深さの多重ループと本質的に同じやつ(ソースコードは既存)の高速化を今せねばならないのデス、
0010デフォルトの名無しさん
2015/12/05(土) 14:27:40.42ID:3X0n/q/1constとかregisterとか付けたら速度変わる?
0011デフォルトの名無しさん
2015/12/05(土) 14:32:46.12ID:SYFBCoeIお前は20世紀空タイムスリップしてきたのか?
0012デフォルトの名無しさん
2015/12/05(土) 15:01:18.43ID:NRX1k+IsC++のconstは1 bitの書き換えも許さないという意味では無いので
const付きオブジェクトであってもコンパイラはalias経由で書き換えられる可能性を想定せざるを得ず、最適化結果は変わらないはず
VC++2010で実験する限り実際変わらないようである
それよかローカル変数化で10倍早くなった;
0013デフォルトの名無しさん
2015/12/05(土) 15:04:51.31ID:9PUwCRa0alias経由で書き換えられる可能性って例えばどういう場合だよ?
0014デフォルトの名無しさん
2015/12/05(土) 15:13:01.83ID:eGerJrSR0015デフォルトの名無しさん
2015/12/05(土) 15:17:58.50ID:9PUwCRa0そりゃそうだ
だけど基本そんなことしちゃダメ
constをちゃんと使ってない既存のボロコードを使う場合とかにしょうがなくキャストするくらい
0016デフォルトの名無しさん
2015/12/05(土) 15:27:17.32ID:NRX1k+Isあー>>12でconstつきオブジェクトと言ったのは適切ではなくて、constつきポインタで指し示されたオブジェクト、と訂正します、
で、毎度おなじみn3337.pdf(タダのやつ)から
>7.1.6.1 The cv-qualifiers
>...
>A pointer or reference to a cv-qualified type need not actually point or refer to a cv-qualified object, but it
>is treated as if it does; a const-qualified access path cannot be used to modify an object even if the object
>referenced is a non-const object and can be modified through some other access path. [ Note: Cv-qualifiers
>are supported by the type system so that they cannot be subverted without casting (5.2.11)
下から2行目の
>can be modified through some other access path.
に注目
const_cast<T*>でconst外しを行った結果に書くことは未定義動作、という規定があり、
それと混同している人が多そうな気がするが、それとは別のwrite access方法であることに注意
0017デフォルトの名無しさん
2015/12/05(土) 15:34:44.74ID:NRX1k+Isint g_a = 10;
void foo() {
const int* p = &g_a;
printf("[1] *p=%d\n", *p); // (1)
g_a += 11;
printf("[2] *p=%d\n", *p); // (2)
}
コンパイラは外部シンボルの呼び出しやアクセスで*pがもろともに書き換えられる可能性がある想定で最適化せねばならないから、
(1)と(2)のそれぞれで*pをメモリからロードする。
0018デフォルトの名無しさん
2015/12/05(土) 15:58:59.61ID:eGerJrSRconst int *p の const は、どこまで行っても、あくまで変数pを修飾しているだけに過ぎなくて
pの指しているものを本当の意味でconstにしているわけではなく
単に変数pを使っては書き換えないと宣言しているだけだからな
しかもキャストすると簡単にconstはいつでもどこでも外せるから
あらゆる可能性を考えなければならないコンパイラからしたら
最適化のヒントにならないんだよ
0019デフォルトの名無しさん
2015/12/05(土) 16:00:04.98ID:eGerJrSRこれは最適化される
0020デフォルトの名無しさん
2015/12/05(土) 16:06:05.41ID:9PUwCRa0コンパイラは考慮しなくてはいけないってルールってあるんだっけ?
0021デフォルトの名無しさん
2015/12/05(土) 16:15:00.14ID:9PUwCRa0ほんまかいな?規格に書かれてるならその箇所を教えて欲しい
0022デフォルトの名無しさん
2015/12/05(土) 16:17:49.62ID:NRX1k+Is無い
最適化は別スレッドからの干渉を仮定しない
volatileで最適化を抑止することならできる
>>17でコンパイラが気にしているのは、同一スレッドコンテキスト内で起きる副作用
0023デフォルトの名無しさん
2015/12/05(土) 17:13:38.32ID:9PUwCRa0関数の引数については呼び出される側においてはconstは最適化に寄与しないということには同意するわ
ただし呼び出し側は関数から戻ってきた時に*pが変化していないことを仮定できるので最適化に寄与する
0024デフォルトの名無しさん
2015/12/05(土) 17:25:14.88ID:NRX1k+Is>ただし呼び出し側は関数から戻ってきた時に*pが変化していないことを仮定できるので最適化に寄与する
そんな仮定は成立しない
証拠はこれ。
a.cpp
--------
int g_a = 10;
extern void bar();
void foo() {
const int* p = &g_a;
printf("[1] *p=%d\n", *p);
bar();
printf("[2] *p=%d\n", *p);
}
--------
b.cpp
--------
extern int g_a;
void bar() { ++g_a; }
--------
0025デフォルトの名無しさん
2015/12/05(土) 20:18:06.93ID:eGerJrSRいくらconst修飾だろうがシングルスレッドだろうが
ひとたび関数を呼び出したら、その先で何が行なわれているかは、呼び出し元からはわからない
もちろんインライン展開すれば別だが、その場合もconstを頼りに最適化をしているわけではなく
コードを静的に解析した結果に基づいて、変更の有る無しを判断している
そもそもconstはキャストで外せるので、コンパイラはconstをあてにしていない
constはプログラマのミスを発見するためのものでしかない
ただし、定数宣言のconstは最適化に使われるが
0026デフォルトの名無しさん
2015/12/05(土) 20:22:05.81ID:22zPQN1u>>24
>>23 が言いたいのは
> 関数の引数については
のところじゃね?
「関数の引数については〜」が次の行にも係ってる
0027デフォルトの名無しさん
2015/12/05(土) 20:34:13.03ID:22zPQN1uconst がどうこうでなく、callee のコードがコンパイラに見えてるか、
ってのが重要か
0028デフォルトの名無しさん
2015/12/05(土) 20:42:57.85ID:9PUwCRa0まーた変な例を持ちだすね
その場合ならg_aはグローバルだから確かにそうなるけど
ていうかそんなグローバル使うような糞コード書いて最適化効かねーとか言われてもw
0029デフォルトの名無しさん
2015/12/05(土) 21:50:32.30ID:NRX1k+Is>>28
これでどうよ?
ttp://ideone.com/fSabJr
0030デフォルトの名無しさん
2015/12/05(土) 21:59:10.17ID:wharPYQR> ていうかそんなグローバル使うような糞コード書いて最適化効かねーとか言われてもw
コンパイラは、そんな糞コードでも規格に沿ってりゃ対応しないといけないって話だろ
バカすぎ
0031デフォルトの名無しさん
2015/12/05(土) 22:06:34.83ID:22zPQN1uコンパイラは gcc5.1.0
・結果
1) const の有無で生成コードは変わらない
callee がコンパイラから見えていると、インライン化によって
const な関数(宣言に関係なく実質的に)を呼び出すコードは高速になる(当たり前だな……)
逆にコンパイラから callee が見えないと const 修飾の有無は *関係ない*
2) -fno-inline をつけると生成コードはほぼ同じになる
コンパイラは callee のレジスタの使い方を知っているはずなので、インライン化されなくても
caller のレジスタの使い方が変わるかと思っていた。この結果は意外だった
3) ただし -fno-inline をつけていても callee が static な関数だとレジスタの使い方が変わる
これは予想通り
・結論
a) const は自分(プログラマ)のためのものであってコンパイラのためのものではない
b) コンパイラは(少なくとも俺の環境では)static でない関数呼び出しの ABI はちゃんと守る
たとえ関数が自分から見えていても ABI で揮発性と決まっているレジスタは揮発性として扱う
まあでも俺はコンパイラじゃないし、できる限り const つけるけどね……
あとここまで書いておいてなんだけど実験コード載せないと意味ないな
まあ気になる人は自分で実験してくれ
汗を見ながら最適化が掛かるか否かを見てたんだけど
void foo() {
// ← ここに挿入する
printf("%d\n", *p);
printf("%d\n", *p);
return;
}
を基本にして
int* p = static_cast<int*>(malloc(sizeof(int)));
これはmallocの呼び出しからして消えた(つまりメモリリークするようにしか見えないのにメモリリークしないコードが生成された)
int* p = bar(); // 適当な関数
これは最適化が掛からなかった(つまり2回メモリから読み込んだ)
この違いは何だろう。
コンパイラはclang 3.7.0(370/final)
__attribute__((malloc))をbarに付けたらメモリから読む回数が減った!
0034デフォルトの名無しさん
2015/12/05(土) 22:45:21.68ID:NRX1k+Is__restrictの効果が目に見えてワカル例(__restrictの有無で動作が変わる)を書いたわ;
http://ideone.com/iVcFhs
↑のコードの
//#define __restrict
というコメントアウトのままだと__restrictが効いて、s=55になる。(誤ったコードでありながら、1〜10の総和を正しく計算する。)
コメントアウトを外すと、__restrictが無効となり、s=110になる。(書いたとおりに間違う。)
案外難しかったわ;
0035デフォルトの名無しさん
2015/12/05(土) 23:04:12.27ID:9PUwCRa0全然例になっていない やり直し
barの引数がconstじゃないんだからその動作は当たり前だろ
だいたい俺は動作が変わるかどうかじゃなくconstの有無で最適化が効くかどうかという話をしてるつもりなんだが
俺の主張はconstを正しく付けることで最適化が効く場合があるから可能な限りconstは付けるべきだと言ってるだけ
const付ければどんな場合でも最適化されるなどとバカなことは言ってない
0036デフォルトの名無しさん
2015/12/05(土) 23:13:10.74ID:NRX1k+Is>だいたい俺は動作が変わるかどうかじゃなくconstの有無で最適化が効くかどうかという話をしてるつもりなんだが
それ系の話題はそっちで勝手に振って進めてホスイ☆
漏れは>>16に書かれているうちの
>can be modified through some other access path.
の実例(constつきポインタで指し示されたオブジェクトがalias経由で書き換えられる例)を述べたまでなわけだが…
0037デフォルトの名無しさん
2015/12/05(土) 23:28:51.67ID:NRX1k+Is>ただし呼び出し側は関数から戻ってきた時に*pが変化していないことを仮定できる(29)
に対しては、>>24および>>30にて、字面上pを含まないbar()の呼び出し前後で*pが指すオブジェクトが変更される例を挙げたから、
反例を示したことになる。(関数呼び出しの前後で*pが変化していないことは「無条件には」仮定できない)
>barの引数がconstじゃないんだからその動作は当たり前だろ(35)
は、当たり前だという結論が誤りであり、かつ主張(29)に対して後出しジャンケンである
やpっぱカオスやな…
0038デフォルトの名無しさん
2015/12/05(土) 23:37:04.63ID:9PUwCRa0>>23の反例になんてなってない
話が噛み合ってないだけだよ
0039デフォルトの名無しさん
2015/12/05(土) 23:45:07.55ID:NRX1k+Is> >>23 が言いたいのは
> > 関数の引数については
> のところじゃね?
そうかもしれないが漏れは例示したコード>>17、>>24、>>29の中でpを関数の引数に使った事実は無いので知らん
>>28が別の話をはじめるのはいいが漏れに苦情を言われるのは困る
>>38
では1チャンやるから>>23で主張したかったことに適切な言葉を補い誤解の余地無く述べよ
0040デフォルトの名無しさん
2015/12/06(日) 00:43:00.97ID:cIZcNmeU> mallocの呼び出しからして消えた
面白い。static な領域へのポインタを取得するだけになるのね
ちなみに gcc だと malloc は残ったままだった
代わりに 2 回目の printf が tail-call の最適化で jmp になってた
# clang -g -O3
push rsi
sub rsp,0x20
lea rsi,[rip+0x2a74] # 404030 <L.str>
mov rcx,rsi
call 402c78 <printf>
mov rcx,rsi
call 402c78 <printf>
nop
add rsp,0x20
pop rsi
ret
# gcc -g -O3
push rbx
sub rsp,0x20
mov ecx,0x4
call 402c58 <malloc>
mov ebx,DWORD PTR [rax]
lea rcx,[rip+0x2a68] # 404030 <.rdata>
mov edx,ebx
call 402c48 <printf>
lea rcx,[rip+0x2a5a] # 404030 <.rdata>
mov edx,ebx
add rsp,0x20
pop rbx
jmp 402c48 <printf>
0041デフォルトの名無しさん
2015/12/06(日) 02:18:24.92ID:bOeDOEqdひとつ教えてやろう
お前が相手をしているのはキチガイコテハンのQだ
しかも今日も何度かIDを変えている
0042デフォルトの名無しさん
2015/12/06(日) 02:34:42.11ID:XiMnzaaH0043デフォルトの名無しさん
2015/12/06(日) 03:01:51.08ID:5cQQ9LrmなんでもQとやらに見えちゃうあんたは病気だよ
0044デフォルトの名無しさん
2015/12/06(日) 03:10:06.37ID:5cQQ9Lrm0045デフォルトの名無しさん
2015/12/06(日) 03:46:12.86ID:5cQQ9Lrm1チャン与えてくれるとはありがたい(笑)
俺が言ってるのは単純なことで
extern void bar(const int*);
void foo(void)
{
int a=1;
printf("%d\n", a);
bar(&a);
printf("%d\n", a);
}
でbarから戻ってきた時にaが書き換わってない(1のまま)とコンパイラは仮定しても良いだろうということ。
仮定しちゃいかんのなら規格のどこに書いているのか教えて欲しい。
確かにbarでcost_castすれば書き換えられるが、そんなことまで考慮しなきゃいけない決まりなどあるのかということ。
特定のコンパイラの出力コードがどうとかじゃなく、規格上そういう決まりがあるなら俺は自分の誤りを認めるよ。
0046デフォルトの名無しさん
2015/12/06(日) 03:50:25.31ID:5cQQ9Lrmextern void bar(const int*);
void foo(void)
{
const int a=1;
printf("%d\n", a);
bar(&a);
printf("%d\n", a);
}
の場合はどうなのか?barがcost_castして書き換えてるならこの場合もaは書き換わる。
0047デフォルトの名無しさん
2015/12/06(日) 04:02:33.67ID:cfOzLQZM例外なくundefinedなんて書いてません
0048デフォルトの名無しさん
2015/12/06(日) 05:45:43.74ID:5cQQ9Lrm「一部で」とか「例外なくじゃない」じゃ何の答えにもなっていないよ
undefined behaviorじゃないと規定されてるケースを挙げてくれないと
0049デフォルトの名無しさん
2015/12/06(日) 07:46:41.80ID:cfOzLQZMconst castしようが書き換え有効なポインタの操作で
未定義動作になるなんて規格にはありません
つーかそんな事書いてあったらconst_castなんてあるわけねーだろ
0050デフォルトの名無しさん
2015/12/06(日) 08:57:18.97ID:cIZcNmeUC99 の規格書の Annex J.2 Undefined behavior に
> An attempt is made to modify an object defined with a const-qualified type through
> use of an lvalue with non-const-qualified type
ってあるから、const 外しによるアクセスは全部 undefined だと思ってた
コンパイラ側で定めてる例があるのかな
005250
2015/12/06(日) 09:21:58.64ID:cIZcNmeU> Except that any class member declared mutable (7.1.1) can be modified, any attempt to modify a const
> object during its lifetime (3.8) results in undefined behavior.
ってあった。ってことは全部 undefined ?
でも 5.2.11 Const cast には >>47 の言う通り
> Depending on the type of the object, a write operation through the pointer, lvalue or pointer
> to data member resulting from a const_cast that casts away a const-qualifier may produce undefined
> behavior
ってある。"may produce undefined" って先に引用した方と食い違ってるような気がするんだけど
分からん。誰か教えてください
0053デフォルトの名無しさん
2015/12/06(日) 10:30:17.18ID:7Za5T0R3bar が受け取った a を指すポインタを const_cast して中身を書き換えても
書き換えられる a は const object ではないので、 >>52 の挙げた 7.1.6.1 のルールには
違反しない。コンパイラはそういったコードによる書き換えも想定する必要がある。
>>46 の場合に同じことをすると、 a は const object なので、 7.1.6.1 のルールに違反し、
未定義動作になる。コンパイラはそういったコードを想定する必要は無い。
つまり bar(&a) 呼び出しの後も a が 1 であると仮定してよい。
0054デフォルトの名無しさん
2015/12/06(日) 10:42:22.88ID:WLKzjp+o0055デフォルトの名無しさん
2015/12/06(日) 10:55:04.97ID:cfOzLQZMdefineの意味をよーく考えましょう
0056デフォルトの名無しさん
2015/12/06(日) 10:57:19.88ID:qO5PB4gl彡⌒ミ
( ´c_,`)
⊂|、, つ きゅっ
((, |
| | ノ
(.(_)
0057デフォルトの名無しさん
2015/12/06(日) 10:58:55.04ID:cfOzLQZMどうも
005850
2015/12/06(日) 11:43:54.92ID:cIZcNmeU分かりやすい説明ありがとう
で、>>45-46 を gcc と clang でコンパイル (-g -c/ -g -O[1-3] -c) してみたら
gcc は全く同じコードを吐いた。-O2 にいたっては >>46 は >>45 への tail-call として扱われて、ジャンプ命令一つになってしまった
つまり gcc は const を信用していない。無視する。foo がポインタを書きかえたら printf は違う値を出力する
clang は >>53 の
> つまり bar(&a) 呼び出しの後も a が 1 であると仮定してよい
という仮定をちゃんとしてくれて、二回目の printf の第二引数が定数 1 になった
つまり foo がポインタを書きかえても printf は二回とも 1 を出力する
const も(コンパイラによっては)最適化に寄与するのかー
0059デフォルトの名無しさん
2015/12/06(日) 11:51:57.90ID:7Za5T0R3gcc でも >>46 のコードなら2回目が定数 1 の出力になるよ。
https://goo.gl/yHHPLm
006050
2015/12/06(日) 12:04:17.48ID:cIZcNmeUバージョンの違いかなあ。俺は
$ gcc --version
gcc.exe (tdm64-1) 5.1.0
...
$ clang --version
clang version 3.7.0 (tags/RELEASE_370/final)
Target: x86_64-w64-windows-gnu
Thread model: posix
な感じ
0061デフォルトの名無しさん
2015/12/06(日) 12:41:15.42ID:cfOzLQZMconst*は呼び出し側だろうと関係ないな
アドレスとってるんだから当たり前か
0062デフォルトの名無しさん
2015/12/06(日) 12:42:25.95ID:cfOzLQZM0063デフォルトの名無しさん
2015/12/06(日) 13:17:05.19ID:5cQQ9Lrmどうもありがとう。
7.1.6.1-4の例を見るとどうやらそれが正しいみたいですね。
g++ 4.8.4とVC++2015で試してみたけど(最大限の最適化でfooだけコンパイルしてアセンブリ出力を確認)
その通りの解釈でコード生成してる。
しっかし嫌な仕様だよなあ。
barが外部ライブラリとかでソースが分からない場合const修飾してるからって
ポイント先が書き換わらないと思っちゃいけないわけだ。コンパイラだけじゃなくて
呼び出す側を書くプログラマも。
const_castでconst外しした書き換えなんて規格的には全てundefinedにして
しょうがない場合だけuse at your own riskで使ってもいいよってすれば良かったのに。
0064デフォルトの名無しさん
2015/12/06(日) 13:30:35.31ID:5cQQ9Lrmアドレスじゃなくて参照でも同じ
--- bar.h ---
void bar(const int& a);
--- foo.cpp ---
#include <bar.h>
void foo(void)
{
int a=1;
printf("%d\n", a);
bar(a);
printf("%d\n", a);
}
の場合、barの提供者が書き換えないと明示的にドキュメントしていない限り
fooを書く人はbarの呼び出しでaが書き換わらないと仮定しちゃいけない。
つくづく嫌な仕様だなあ。
0065デフォルトの名無しさん
2015/12/06(日) 13:39:53.67ID:7Za5T0R3> barが外部ライブラリとかでソースが分からない場合const修飾してるからって
> ポイント先が書き換わらないと思っちゃいけないわけだ。コンパイラだけじゃなくて
>. 呼び出す側を書くプログラマも。
んなこたーない。
単に const int* を外部から受け取る関数では、それが実際に const object かどうか
判別する方法が無いんだから、結局のところ書き換えてはいけない。
const int* (および参照)を受け取っておいて書き換えるような関数にこそ明示的な
ドキュメントが要るし、ドキュメントがあったところでクソなインターフェースと言っていい。
何かしらの根拠によりポインタが指している先が const object ではないことがわかる、
あるいは知っている場合には const_cast を通しての書き換えも使える。
たとえば、昔ながらのコールバック関数に汎用引数 const void* を渡せる機構が付いてて、
特定コールバック内ではその汎用引数が非 const オブジェクトを指していると知っている場合、
とかね。
0066デフォルトの名無しさん
2015/12/06(日) 13:48:45.13ID:5cQQ9Lrm>結局のところ書き換えてはいけない。
そうだったら良かったんだけど7.1.6.1によるとconst_castを通した非constオブジェクトの
書き換えは完全に合法だよね。少なくとも俺が試したコンパイラはそう解釈してる。
まあ規格がどうあれconst外しなんて極めて特別にしょうがない場合以外は決してやっちゃいけないと思うけど。
0067デフォルトの名無しさん
2015/12/06(日) 13:59:39.80ID:wxELMJDcすでに>>17に書いてある(しかも1度ならず引用した
>can be modified through some other access path.
じゃあいけまへんの?この一文があるからコンパイラはconst付きポインタで指し示されたオブジェクトがalias経由で書き換えられる可能性を考えねばならない。
漏れの書いてることをよっぽど適当に読み流してるのか、あるいはこの手の規格書の読み方に慣れてないんか…
>>49
毎度おなじみn(ry
>>53は完全に正しい希ガス。および漏れもすでに同じことを>>16で書いたつもりだった…!
1. constつきオブジェクトとconstつきポインタで指し示されたオブジェクトの区別
>あー>>12でconstつきオブジェクトと言ったのは適切ではなくて、constつきポインタで指し示されたオブジェクト、と訂正します、
2. constつきポインタで指し示されたオブジェクトの書き換わりが合法であること(コンパイラは書き換わりを仮定せねばならないこと
> 下から2行目の
> >can be modified through some other access path.
> に注目
3. const_cast<T*>でconst外しされたオブジェクトへの書き込みが未定義動作であること
>const_cast<T*>でconst外しを行った結果に書くことは未定義動作という規定があり、
>それと混同している人が多そうな気がするが、
(訳注: 3.は具体的にはn3337.pdfのセクション5.2.11 Const castのパラグラフ7を指す。
> [ Note: Depending on the type of the object, a write operation through the pointer, lvalue or pointer
> to data member resulting from a const_cast that casts away a const-qualifier73 may produce undefined
> behavior (7.1.6.1). ?end note ]
この内容は本題でないつもりだったので、constつきオブジェクトとconstつきポインタで指し示されたオブジェクトの区別とか、
未定義動作になる「かもしれない」と未定義動作に「なる」の区別があいまいだったわ、
わかりんくくてすまんの…
006967
2015/12/06(日) 14:07:36.92ID:wxELMJDc完全には合法ではない。
たとえば
const int a = 1;
は、aの領域がROMに割り当てられてそもそも書き換えられないケースとか、
許可されていない方法(例えばリードオンリーの位置へ書き込みをしようとする)
によるセグメンテーション違反でOSにプロセスごと終了させられるケースとか
いろいろ…
0070デフォルトの名無しさん
2015/12/06(日) 14:13:33.39ID:7Za5T0R3伝わってないみたいだからもっかい言うね。
何の前提も無ければ const ポインタor参照の指す先を書き換えてはいけない。
const_cast を通した書き換えをコンパイラが考慮しないといけないのは、書き換えが
可能となるような「前提」があるのか無いのか、プログラマがその前提を利用しているかどうかを
判別できないから。
const ポインタor参照で引数を受け取る関数について、それらを通した書き込みを
使う側が想定しなければならない、などということはない。
0071デフォルトの名無しさん
2015/12/06(日) 14:17:42.59ID:5cQQ9Lrm上8行削除了解。alias経由かどうかの問題じゃないからね。
>>45のコードの場合コンパイラもプログラマもalias経由のパスがないことは認識できる。
だけど、それにも関わらずbarがconst外しをやらかしていないと仮定することは出来ない。
0072デフォルトの名無しさん
2015/12/06(日) 14:35:11.29ID:5cQQ9Lrm???
その「前提」に関する記述なんて規格にはないよね?
そんな「前提」なんて規格を外れたプログラマ間の信頼関係でしかなくて、
規格的には
・barではconstポインタの先/const参照先がconstオブジェクトかそうじゃいないかを
知ってるかどうかに関わらずconst外しをして書き換えるコードを書くことは完全に合法。
・fooがbarに非constオブジェクトへのポインタ/参照を渡したなら、barで書き換えられる
可能性があることを想定しなければならない。
と解釈するべきだとやはり思うけど?
0073デフォルトの名無しさん
2015/12/06(日) 14:40:54.26ID:cfOzLQZMレス先をよく読もうな
0074デフォルトの名無しさん
2015/12/06(日) 14:52:20.91ID:cfOzLQZMmutableがある時点でそれは通じないだろうし
さらにmutableを持たないクラス型で扱う前提でも通じないと思うよ
なぜなら渡した先が基本クラスでもダウンキャストして変更する可能性があるから
やはり即値でなくポインタの時点で駄目だね
0075デフォルトの名無しさん
2015/12/06(日) 14:53:08.74ID:7Za5T0R3それがコンパイラの解釈の範囲。
でもプログラマは、たとえば bar() が foo() とは無関係の関数であり呼び出し元コードに
ついて何の想定も置けないことを知っていれば、 bar() 内で書き換えは行われないと想定できる。
さもないと、本当に const なオブジェクトを渡したときに未定義動作になるからね。
コンパイラは各関数を誰が書いてるか、どんな範囲で使えるものかなんて知らないなから、
そういった想定はできない。
0076デフォルトの名無しさん
2015/12/06(日) 14:56:53.23ID:7Za5T0R3ごめん。「それは通じない」の「それ」が何を指しているのかわからない。
最後の「駄目」も何を指していってるのかわからない。
0077デフォルトの名無しさん
2015/12/06(日) 14:58:26.28ID:cfOzLQZMコンパイラが変更しない前提で最適化ができない
0078デフォルトの名無しさん
2015/12/06(日) 15:05:40.01ID:cfOzLQZM言ってることはたぶん同じ
0079デフォルトの名無しさん
2015/12/06(日) 15:05:52.33ID:7Za5T0R3コンパイラが >>45 のケースで2回目のメモリからのロードを最適化で消せないのはわかってる。
>70 はプログラマが同じように値の変更を想定すべきかどうかという話で、元は >>63 が
プログラマも同じ想定をするべきだ(想定しないでいいためにはドキュメントが要る)と言っていたところ、
それは現実とは違うというのを説明しているところ。
0080デフォルトの名無しさん
2015/12/06(日) 15:11:17.22ID:wxELMJDc>(コンパイラは)それにも関わらずbarがconst外しをやらかしていないと仮定することは出来ない。
知らん。「barがconst外しをやらかしていないと仮定出来る」という結論が仕様書の記述から演繹できないから仮定しないだけでは…
ていうかDI:5cQQ9Lmの当初の主張は「constを利用した最適化の可能性がある」だったはずで、
むしろ「barがconst外しをやらかしていないと仮定出来る」例を示してホスイ☆
まあ>>45に>>53のレスがついて決着したのか知らんが
>>73
非constオブジェクトの書き換えの話だったか
スマンorz
0081デフォルトの名無しさん
2015/12/06(日) 15:16:46.77ID:5cQQ9Lrm当初の主張が誤りだったことは認める
今や「コンパイラもプログラマもbarがconst外しをしていないと仮定しちゃいけない」
という逆の立場になっちゃったということ(笑)
0082デフォルトの名無しさん
2015/12/06(日) 15:20:41.98ID:wxELMJDc>alias経由かどうかの問題じゃないからね。
については当然で、>>45のコードはconst付きオブジェクトaの書き換わりの話である。
一方、漏れが「aliasガー」と言っている>>16の引用部分は
const付きポインタ(A pointer or reference to a cv-qualified type)で指し示されたオブジェクトの話で別の話。こっちはaliasで書き換えられる可能性がある
0083デフォルトの名無しさん
2015/12/06(日) 17:28:22.80ID:9WYMwqzW下記コードのように特殊化で対応するしかないですか?
http://codepad.org/xeLeQs5C
Lプレフィクスの差だけなので1つにまとめられたらすっきりするのですが
そんな方法はあるでしょうか?
0084デフォルトの名無しさん
2015/12/06(日) 17:53:40.27ID:9WYMwqzWデフォルト引数をstatic関数で受け取ることで対応できました。
0085デフォルトの名無しさん
2015/12/06(日) 22:55:27.35ID:EHj7xnMfつけるか省略するかどっちがデフォ?
0086デフォルトの名無しさん
2015/12/06(日) 23:51:20.12ID:NAZd77H+0087デフォルトの名無しさん
2015/12/07(月) 02:53:58.87ID:sISKuid0元のソースが微妙に古いせいか、namespaceで括ってるなあ。
治すのも面倒だし放置でいいか。
0088デフォルトの名無しさん
2015/12/07(月) 11:04:26.12ID:X3GD6DTG0089デフォルトの名無しさん
2015/12/07(月) 13:47:04.60ID:xKQ551nc真の漢なら #define を使え って話だろう
0090デフォルトの名無しさん
2015/12/07(月) 22:11:19.85ID:ftUTS3gXそのテンプレートがコード中何で具体化されてるか
列挙させる方法ってなんかありますか?
0091デフォルトの名無しさん
2015/12/07(月) 22:27:59.28ID:ybmjRjHL0092デフォルトの名無しさん
2015/12/07(月) 23:52:55.57ID:d5Z60dVM0093デフォルトの名無しさん
2015/12/07(月) 23:54:20.87ID:snVCh2rq__declspec( naked ) void WINAPI func()
{
_asm{ jmp pfn }
}
と同じようなことをx64でやるにはどうしたらいいでしょうか?
0094デフォルトの名無しさん
2015/12/08(火) 02:41:35.05ID:QEVUqltL例えば、同じデータに同時アクセスしたら内部でどんなことが起きるのですか?
0095デフォルトの名無しさん
2015/12/08(火) 03:00:47.56ID:R0PV8G/tアクセスにも2種類あります。
言うまでもないですが、readとwriteです。
同時に同じ領域にreadアクセスしても何も起こりません。
write中にreadを行うと書き込み途中の意味のないデータが読み取れることがあります。
write中にwriteされると競合して意味のないデータになったものが書き込まれて残る事があります。
それらがポインタなどだった場合は不正なポインタになり簡単にアプリケーションはクラッシュします。配列の要素数だった場合はバッファーオーバーフローになります。
厳密には同じアドレスへアクセスしている必要はなく、関係するデータを読み書きしているとその関係性が崩れ不正な状態になる可能性があるので注意しましょう。
ちなみに規格上は未定義動作です。不正な動作となった後何が起こるか解らないためです。
0096デフォルトの名無しさん
2015/12/08(火) 08:41:48.16ID:5WeN1P+Zmjd?!
そこだけ疑問があるので規格の該当箇所を教えてほしい
同一アドレスへの複数スレッドからのアクセスについては、規格で全く触れられていないだけでは?
コンパイラがコードを吐く際に、変数が他のスレッドから書き換えられる可能性など考慮しだしたら最適化が全く成立しないから、
同一アドレスへの複数スレッドのアクセスが未定義動作ということと、
コンパイラが妥当な最適化を行えているということは矛盾する
0097デフォルトの名無しさん
2015/12/08(火) 08:51:19.30ID:5WeN1P+Zint a = 10;
++a;
というコードが、aが他のスレッドから書き換えられる可能性があるからどんなコードが吐かれるかわからない、とか言われたら困るし有り得ない
ところが未定義動作というのはコンパイラが最強度maxで責任放棄するという意味なので、ガチで未定義動作ならそれが起こり得ることになってしまう。
0098デフォルトの名無しさん
2015/12/08(火) 12:00:05.32ID:YrvC8Vc0atomicでないオブジェクトへのアクセスは自己責任で排他制御が必要というだけ
0099デフォルトの名無しさん
2015/12/08(火) 12:03:39.88ID:xTQHW/dyC++14 1.10 [intro.multithread] p23
> The execution of a program contains a data race if it contains ... .
> Any such data race results in undefined behavior.
データ競合がある場合の動作が未定義だからこそ、単一スレッド内では
他スレッドからのアクセスを無視した最適化ができるし、そうして最適化した
コードでも実際にデータ競合を起こすようなアクセスさえ無ければ何も壊れない。
0100デフォルトの名無しさん
2015/12/08(火) 15:16:21.20ID:QEVUqltL詳しくわかりやすい説明、ありがとうございます。
おかげで無事プログラムが動きました。
0101デフォルトの名無しさん
2015/12/08(火) 15:22:24.80ID:y1mdlUK+>> 96
> コンパイラがコードを吐く際に、変数が他のスレッドから書き換えられる可能性など考慮しだしたら最適化が全く成立しない
これは正しい
> 同一アドレスへの複数スレッドのアクセスが未定義動作ということ
これも >>99 が示してくれたように正しい
> コンパイラが妥当な最適化を行えているということは矛盾する
これは正しくない
「同一アドレスへの複数スレッドのアクセスが未定義動作」だからこそ、
コンパイラはそれを無視して最適化してよいことになる
その結果として競合による未定義動作が起こり得るけど、それは仕様通りですよ、ということ
……という理解であってるよね?
0102デフォルトの名無しさん
2015/12/08(火) 15:56:10.25ID:zjJIjn6Vだからといって
コンパイラは無視して最適化したりしないけどね
むしろ別スレッドから値を変更される可能性を考えて
毎回メモリからレジスタにロードしなおすコードを吐くと思うがね
確実に自分のスレッドからしかアクセスしてない自動変数
つまり、自動変数のアドレスを逆参照して別の関数に渡していたりとかしていない
自動変数に関しては、変更がなければレジスタに置きっぱとかといった最適化がかかるが
オブジェクトのメンバとかグローバル変数とかはアクセスするたびに
毎回メモリからロードすると思うし
だからこそ int i = obj.member; とかやって一旦自動変数に入れることで
コンパイラの最適化を促すテクニックが広く知られているわけだが
0103ネトuy ◆Qawu9.2l1E
2015/12/08(火) 16:09:43.28ID:8RNVa/m00104デフォルトの名無しさん
2015/12/08(火) 16:38:20.29ID:mthiYc/w>毎回メモリからレジスタにロードしなおすコードを吐くと思うがね
そんなことないその為にvolatileがある
グローバル変数のアクセスで間に関数呼び出し挟んだ場合は別だけどそれはスレッドを考慮してのことじゃない
0105デフォルトの名無しさん
2015/12/08(火) 16:54:20.27ID:zjJIjn6Vいくら排他処理が完璧でも
前にレジスタにロードした古い値を使いまわして
新しい値が反映されなかったとしたらバグるだろう
ある値はたまたまレジスタに残ったままになっていたから古い値のまま、そのまま使って
別の値はたまたまレジスタに残っていなかったから新しい値をロードしなおして
ちぐはぐのままプログラムが走ったらクラッシュするだろ
だからクラスのメンバやグローバル変数はvolatileじゃなくても毎回ロードするのが普通
さもなくば、関数でローカルな変数以外の全ての変数をvolatileにしないとダメになるけど
そんなことしなくても大丈夫なようになっている
0106デフォルトの名無しさん
2015/12/08(火) 16:58:26.76ID:zjJIjn6Vメンバ変数を自動変数に代入して使うというのは有名なテクニック
0107デフォルトの名無しさん
2015/12/08(火) 17:11:13.68ID:mthiYc/wいやなってないから
なってると思うんなら試してみればよいだろう
GCC(4.8.4 -O3)で
volatile int flag;
int main()
{
flag = 1;
while(flag) {}
}
でやると
movl $1, flag(%rip)
.L2:
jmp .L2
になるから
flagにvolatile付けると毎回メモリから読み込むようになる
0108デフォルトの名無しさん
2015/12/08(火) 17:20:23.95ID:mthiYc/w書いた「間に関数呼び出し挟んだ」状態になるんだよ
スピンロックを自前で実装するような場合は気をつけなければいけない
0109デフォルトの名無しさん
2015/12/08(火) 21:49:05.55ID:uAong+Yo「お前がそう思うんならそうなんだろう、お前ん中ではな」
という言葉を贈ろう
0110デフォルトの名無しさん
2015/12/08(火) 22:24:04.77ID:RVFMry3Lネットで知識得ただけでプログラミングした気になってるという人だろうね
011196
2015/12/09(水) 00:47:07.72ID:fMIxS4Tn未定義動作、と断言されてしまうとCPUアーキテクチャ上atomicなはずのアクセス(整数1語の読み書き)を用いた設計がNGになるのかと恐怖のあまり失禁したわ;
改めて「未定義動作」の語義をググッて知ったが、処理系の仕様で未定義動作でも、外部文書の仕様にしたがって動くとみなせる余地があるみたいね(ならば多分設計が成立する)
>>99
>Such data
は直前の
>at least one of which is not atomic,((2 actorsのうち、少なくとも片方が非atomic)
にかかってゐるからYAT安心
0112デフォルトの名無しさん
2015/12/09(水) 09:17:56.67ID:tMTjYd9b0113デフォルトの名無しさん
2015/12/09(水) 09:44:19.19ID:T/q5j9E8これを付けたほうがより最適なコードになると聞きました。
具体的にどういう最適化がされるんでしょうか?
効果が薄いなら付けないままでいたいんですが
0114デフォルトの名無しさん
2015/12/09(水) 10:47:11.93ID:+oP8EwDY間接ジャンプしなくなる程度じゃなかったかな
0115デフォルトの名無しさん
2015/12/09(水) 16:56:24.48ID:T/q5j9E8なるほど
ありがとうございます
0116デフォルトの名無しさん
2015/12/09(水) 18:34:03.46ID:SsSL4Bxg自己顕示欲を満たしたいだけだからその程度のいい加減な知識と経験でしか回答できない。
いい加減な知識しかないから、
医療や航空関係のシステムみたいにバグが致命的な惨事を発生させる仕事は受けられない。
その程度の知識しかないのに自己顕示欲を満たすために嬉々として回答するゴミクズ。
完全に正しい知識と十分な経験があるなら医療関係だろうが航空関係だろうが
仕事は受けられるはず。
それもできないのに回答者気取りで笑える。
0117デフォルトの名無しさん
2015/12/09(水) 18:52:26.18ID:LDuXAdot0118デフォルトの名無しさん
2015/12/09(水) 19:32:38.42ID:BsTHiUaA0119デフォルトの名無しさん
2015/12/09(水) 20:50:32.22ID:VQsJCUvOまぁ、日本のプログラマは技術者でなくゴミ扱いのドカタで
低脳、変人、基地外でも普通につける職業だからな
そんな奴らが集う板は当然ゴミ回答者が多いだろ
0120デフォルトの名無しさん
2015/12/09(水) 21:18:54.38ID:ulePTNdzその結果、不景気になった瞬間とりあえず片っ端から切り捨てていくから無能も優秀も纏めて消えていく
元請の連中は基本下流工程なんてやらないし
0121デフォルトの名無しさん
2015/12/09(水) 22:46:00.66ID:46Zoq0Zeプログラムでも「スーパーバイザ」や「カーネル」は現業だろ
プログラマのくせにそこがわからないスーパーバカヤロウが何でこんなに多いんだ
0122デフォルトの名無しさん
2015/12/09(水) 22:53:57.25ID:pqe3smnr0123デフォルトの名無しさん
2015/12/09(水) 22:58:54.99ID:2j8cA7Bmプログラマーになるしかないのです
0124デフォルトの名無しさん
2015/12/09(水) 23:09:38.42ID:pqe3smnr下賤だから下流 しかできないけどにそれに気付いてしまった低能は?
0125デフォルトの名無しさん
2015/12/09(水) 23:15:43.36ID:sKCiRVbxマ板に行ってやれよ低能以下のゴミクズども
0126デフォルトの名無しさん
2015/12/09(水) 23:42:23.84ID:pqe3smnrもう少し気の利いたこと言えや
0127デフォルトの名無しさん
2015/12/10(木) 01:15:46.31ID:Qmth+aWu0128デフォルトの名無しさん
2015/12/10(木) 01:48:45.47ID:fBG2kDjgこの単なる言いがかりはまさに自己愛憤怒だな
哀れ
0129デフォルトの名無しさん
2015/12/10(木) 12:44:12.91ID:UzLxbQWyarray<int,3> hoge{1,2,3};
とするとコンパイルエラーになり、
array<int,3> hoge{{1,2,3}};
とする必要がありました。
一方、関数内では前者でOKでした。
このへんはどういう理屈なんでしょうか?
0130デフォルトの名無しさん
2015/12/10(木) 15:05:54.32ID:KM/AJKaahttp://stackoverflow.com/questions/8192185/using-stdarray-with-initialization-lists
gccのバグっぽい
ちなみにgcc5.2.0では
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> hoge{1,2,3};
for (auto& i : hoge)
std::cout << i << ' ';
std::cout << std::endl;
}
1 2 3
問題なし
0131デフォルトの名無しさん
2015/12/10(木) 15:11:57.57ID:nOtJtIl60132デフォルトの名無しさん
2015/12/10(木) 15:17:51.03ID:pF3lLbMS#include <array>
class C {
//std::array<int, 3> a {{1, 2, 3}};
std::array<int, 3> a {1, 2, 3};
};
windows系のコンパイラでもこうなるらしい
0133デフォルトの名無しさん
2015/12/10(木) 15:19:51.67ID:6pjkL8uNhogeを使ってる書籍やサイトまともなもの何て1つもないが、
それに気付かず、hogeを使っても違和感を感じないほどそういうゴミサイトで学習もどきを続けた結果、
>>129みたいなヴァカでも分かる質問をする羽目になる
>>129みたいなヴァカ未満は単純な肉体労働以外をすると迷惑にしかならない
0134デフォルトの名無しさん
2015/12/10(木) 15:49:27.62ID:3X9TgW+S0135デフォルトの名無しさん
2015/12/10(木) 15:55:05.98ID:m24vGLCh0136デフォルトの名無しさん
2015/12/10(木) 16:12:46.86ID:nOtJtIl60137デフォルトの名無しさん
2015/12/10(木) 16:16:58.27ID:Euz5RcGj意味が通じなくて間違っているのしかない
馬鹿な奴ほど情報を発進したがるからこうなるんだろうな
教えることが下手な奴は奴は頭が馬鹿な証拠だからな
0138デフォルトの名無しさん
2015/12/10(木) 16:48:22.09ID:d/tjCHBQありがとうございます。なんとバグでしたか。
http://melpon.org/wandbox/
で試したところ、gcc 6から直ってました。
WindowsではVisualStudio 2013 CTPで試したところ駄目でした。
0139デフォルトの名無しさん
2015/12/10(木) 17:05:44.05ID:a/h4lSZi>HEAP CORRUPTION DETECTED: after Normal block () at .
>CRT detected that the application wrote to memory after end of heap buffer.
といったエラーを
catchする場合には、何で受ければよいでしょう?
(...)以外で。
0140デフォルトの名無しさん
2015/12/10(木) 17:22:32.33ID:EQVJS9H4#include <iostream>
#include <array>
class C {
std::array<int, 3> a {{1, 2, 3}};
std::array<int, 3> b { 4, 5, 6 };
public:
void print() const {
for (auto& i : a)
std::cout << i << ' ';
std::cout << std::endl;
for (auto& i : b)
std::cout << i << ' ';
std::cout << std::endl;
}
};
int main()
{
C c;
c.print();
}
1 2 3
4 5 6
0141デフォルトの名無しさん
2015/12/10(木) 17:46:35.22ID:4Fg8f9T5Debug リリースかな? メッセージをよく読もう
catch しちゃ(できちゃ)だめだよ
0142デフォルトの名無しさん
2015/12/10(木) 22:22:03.18ID:OHAY+OM1せっかくバッファオーバーランを教えてくれてるのだから
0143デフォルトの名無しさん
2015/12/10(木) 23:57:14.33ID:nOtJtIl6おまえがヒープぶっこわしているプログラムの修正が先だ!
0144デフォルトの名無しさん
2015/12/11(金) 00:02:17.38ID:AA1k5ebD握りつぶそうとする奴
0145デフォルトの名無しさん
2015/12/11(金) 01:43:35.08ID:pvLLFs2Tやはり専門性の高いC++を選んでおけばよかったと悔やんでいるアホボケです。
STL以外は、市販の参考書でマスタしました。しかし、C++の現場は未体験です。
希望を与えて頂けるようなアドバイスお願いします。年齢30歳、男です。
よろしくお願いいたします。
0146デフォルトの名無しさん
2015/12/11(金) 01:55:35.33ID:L6hqxofPC++はピンきりだろうが仕事自体が比較すれば少ない。
0147デフォルトの名無しさん
2015/12/11(金) 02:00:37.45ID:U8sC3+JU0148デフォルトの名無しさん
2015/12/11(金) 02:02:43.02ID:8lMxgOYYgccもう6が出てんのか・・・
バージョニング方法も変わったんだっけか
0149デフォルトの名無しさん
2015/12/11(金) 02:10:15.76ID:AA1k5ebD仕事が多いというのはその通りだろうが単価はどうかな
Java屋なんて掃いて捨てるくらいいるんだし
0150デフォルトの名無しさん
2015/12/11(金) 02:19:14.55ID:L6hqxofP求人年俸額平均:356万6,330円
掲載件数:1,552件
第8位 Java
求人年俸額平均:364万3,998円
掲載件数:3,623件
第1位 Scala
求人年俸額平均:401万5,909円
掲載件数:110件
プログラミング言語別給与ランキング【2015年版】?1位はScalaの401万5,909円?
http://hrog.net/wp-content/uploads/2015/10/20151026_matome12.png
http://hrog.net/2015102624991.html
0151デフォルトの名無しさん
2015/12/11(金) 02:20:45.27ID:AA1k5ebDそれじゃ「単価」は分からないから
0152デフォルトの名無しさん
2015/12/11(金) 02:26:32.41ID:AA1k5ebD0153デフォルトの名無しさん
2015/12/11(金) 03:15:05.57ID:m2z0YWefシステムと言えば、Javaだろう
C++の仕事は、ゲーム・カーナビぐらいしか思いつかない。
ゲーム会社のサラリーマンなら、年収400万円以下からスタート
0154デフォルトの名無しさん
2015/12/11(金) 03:53:15.62ID:JJUpFoTK好きなゲーム作ったりゲームで儲けたりしたいんだったら、プログラマではなくプロデューサーや企画を目指すのが妥当。
極端な話、プログラマーとして入社したら、バイオハザードみたいなゲームを作りたくてもアイドルマスターみたいなゲームを作らされるかもしれないんだぜw
0155デフォルトの名無しさん
2015/12/11(金) 04:11:51.64ID:8lMxgOYY0156デフォルトの名無しさん
2015/12/11(金) 05:03:23.12ID:m81hILnz本当に本気の野郎はアイマスでFPS作ろうとするだろうよ
ゲームなんて見栄張るために作るわけじゃなし
そんな程度でやる気なくなる奴は企画だろうと何だろうと大したゲーム作れないだろ
0157デフォルトの名無しさん
2015/12/11(金) 09:12:12.85ID:qHZwrA+M0158デフォルトの名無しさん
2015/12/11(金) 09:42:37.74ID:TzzA7+6M金融業界はC++が多い
0159デフォルトの名無しさん
2015/12/11(金) 10:35:37.43ID:MQP/fuYvうちの会社に来るかね。
組み込みから通信、データ解析、画像処理から数値演算までc++を使い倒せるぞ。
0160デフォルトの名無しさん
2015/12/11(金) 10:39:58.53ID:5V6d7Gh5C++の現場に入ったことないから知らないけど、STLは使えませんなんて言ったらえっ?ってなると思うよ
その現場でSTLを使うかどうかは別として、STLはC++の基礎の次段階みたいなものだから
Javaで言うならjava.util配下のクラスを使えませんってレベルに近い
0161デフォルトの名無しさん
2015/12/11(金) 12:14:14.29ID:xR91L80yてかCしか駄目か
0162デフォルトの名無しさん
2015/12/11(金) 12:50:19.54ID:AA1k5ebDいまどきC++使えないボロ環境なんて投げ捨てろ
0163デフォルトの名無しさん
2015/12/11(金) 20:11:44.39ID:IHx8frNM組み込み系マイコンで一番使われているらしからな
x86やARM-AのPC系しかやれないって奴は趣味プのC++erぐらいだろ
0164デフォルトの名無しさん
2015/12/11(金) 20:20:03.83ID:cNzjvsZV0165デフォルトの名無しさん
2015/12/11(金) 20:52:57.54ID:csVVyN8S0166デフォルトの名無しさん
2015/12/11(金) 22:10:14.31ID:MeHC1kIB今使ってる奴は相当痛い
0167デフォルトの名無しさん
2015/12/11(金) 22:19:22.90ID:oVKJU75A0168デフォルトの名無しさん
2015/12/11(金) 22:20:40.65ID:0YKyOHUo…という図が見えた
0169デフォルトの名無しさん
2015/12/11(金) 22:21:37.91ID:oVKJU75A0170デフォルトの名無しさん
2015/12/11(金) 22:25:22.40ID:TzzA7+6M0171デフォルトの名無しさん
2015/12/11(金) 22:30:39.09ID:RiRLaM12{
void hage( int val ){ printf( "%d\n", val ); }
void hige(){ printf( "hige\n" ); }
};
hoge h;
const std::array< int, 3 > a = { 0, 1, 2 };
std::for_each( a.begin(), a.end(), std::bind1st( std::mem_fun( &hoge::hage ), &h ) );
std::for_each( a.begin(), a.end(), std::bind( std::mem_fun( &hoge::hige ), &h ) );
higeをfor_eachから
std::bindを使わず、新しいクラスや関数も作らずに呼び出す方法教えて下さい
0172デフォルトの名無しさん
2015/12/11(金) 22:50:20.83ID:f+RTKPNq0173デフォルトの名無しさん
2015/12/11(金) 22:59:02.09ID:MQP/fuYv0174デフォルトの名無しさん
2015/12/11(金) 23:06:29.52ID:EyOXjWDr0175デフォルトの名無しさん
2015/12/11(金) 23:32:50.26ID:Y4hLkiiGstatic関数にするとか?
0176デフォルトの名無しさん
2015/12/12(土) 00:21:32.57ID:1fjgFEygstd::for_each(a.begin(), a.end(), [&](auto){h.hige();});
0177片山博文MZ ◆T6xkBnTXz7B0
2015/12/12(土) 00:31:22.39ID:+qUXbAH40178デフォルトの名無しさん
2015/12/12(土) 11:11:36.89ID:pLAOCluVもうお前は来るな
死ね
0179デフォルトの名無しさん
2015/12/13(日) 00:49:44.71ID:EpxG0SJy0180デフォルトの名無しさん
2015/12/13(日) 07:44:54.87ID:qVjiFOWY>>171みたいなクズがプログラミングをするのは勝手だが、
社会と接点を持とうとするなって話。
>>171みたいな奴は生きてるだけで普通に迷惑だし。
0181デフォルトの名無しさん
2015/12/13(日) 09:31:41.61ID:sUZJtfXg0182デフォルトの名無しさん
2015/12/13(日) 12:51:45.64ID:LQ/bBTKC0183デフォルトの名無しさん
2015/12/13(日) 13:05:35.48ID:kyMbAjxG0184デフォルトの名無しさん
2015/12/13(日) 15:36:52.76ID:oa4m3JE80185デフォルトの名無しさん
2015/12/13(日) 16:32:19.91ID:J2FjjwDn0186デフォルトの名無しさん
2015/12/13(日) 22:15:59.69ID:Ajlnr8Ac>>171みたいなことを必死に悩むってのがC++使いだからな
0187デフォルトの名無しさん
2015/12/13(日) 22:17:41.13ID:3ApC0baZ勝手にレッテル貼りすんなボケ
0188デフォルトの名無しさん
2015/12/13(日) 22:39:22.10ID:kyMbAjxGえー、じゃあ本人にhageなのか聞いてきてよ
0189デフォルトの名無しさん
2015/12/14(月) 00:59:53.36ID:hJrc+Vr10190名無しさん@そうだ選挙に行こう
2015/12/14(月) 09:40:35.94ID:ysJkAuL/何に使うんだろう
0191名無しさん@そうだ選挙に行こう
2015/12/14(月) 09:49:21.71ID:2+GDL4RDまずアロケーションとポインタの関係を学習してから出直して来なさい
0192デフォルトの名無しさん
2015/12/14(月) 20:58:31.62ID:lP34oC27違いすぎてまとめても意味がないって感じになる
絶対に知っていないといけない違いは
C++11の方がC#よりはるかに優れていて、C++11からすればC#はゴミである
と言う事
0193デフォルトの名無しさん
2015/12/14(月) 21:15:08.76ID:agmKIOc6よくわかりました。ありがとうございました。
0194デフォルトの名無しさん
2015/12/14(月) 22:11:02.80ID:VJuIJuYL0195デフォルトの名無しさん
2015/12/14(月) 23:29:58.39ID:A7WhCv850196デフォルトの名無しさん
2015/12/14(月) 23:51:08.63ID:1ewiA+as0197デフォルトの名無しさん
2015/12/15(火) 00:32:57.87ID:mMnPxVzA0198デフォルトの名無しさん
2015/12/15(火) 00:55:06.49ID:fkyvVvJ70199デフォルトの名無しさん
2015/12/15(火) 05:35:36.95ID:Y1MKLxaw超えてるか…? C++/CLI、凄まじく変態だぞ
0200デフォルトの名無しさん
2015/12/15(火) 07:12:31.41ID:UMwjRqtT0201デフォルトの名無しさん
2015/12/15(火) 07:25:26.27ID:mMnPxVzAそうか?.NETのために構文が拡張されただけで、わかってしまえばさほど変態的とも思わんがなぁ。
しいて挙げればデストラクタとファイナライザの両方あることくらい?
0202デフォルトの名無しさん
2015/12/15(火) 07:59:50.09ID:yYTlvJtS0203デフォルトの名無しさん
2015/12/15(火) 08:36:50.22ID:mMnPxVzA単に見慣れない構文に拒否反応示してるだけなんじゃないかなぁとも思う。
0204デフォルトの名無しさん
2015/12/15(火) 10:08:08.02ID:9AhINhvXマネージドとアンマネージド記述が普通に混在してて
テンプレート据え置きとか変態もいいとこだろ
Perlかよ
0205デフォルトの名無しさん
2015/12/15(火) 10:24:44.73ID:/AIAHmRlさすがにそれは違うだろ。
テンプレートを使ったメタプログラミングはとても素直なものだ。
0206デフォルトの名無しさん
2015/12/15(火) 11:53:26.32ID:Z+PgRVVdテンプレートがあるからキャスト無しでコンテナが使えるから
初心者に優しいと思う
C++11で変態度が増したというけど
真の変態は誰がなんと言おうとBoostだったわけで
それが正式な構文となって整理されてマージされたから良かったのでは
古いC++でBoost使ってラムダ書いたりするよりは
C++11でラムダを書くほうが変態度は下がっているだろう
0207デフォルトの名無しさん
2015/12/15(火) 12:31:30.84ID:/AIAHmRlこの流れでまあまあ上手くいっているんだから変態どころか健全。
0208デフォルトの名無しさん
2015/12/15(火) 18:51:07.23ID:pHTm9DD3誰がどう見ても変態です。
0209デフォルトの名無しさん
2015/12/15(火) 19:16:12.88ID:Y0e3COsy0210デフォルトの名無しさん
2015/12/15(火) 20:41:11.24ID:HmW4QUJ70211デフォルトの名無しさん
2015/12/15(火) 21:15:48.26ID:TS4gXElv0212デフォルトの名無しさん
2015/12/15(火) 21:23:46.61ID:mMnPxVzAもともとそれが目的の言語だし、構文的にも明確に区別されているから見馴れりゃ気にならんがなぁ。
0213デフォルトの名無しさん
2015/12/15(火) 21:50:21.71ID:9AhINhvXそら慣れりゃマシン語だろうと読めるようになるわ
使用者が自分から変態にしてるだけならともかく
C#とC++の使い分けのが利点が大きいのに
標準で変態構文な時点で純然たる変態言語だよ
0214デフォルトの名無しさん
2015/12/15(火) 21:51:56.16ID:9AhINhvX0215デフォルトの名無しさん
2015/12/15(火) 22:23:22.06ID:46Jh9WrXLokiはオナニーマスターだったな
0216デフォルトの名無しさん
2015/12/15(火) 22:35:57.17ID:rigwBpve0217デフォルトの名無しさん
2015/12/15(火) 23:54:02.66ID:tA3N3CYu今の若いのには技術者の意地や誇りは無いのか
0218デフォルトの名無しさん
2015/12/16(水) 00:11:14.79ID:Caemc4xo0219デフォルトの名無しさん
2015/12/16(水) 00:15:59.64ID:8y0O97u30220デフォルトの名無しさん
2015/12/16(水) 00:24:32.57ID:+q6Iq1Y4まぁ適当にやればいい
0221デフォルトの名無しさん
2015/12/16(水) 00:56:48.42ID:BYsNFA/10222デフォルトの名無しさん
2015/12/16(水) 01:27:12.21ID:JW5d9jFIしかもそっち系人たちはここのような黒魔術に興味がないというか、わからないから未だにcを使っている。
0223デフォルトの名無しさん
2015/12/16(水) 02:56:46.03ID:dUx1TxyFスパコンとかで簡単に並列計算できるC++用のライブラリも最近できたのに
0224デフォルトの名無しさん
2015/12/16(水) 03:04:07.94ID:ZdV6GcgI国益レベルで損してるとは思う
理系は初学年あたりでC++メタプログラミングを必修にしときゃいいんだよ
0225デフォルトの名無しさん
2015/12/16(水) 07:02:45.95ID:17fDmmVI0226デフォルトの名無しさん
2015/12/16(水) 08:31:33.16ID:7uqbUkJHC++を一学期でマスター出来る授業があったら受けたいもんだ
0227デフォルトの名無しさん
2015/12/16(水) 14:05:15.35ID:+q6Iq1Y40228デフォルトの名無しさん
2015/12/16(水) 18:26:31.22ID:tLeJyzve全員C++とかそれこそ国益を損なうレベル。
0229デフォルトの名無しさん
2015/12/16(水) 19:49:22.68ID:C0jgAL5Sそれはわりと本当にそうだな
0230デフォルトの名無しさん
2015/12/16(水) 20:05:14.98ID:++aKhWi5あと多値を返せるようにしてくれたら文句はない
テンプレートも充実した標準ライブラリもいらない
クラスも継承も必要ない
そういうのが必要なときはそもそも他の言語を使うから
他に選択肢がないからしょうがなく C++ を使ってる
0231デフォルトの名無しさん
2015/12/16(水) 20:07:06.80ID:WoVXrJy8バカでも習得できる言語じゃないと普及せん罠
0232デフォルトの名無しさん
2015/12/17(木) 09:49:20.48ID:Gw5Yeqz+0233デフォルトの名無しさん
2015/12/17(木) 13:11:45.92ID:vL92c8xT0234デフォルトの名無しさん
2015/12/17(木) 13:50:12.02ID:NVRUH+ixそうでない型は==による比較を実施するテンプレート関数を作りたい。
ただしdoubleと、floatを個別にspecializeはしたくない。
どうやったらよろしいんでっしやろ。
0235デフォルトの名無しさん
2015/12/17(木) 14:12:31.69ID:znU3Wxr/絶対特殊化は必要
0236デフォルトの名無しさん
2015/12/17(木) 14:22:40.66ID:NVRUH+ixやっぱな。
テンプレート展開時に関数定義の存在の有無で条件コンパイルするような
マクロ擬きがあればいいのに。
現状だとメタプログラミングの価値が若干下がる。
0237デフォルトの名無しさん
2015/12/17(木) 15:00:42.47ID:jqLfagmIhttp://en.cppreference.com/w/cpp/types/numeric_limits/epsilon
0238デフォルトの名無しさん
2015/12/17(木) 15:04:00.38ID:Gw5Yeqz+0239デフォルトの名無しさん
2015/12/17(木) 16:26:40.62ID:vZf67IZkいっぺんに特殊化すればいいだろ低能
0240デフォルトの名無しさん
2015/12/17(木) 19:40:40.81ID:NNr9kjiP0241デフォルトの名無しさん
2015/12/17(木) 21:06:23.95ID:Gw5Yeqz+0242デフォルトの名無しさん
2015/12/17(木) 21:10:35.06ID:deRekt1t必要に迫られて使っているんじゃないんだよ。自分の手で最高の物を作りたいと彼らは言ってたんだ。
0243デフォルトの名無しさん
2015/12/17(木) 22:23:41.61ID:RC4cKcKzその昔、バカでも習得できる言語が一時期流行ったかに見えて
そのあと超すげえコケかたしたよな
ほれ、FORTRANがプログラムを数式のように記述するのに対抗して
プログラムを英文のように記述するんだって頑張ったやつ
0244デフォルトの名無しさん
2015/12/17(木) 23:10:15.70ID:O/TlL5Ei言語としては面白かったが、確かにもう見ないな。
0245デフォルトの名無しさん
2015/12/17(木) 23:13:09.94ID:T7FXs2480246デフォルトの名無しさん
2015/12/17(木) 23:14:40.76ID:Gizf3wfMPL/�T ‐ 通信用語の基礎知識
1965(昭和40)年にIBMが発表した汎用プログラミング言語。
ALGOLを基礎とし、科学技術計算用FORTRANと事務処理用COBOLを1つにまとめ、オペレーティングシステム(OS)からコンパイラー、
果ては並列処理まで全てのプログラムを書けることを目的とした汎用の言語。
システムプログラムを記述できるようビット操作や割り込み機能を持ち、
必要事項を全て書かなくてもコンパイラーがある程度の内容を補う省略時解釈機能を持っているのが特徴。
しかし機能の多さから言語仕様が膨大で、しかも省略時解釈もあるためにコンパイル時間がFORTRANやCOBOLと比べて極端に遅く、
また生成されるオブジェクトの効率も悪いことが多い。
IBMではメインフレーム用の標準的言語として採用し、大手ユーザーに利用されていたが、FORTRANやCOBOLの機能拡張やCなどの新しいシステム記述言語の普及などにより、
PL/�Tの利用ユーザーは現在では非常に減っている。
http://www.wdic.org/w/TECH/PL/%E2%85%A0
0247デフォルトの名無しさん
2015/12/18(金) 00:09:15.60ID:VC/CNq1s悪貨は良貨を駆逐するってやつだ
0248デフォルトの名無しさん
2015/12/18(金) 00:16:43.00ID:LnB+58/eうん、かなり数少ないので気は楽だ。主観的なものだが。
0249デフォルトの名無しさん
2015/12/18(金) 02:15:38.71ID:skb65+d3今ではほぼ覚えてませんが、昔Cをやったことがあります。
スクリプトではPerlとRubyが今でも使えますが、ネイティブでよく普及していてなんでも幅広く便利そうなC++を使いたいです。
そこでマイクロソフトのVC++だかなんだかをインストールしましたが、
いきなり巨大なソフトが立ち上がって使いかたも分からんし、意味の分からんVC++専門用語(?)を当たり前のように連発してきて吐きそうです。
最初にいきなり意味の分からない設定みたいのを求められるし、どこになんの記述を書けばいいのかも分からないし、コンパイルの仕方も分かりません。
出てきた画面もいちいちごつくて、項目やタブやメニューや設定がたくさんあって叩き壊したくなります。
こんな私に、使いやすいフリーなお勧めのC++コンパイラを紹介してください。
環境はwindows7がメインです。
0250デフォルトの名無しさん
2015/12/18(金) 02:25:01.55ID:hJtnXN6rwindows なら素直に MinGW
コンパイラはインストール時に入る g++ でもいいし
TDM-gcc/g++ を入れてもいいし clang を入れてもいい
IDE/エディタはご自由に
0251デフォルトの名無しさん
2015/12/18(金) 02:32:24.17ID:mW73V6Fcコンパイラ単体でみれば、どれもコンパイルする手間に大差なし。対応してる規格には差はあるけど。
VC++だとcl.exe ○○とかいうコマンドのはず。
0252デフォルトの名無しさん
2015/12/18(金) 02:40:15.43ID:mW73V6Fc[サクラエディタ]マクロを利用したC言語のコンパイル
わんちゅうさんの、わんちゅう日記とEmEditor (テキストエディタ) - FAQの参考に
サクラエディタからコマンドプロンプトを起動して、
C言語/C++のコンパイルを行うVBScriptのマクロを書きました。
http://ameblo.jp/middleisland88/entry-11611804913.html
EmEditor FAQ: 外部ツールの定義例を教えてください。
Visual C++ でコンパイル
[コマンド] %WinDir%\system32\cmd.exe
[引数] /k "C:\Program Files\Visual Studio\Vc7\bin\vcvars32.bat"&&cl $(Path)
[初期ディレクトリ] $(Dir)
[アイコン パス] C:\Program Files\Visual Studio\Common7\IDE\devenv.exe
http://jp.emeditor.com/help/faq/tools/tools_external.htm
0253デフォルトの名無しさん
2015/12/18(金) 02:40:51.79ID:skb65+d3ありがとう
よく分からないけど、とりあえずmingw-get-setupとか言うのをダウンロードしたとこです。
あとは適当になんとかしてるうちになんとか出来る物であればなんとかします。
0254デフォルトの名無しさん
2015/12/18(金) 02:46:00.98ID:skb65+d3どうもありがとう。
そうゆうのいいね。
秀丸でもそうゆうの出来るかな。たぶん出来ると思うけど。
VC++がコマンドで動くんなら検索してみます
0255デフォルトの名無しさん
2015/12/18(金) 03:44:35.35ID:rBQUliqSgccとか言うのがインストールされてコマンドでtest.exe作れた
ありがとう
0256デフォルトの名無しさん
2015/12/18(金) 03:50:23.90ID:rBQUliqSgccじゃなくてg++でコマンド打てばC++なの?
いやまじ質問厨で本当にすみません
0257デフォルトの名無しさん
2015/12/18(金) 04:23:31.85ID:LcpSiDxD0258デフォルトの名無しさん
2015/12/18(金) 04:37:59.68ID:rBQUliqS本当にありがとう。
0259デフォルトの名無しさん
2015/12/18(金) 07:52:28.50ID:Pn8g8BvNこれは本当にそう思う
国家的な損失にまで発展してる
0260デフォルトの名無しさん
2015/12/18(金) 08:21:58.74ID:i13cEfwD0261デフォルトの名無しさん
2015/12/18(金) 08:42:31.44ID:OysfGD3G申し訳ない
0262デフォルトの名無しさん
2015/12/18(金) 08:48:41.06ID:GSLUIhyT0263デフォルトの名無しさん
2015/12/18(金) 09:51:47.59ID:Aqcnirszこのツール使ってるだけで、「俺、C++使えてる!」だもんな
0264デフォルトの名無しさん
2015/12/18(金) 09:55:03.23ID:EXrM1djRH○Pとかな
無血テロの一種だよ
反日活動に他ならないしH○P作ってる奴ってチョンじゃないのか
0265デフォルトの名無しさん
2015/12/18(金) 10:33:17.13ID:i13cEfwD>VirtualC++
なんだねそれは?
>>264
そういう戦略的な反日活動をや(れ)るのは別な国だろう。いやマジで。
0266デフォルトの名無しさん
2015/12/18(金) 15:35:30.74ID:TybGXFad基本的に同じものを何度も書かずにバグの温床を減らすことも
メタプログラミングの目的なわけだが、どあほ。
バグ修正時にdouble版でテスト、float版への反映漏れとかありうるわけだが。
0267デフォルトの名無しさん
2015/12/18(金) 16:30:23.42ID:hJtnXN6rfloat と double 両方のケースがあって、
テストで double 版しかチェックしてなかったってこと?
0268デフォルトの名無しさん
2015/12/18(金) 16:34:04.17ID:i13cEfwDepsilonが存在しない型ってあるの?それとも「エラーになる型」の意味かね?
0269デフォルトの名無しさん
2015/12/18(金) 16:40:18.63ID:njnmfUV6is_floating_pointでenable_ifして浮動小数点版とその他版作れば出来るからそれでやれ
numeric_limits::epsilonが存在するかどうかじゃ判断できないよ
0270デフォルトの名無しさん
2015/12/18(金) 19:34:49.00ID:i13cEfwD0271デフォルトの名無しさん
2015/12/18(金) 23:15:53.45ID:H9Ln3p1phttp://hayabusa3.2ch.net/test/read.cgi/news/1450395043/
0272デフォルトの名無しさん
2015/12/19(土) 12:31:04.93ID:jcVpBQagC#しかわからない人間がフリーウエアの将棋エンジンのソースを見ていたところ、C++11の機能が多用されており意味不明だった・・・・
書けるようにはならなくても、コードを読めるように手っ取り早くなりたいな
0273デフォルトの名無しさん
2015/12/19(土) 12:36:19.99ID:o/T2uvqt11の機能を全部把握してなかったので、そういうのが出来たのかって感じ。
ただ、結構トリックつかわないと難しそうだね。
if文でうけちゃうと普通に条件分岐のコードがでるから、
boolをテンプレート引数にとるクラスか関数を作って2段階でやるとかなんとか。
0274デフォルトの名無しさん
2015/12/19(土) 13:09:07.98ID:G+MS02M3将棋ソフトなんて高速化のためのハック満載じゃないの?
遠回りでも他のコードを見たり自分で何か書いてみたりした方がいい気が
0275デフォルトの名無しさん
2015/12/19(土) 14:14:18.83ID:xvN4NzGmtype_traitsは昔からあるよ
ifは実行時分岐だから、コンパイル時分岐との違いを理解しないとTMPは一生理解できないよ
そしてboolをうけとるメタ関数は自分で作らずboostのmplをつかうとよい
0276デフォルトの名無しさん
2015/12/19(土) 14:29:21.13ID:L2SZ6ujc234の人?それならboolをテンプレート引数にとるとか必要ないと思うが?
enable_ifの使い方を覚えればいいだけだよ
10行も掛けないで出来る
0277デフォルトの名無しさん
2015/12/19(土) 15:28:55.23ID:L2SZ6ujchttps://ideone.com/FGFyhZ
これだけのことだと思うが?10行未満は苦しいかw
0278デフォルトの名無しさん
2015/12/19(土) 16:00:55.05ID:Lxlb3fZyint main()
{
struct hage{};
int val;
hage* const p = hoge< hage* >( &val );
return 0;
}
test.cpp: 関数 ‘int main()’ 内:
test.cpp:6:38: エラー: ‘hoge(int*)’ の呼び出しに適合する関数がありません
hage* const p = hoge< hage* >( &val );
とでます。何故ですか
gcc4.9.3です。
0279デフォルトの名無しさん
2015/12/19(土) 16:10:54.52ID:GwbSAsaX以上
0280デフォルトの名無しさん
2015/12/19(土) 16:13:42.43ID:nbsz3GyT0281デフォルトの名無しさん
2015/12/19(土) 16:24:42.68ID:G+MS02M3ちょっともにょっとする
0282デフォルトの名無しさん
2015/12/19(土) 16:27:05.31ID:TmayNbxK0283デフォルトの名無しさん
2015/12/19(土) 16:27:42.65ID:Lxlb3fZy何故つけないとコンパイルできないのですか
0284デフォルトの名無しさん
2015/12/19(土) 16:29:06.77ID:nbsz3GyTつければいいんだよ
0285デフォルトの名無しさん
2015/12/19(土) 16:38:03.57ID:G+MS02M3最近 window 環境に tdm-gcc を入れたらそうなってた気が
ところで馬鹿を晒すようだけど質問
-std=c++1y は -std=c++14 とどう違うの?
0286デフォルトの名無しさん
2015/12/19(土) 16:42:29.86ID:G+MS02M3ttp://stackoverflow.com/questions/28825113/difference-between-gcc-compile-options-std-c1y-and-std-c14
> c++1y is a name that was used to refer to the c++14 standard before it was completed, so it is most likely adhering to a draft of the standard, but not the actual standard itself.
ttp://clang.llvm.org/cxx_status.html
> You can use Clang in C++14 mode with the -std=c++14 option (use -std=c++1y in Clang 3.4 and earlier).
c++1y の方が c++14 より新しいと思ってたけど、逆なのね
0287デフォルトの名無しさん
2015/12/19(土) 19:08:33.87ID:o/T2uvqtないだろ。
c++11から導入ってなってたぞ
0288デフォルトの名無しさん
2015/12/19(土) 19:20:09.50ID:o/T2uvqtenable_ifなんてものあるのね。
boolをひきすうにとったテンプレートとかいってやろうとしてたのはまさにこれ。
is_floating_pointをひきすうにとってなんとかしようかなと。
0289デフォルトの名無しさん
2015/12/19(土) 21:02:14.06ID:xvN4NzGmtype traitsは技法の名前
0290デフォルトの名無しさん
2015/12/19(土) 21:09:07.63ID:znCnMDXzC#みたいに強力なメタ情報をサポートすりゃいいのに
0291デフォルトの名無しさん
2015/12/19(土) 21:12:18.84ID:o/T2uvqttype_traitsって書いたのに。
type traitsじゃないよ
0292デフォルトの名無しさん
2015/12/19(土) 21:23:05.73ID:xvN4NzGm失礼しました
0293デフォルトの名無しさん
2015/12/20(日) 00:30:20.08ID:+3VSZzfw受益者負担の原則とかなんとかで、必要なコストは必要な人だけが払う、という考えが C++ の根底にある
だから特に配慮しない限り実行時型情報のサポートは限定的にならざる負えないんじゃないかな
#include <typeinfo> とかしたときにオブジェクトファイルがどうなるか知らないけど、
俺はそう理解してる
っていうか、実際にどうなるの?
gcc/g++ で -g オプションを指定するとソースファイルの情報が埋め込まれるみたいに、
クラス名とかが文字列としてバイナリに埋め込まれるとか?
0294デフォルトの名無しさん
2015/12/20(日) 00:44:51.48ID:ujiFhYYefor( auto num : vec)
{
// ここにコード書いて 0, 1, 2, 3, 4 std::endl出力となるようにしたい
}
これで
次に表示する要素があるときは要素表示のあと", "を表示して、
最後の要素の時はstd::endlってしたいんだけどどうしたら良い?
0295デフォルトの名無しさん
2015/12/20(日) 00:48:44.06ID:3zlmhSVS0296デフォルトの名無しさん
2015/12/20(日) 00:55:57.22ID:+3VSZzfwfor (auto num : vec) { cout << num << ", "; }
std::cout << "\033[2D\033[0K" << std::endl;
とか?
0297デフォルトの名無しさん
2015/12/20(日) 01:01:05.51ID:ujiFhYYefor を出た後にstd::endl;なら低脳の俺でも出来る
forの中でやりたいんだ
0298296
2015/12/20(日) 01:09:14.72ID:+3VSZzfw関数化しなよ
boost 使える環境なら boost::algorithm::join があって綺麗に書けるけど
0299デフォルトの名無しさん
2015/12/20(日) 04:58:53.33ID:ejwChM940300デフォルトの名無しさん
2015/12/20(日) 12:34:00.19ID:ofrSOHxvFortranがきのこってるのは人力による最適化に適しているからであって
決してゆえなきことではない
逆に言うとFortranがきのこってるのはコンパイラによる最適化技術の追求をサボっている>>224が悪い
0301デフォルトの名無しさん
2015/12/20(日) 16:32:25.86ID:A2b3bh9r付けたくないならg++を使いましょう
>>294
自分はforの中にif (first) {...}って書くけどお勧めってわけでもない。
c++自体がfirstとかfinallyとかいった構文を用意してくれればいいのに
0302デフォルトの名無しさん
2015/12/20(日) 16:54:10.94ID:zUb91iMF宿題かなんかか?
俺ならforの中では文字列を作ってfor抜けた後で最後のカンマを改行に変えてから出力するな
いちいち出力するよりその方が速いよ
0303デフォルトの名無しさん
2015/12/20(日) 18:25:45.44ID:6vo8OCajfor (auto num : vec) とかじゃなくてiteratorで回して良ければループ内で先頭と最後を判定できるのでおk、
for (vec_t::const iterator it = vec.begin(); it != vec.end(); ++it) {
if (it != vec.begin()) { std::cout << ","; } // ・・・(1)
std::cout << *it;
it (it == vec.end() - (size_t)1) { std::cout << std::endl; } // ・・・(2)
}
ただ個人的にはループ内でムダな処理はしたくないので、少なくとも(2)はループ外に出したい(if文は外す
コーディングとテストに時間的余裕があれば(1)もループ外に出したい(その場合vec.size()が0, 1, 2以上のときの場合分けが要るが
"\033[2D\033[0K"の使用はムダなデータが書かれるし、実際表示がうまく逝くかどうかすら環境依存なので認め難い
0304デフォルトの名無しさん
2015/12/20(日) 18:32:12.48ID:6vo8OCajvec.begin()とvec.end()はループ外でローカル変数にコピーして、ループ内ではコピーした方を使ったほうが速く動く可能性が高い
(さもないと、std::cout.operator<<()の呼び出しでvec.begin()とvec.end()が変更される前提のコードが吐かれる
0305デフォルトの名無しさん
2015/12/20(日) 18:39:10.23ID:RO+992jd無駄だな
そこは、elseで対応できるだろ
ループ内の++itも要らない
for (vec_t::const iterator it = vec.begin(); it != vec.end();) {
std::cout << *it;
it (++it == vec.end()) std::cout << std::endl; else std::cout << ",";
}
0306デフォルトの名無しさん
2015/12/20(日) 18:43:28.87ID:6vo8OCajスッゲ良くできてるwwwwwwwwwwwww
0307デフォルトの名無しさん
2015/12/20(日) 18:47:25.44ID:RO+992jdループ内条件も要らなくなる
if(!vec.empty())for(vec_t::const iterator it = vec.begin();;) {
std::cout << *it;
it (++it == vec.end()) {std::cout << std::endl;break;} else std::cout << ",";
}
0308デフォルトの名無しさん
2015/12/20(日) 18:56:48.94ID:14eB8c4Rパフォーマンスも良かったりする。
0309デフォルトの名無しさん
2015/12/20(日) 20:08:22.46ID:6vo8OCaj計ってみたらたしかにそうっぽいorz
VS2010でメモリ上のcharバッファに0..99をお題形式の文字列として100000回書き込むやつで10回計って平均をとったらこうなったわ;
Firstフラグ方式: 平均 3.249秒
>>307そのまま: 平均 9.044秒
vec.end()をループ外に出した: 平均 5.762秒
検証コード:
ttp://ideone.com/O1nUEN
(※ codepad.orgの方が何か死んでるので、仕方なくVS2010のコードのままideone.comの方に貼った。
0310デフォルトの名無しさん
2015/12/20(日) 20:19:11.13ID:t9oK2aYV0311デフォルトの名無しさん
2015/12/20(日) 20:54:02.51ID:aEd4AL0Dnative_handle()を使って何とかする
出来なければ環境・処理系固有の命令を使って
自身のスレッドハンドルを取得して何とかする
0312デフォルトの名無しさん
2015/12/21(月) 00:58:22.36ID:7MqiSgar0313294
2015/12/21(月) 01:34:04.80ID:CleoLuQ0for(:)内で1,2行のコードでやれればベストなんだが、諦めて
下の関数のようにして要素をstringにしたのを返すことにする,orz
template <class T>
string cont_show(const std::string& pre, const std::string& separator, const T& v)
{
std::string str = pre;
for( const auto ele : v){
// str += ele ;
str += std::to_string(ele);
str += separator;
}
str.erase(str.rfind(separator));
return str;
}
cout << cont_show("vec= ", ", ", vec) << endl;
0314296
2015/12/21(月) 08:43:09.16ID:bZVc/vPsそんなわけないと思ったので確認してみた
で、>>309 がどういう条件でコンパイルしてるか分からんけど、
Visual Studio の Debug モードで測定してる予感
コードほぼそのまま(mingw 環境なので sprintf_s と strcpy_s は snprintf と strncpy に置き換え)で
g++ a.cc -std=c++14 -O2 で測定するとそれぞれの平均は
0.586 s, 0.581 s, 0.591 s で、これはほぼ同等の速度とみなしていいと思う
アセンブラも確認したが特筆するような違いはない
ちなみに最適化レベルを変えると
-O0: 0.653 s, 0.725 s, 0.684 s
-O3: 0.591 s, 0.580 s, 0.578 s
-O3: 0.587 s, 0.583 s, 0.579 s (main の N を 10 から 100 に変更)
って感じ
0316デフォルトの名無しさん
2015/12/21(月) 11:50:08.12ID:8MgwTH8n実行時の話ではないでしょ。
0317デフォルトの名無しさん
2015/12/21(月) 12:08:05.01ID:7MqiSgarご苦労であった
たかだかイテレータ使ったが為にこんなにトロいコード吐くわけないと思っていたところだぬん
0318デフォルトの名無しさん
2015/12/21(月) 14:07:33.15ID:s2cNQ2/b0319デフォルトの名無しさん
2015/12/21(月) 15:11:06.35ID:j5AZWO2W0320デフォルトの名無しさん
2015/12/21(月) 15:21:43.26ID:bZVc/vPsそれはまあ仕方ないんじゃないの
で、VS (Comm. 2013) でも試してみた
条件は /O2 /Ob2 /Oi
結果: 0.802 s, 0.798s, 0.821 s
g++ 版より遅いのはなんでだろ
単に snprintf/sprintf_s の差かな
まあマイクロベンチでこの程度の差なら実質同じと言っていいのかな
0321デフォルトの名無しさん
2015/12/22(火) 00:30:00.59ID:6ynvCyVWオブジェクト指向言語と相性悪くね?
0322デフォルトの名無しさん
2015/12/22(火) 00:34:47.34ID:Ca/2LP3t0323デフォルトの名無しさん
2015/12/22(火) 01:18:51.43ID:FWHE1HV9単なる命名や書き方にそこまでの影響があるわけ無かろう
0324デフォルトの名無しさん
2015/12/22(火) 02:22:11.40ID:7c90Jv4Pハンガリアン記法で書くと最適化が効きやすくなるの?
0325デフォルトの名無しさん
2015/12/22(火) 03:51:57.86ID:dbVFaMrPそれらの記法をコンパイラが使うなら最適化も効きやすくなるだろうな。
wasabiって言語がそうなってるって昔どっかで読んだ。
c++だと変わらないんじゃね?
0327デフォルトの名無しさん
2015/12/22(火) 13:36:19.20ID:w8K4gGa9言語設計としてそうなってるならともかく、たまたま変数名の先頭が p だったり c だったりで
コンパイラの挙動が変わったら困るだろ
0328デフォルトの名無しさん
2015/12/22(火) 15:22:18.92ID:IyWWqIrYコンパイラが自動的に整数型にしてくれる言語が…
C++じゃないけどな。
0329デフォルトの名無しさん
2015/12/22(火) 15:52:26.91ID:/dHF4x6s0330デフォルトの名無しさん
2015/12/22(火) 17:39:34.68ID:i6Ub8YBB0331デフォルトの名無しさん
2015/12/22(火) 18:15:03.49ID:3LtJTVBP0332デフォルトの名無しさん
2015/12/22(火) 18:56:28.29ID:+S+I61oO構造体の階層が深くなった場合に
このようにコードが長くなってしまうのですが
何か良い方法はありますでしょうか。
if(Aaa[i].bbb[j].ccc[k].ddd<Aaa[i].bbb[j].eee)
{
Aaa[i].bbb[j].ccc[k].ddd=Aaa[i].bbb[j].eee;
}
0333デフォルトの名無しさん
2015/12/22(火) 18:58:57.92ID:rq+weehKauto & baka = Aaa[i].bbb[j].ccc[k].ddd;
ただしビットフィールドには使えない
0334デフォルトの名無しさん
2015/12/22(火) 19:59:25.26ID:P8CDnsgjうちのくそコードなんか1関数1000行越えてるのがよくあるぞ。
1万行オーダーのクラスとかもな
0335デフォルトの名無しさん
2015/12/22(火) 20:02:59.58ID:w8K4gGa9逆に考えるんだ
「自動生成してるのかもしれない」と考えるんだ
0336デフォルトの名無しさん
2015/12/22(火) 20:38:52.24ID:KoWAYpVIっていうか比較的まだ良心的なほうだな
0337デフォルトの名無しさん
2015/12/22(火) 20:52:45.82ID:c/oP9Kt2長くなるからって理由だけで関数に分けるのは無駄だよな
void func()
{
func1();
func2();
func3();
・・・
func100();
}
これでfunc1〜func100がfuncからしか利用されてなかったのなら
分ける意味ないよな
変数名の汚染が怖いなら、ブロックにわければ良いだけだし
0338デフォルトの名無しさん
2015/12/22(火) 20:57:21.38ID:HfEapSwJ全然うれしくないけど長すぎたら分ける。
それにしても前提が極端だな。そんなことってあるか?
0339デフォルトの名無しさん
2015/12/22(火) 20:59:13.50ID:R5YQBigH0340デフォルトの名無しさん
2015/12/22(火) 21:06:33.45ID:R5YQBigH0341デフォルトの名無しさん
2015/12/22(火) 21:08:22.05ID:c/oP9Kt2ラムダで関数内関数風にして関数内に封じ込めるけどな
普通の関数やメソッドにしちゃうと名前空間を汚すからね
あちこちから呼び出される可能性を残してしまって読む方も困惑する
0342デフォルトの名無しさん
2015/12/22(火) 21:15:51.40ID:HfEapSwJつか、>>337で、func1〜func100がfuncからしか利用されてないっていう時点で分割のしかたが悪いんだと思う。
なんとか
void func()
{
util1();
util2();
util3();
・・・
util100();
}
っていう形にして、util1〜util100が他でも使えるようにすることを考えたい。
0343デフォルトの名無しさん
2015/12/22(火) 21:22:21.51ID:c/oP9Kt2一塊な一連の処理というのはどうしても存在するし
そのためだけに設計を練り直すのも、それでプログラムが余計複雑な構造になったら馬鹿らしいしね
0344デフォルトの名無しさん
2015/12/22(火) 21:27:35.79ID:07eSaah4あるわ
関数に分ける作業は、スパゲティー化した関数の事後の解析手段としては大いにアリ
ブロックにしただけだと、ブロック外で宣言された変数をブロック内で使い放題なので、本当に使っているのかどうか判然としない
グローバル変数を含まない関数に分けてみてはじめてコンパイラの力で「使われていない」ことが証明可能になる。
1000メンバの構造体に対する読み書きとか、
1000個のグローバル変数に対する読み書きとかやってる関数を考えたらワカル
実際に漏れはやった
0345デフォルトの名無しさん
2015/12/22(火) 21:29:09.94ID:c/oP9Kt2構造的な複雑さがなければ、長くなっても順番に読んでいけば読めるしね
そこでgoto文とかを使って複雑怪奇な制御フローにしちゃうと
誰も読めないよねってだけで
安易に関数やメソッドに分けちゃうと、他の箇所からも呼び出される可能性を残すし
単品で呼びだされてもオブジェクトの状態として不整合が無いように実装するには
すごい労力がいるよね
ラムダを使って関数内関数にしておけば他所から呼び出される心配がないから楽だよ
0346デフォルトの名無しさん
2015/12/22(火) 21:31:58.20ID:h9Uf3G+hつうかコマンドのリストにするね
分割しない奴はプログラマ廃業したほうがいい
0347デフォルトの名無しさん
2015/12/22(火) 21:31:59.16ID:c/oP9Kt2それでもキャプチャ無しのラムダに分ければ十分だよね
0348デフォルトの名無しさん
2015/12/22(火) 21:32:18.15ID:HfEapSwJ0349デフォルトの名無しさん
2015/12/22(火) 21:42:49.94ID:07eSaah4C++のラムダはよう知らんが、「キャプチャしていない」ことをコンパイラが証明してくれるかどうかに一抹の不安が…
ラムダは本質的に自由変数を束縛するブツなのでキャプチャが思わず自然にできてしまう気がして怖い…
あとgotoが無く構造的に複雑でもないのに読みづらいというケースは有り得る
void foo(<引数>) { Aブロック; Bブロック; Cブロック; Dブロック; Eブロック; }
というちょう長い関数が実はデータフロー的には
<引数>→A→B→E
<引数>→C→E
<引数>→D
でしかなかった、とかがそれ
0350デフォルトの名無しさん
2015/12/22(火) 21:48:19.23ID:07eSaah4見かけはガチのスパゲティーコードだが、関数に分けて行けばほぼ機械的な作業でブロック間のIN/OUTが明らかになる、
0351デフォルトの名無しさん
2015/12/22(火) 21:52:41.05ID:h9Uf3G+h>>337とか深刻なレベルでヤバイよな
0352デフォルトの名無しさん
2015/12/22(火) 22:05:36.21ID:fpkW4NSe0353デフォルトの名無しさん
2015/12/22(火) 22:10:24.68ID:w8K4gGa91000メンバの構造体ってありえるの?
0354デフォルトの名無しさん
2015/12/22(火) 22:24:18.60ID:07eSaah4>データ構造とアルゴリズムを議論せずにコード量を云々しても……
できる!
アルゴリズムの選択と、関係ないものをまぜこぜにしたコードの汚さは分けて議論できる
処置も然り
データ構造については一つの構造体が読みも書きもされる、という時点で黄色信号が点っていることがワカル
void foo(struct Foo& a)よりもvoid foo(const struct Bar& a, struct Baz& b);の方がなんぼかマシ
(*thisはどうなんじゃ、という反論が来たらもっと書く
1000メンバの構造体は、入れ子の構造体を数えたら1000個超えてた; という形でしばしばある
0355デフォルトの名無しさん
2015/12/22(火) 22:28:42.75ID:c/oP9Kt2そんなものは処理をメソッドに小分けにしたところで
結局その1000個のメンバにアクセスし放題だから、複雑さは一緒だね
こういうものは、当たり前だが、処理を関数に分ける以前に
まずはデータ構造を小分けにするべきで
そうすると勝手に処理も小分けになるケースだね
0356デフォルトの名無しさん
2015/12/22(火) 22:31:13.09ID:c/oP9Kt2その一つ一つの構造体にデータにまつわる処理をメソッドとして移すのがOOPの基本だろう
0357デフォルトの名無しさん
2015/12/22(火) 22:32:54.25ID:vtL8Us2q0358デフォルトの名無しさん
2015/12/22(火) 22:35:22.54ID:h9Uf3G+hメンバ数1000とかギネスでの狙ってんのかよ
0359デフォルトの名無しさん
2015/12/22(火) 22:36:34.04ID:c/oP9Kt2エラーになるようなものは例えprivateだとしてもメソッドとして公開したくはない
そう思うのが普通だろう
そういう場合は関数内でラムダを定義して関数内関数にして小分けにすればよいわけだ
そうすれば一切外部に公開されないし、その関数内でしか呼び出せないのだから安心だわな
0360デフォルトの名無しさん
2015/12/22(火) 22:36:40.78ID:07eSaah4驚くべき決め付け力!
関数void foo(struct HugeStruct& x);を
関数void func_ABE(const struct SmallStruct1& x, struct SmallStruct2& y);と
関数void func_CE(const struct SmallStruct3& a, struct SmallStruct4& b);とか
に分ければ>>349なケースにおいて複雑さは減るし、データ構造は小さくなる
IN/OUTを明らかにする、とはこういうことを指向している
(無関係なものを排除するのはデフォ
0361デフォルトの名無しさん
2015/12/22(火) 22:40:51.37ID:h9Uf3G+h順番に依存しないように関数にすればいいだけ
0362デフォルトの名無しさん
2015/12/22(火) 22:41:12.85ID:07eSaah4概ね同意だが、元がスパゲティーコードなのだとすると、
構造体の入れ子が意味的に正しい区切りかは解析してみないとワカランし、
構造体の入れ子の中にも、読まれるメンバと書かれるメンバが入り混じったフラットな部分(もっと分割できる)があるかもしれない
0363デフォルトの名無しさん
2015/12/22(火) 23:22:56.45ID:42pHJdZCパスタソースと言え
0364デフォルトの名無しさん
2015/12/22(火) 23:30:00.97ID:HfEapSwJ0365デフォルトの名無しさん
2015/12/22(火) 23:48:17.43ID:kMUIR4Di0366デフォルトの名無しさん
2015/12/23(水) 01:00:56.72ID:BzOxQ5F4一部はきちがい原理主義者とかいるけど
0367デフォルトの名無しさん
2015/12/23(水) 01:16:36.17ID:xKy7nhKt// /)
`/// __
|イ二つ/⌒⌒\
| 二⊃ (●) (●) \
/ ノ/⌒(_人_)⌒ \
\_/| |┬| |
/ \ `ー′ /
0368デフォルトの名無しさん
2015/12/23(水) 01:18:38.36ID:RaRt0JiMC++ってネット検索だけじゃ覚えるのに効率悪い?
なんか思ったよりCと違うと言うか、他人の書いた記述が読めない。
あとCって記号とか少なくて、なんでも
aaa bbb ccc;
みたいな書きかたで来るから、aaaがなんなのかcccがなんなのかさっぱり分からないこと多い。
0369デフォルトの名無しさん
2015/12/23(水) 01:53:40.65ID:at23GWqE一気に覚えようとしないで分からないと感じるとこから徐々にやっていけば良い
0370デフォルトの名無しさん
2015/12/23(水) 02:02:55.30ID:RaRt0JiM0371デフォルトの名無しさん
2015/12/23(水) 08:31:01.78ID:+NQ/xqJlけっこう半々な印象。
0372デフォルトの名無しさん
2015/12/23(水) 09:51:28.52ID:yPOVGEOY参考書買ったほうがいいよ
0373デフォルトの名無しさん
2015/12/23(水) 10:34:07.94ID:1VnhNGH+その辺は名前付け慣習とIDEで何とかするしかない
正直そのレベルでネットでつまみ食いとか話にならない
20年前に C++"マスター" しててもその後の追加機能ついてけないのに
0374デフォルトの名無しさん
2015/12/23(水) 10:42:12.30ID:3hZVGXtKRPGツクール2000 , RPGツクールMV https://tkool.jp/mv/ ( JavaScript 採用 )
WOLF RPGエディター http://www.silversecond.com/WolfRPGEditor/
デュエル・マスターズ Android版 ,i-OS版、公式 http://dm.takaratomy.co.jp/extra/dmapp/entrygate_ds/
デュエル・マスターズ対戦CGI ex
https://web.archive.org/web/20150809154946/http://www53.atwiki.jp/dmsuishinparty/pages/314.html
デュエル・マスターズ(デュエマ)DM ONLINE 1.8a / VanGuard ONLINE 1.5a
https://web.archive.org/web/20150809160254/http://uhyohyohyo.sak ura.ne.jp/hsp.html
ヴァンガード専用ネット対戦ツール【 VanGuard Online 】
https://web.archive.org/web/20150809155032/http://kiimaa.jugem.jp/?eid=61
「カードファイト!!ヴァンガード」のネット対戦ができる公式オンラインゲーム「Cardfight!! Online」 2015年冬スタート
https://web.archive.org/web/20150809153724/http://supersolenoid.blog63.fc2.com/blog-entry-6886.html
遊戯王 Automatic Dueling System
https://web.archive.org/web/20150809164855/http://www3.atwiki.jp/ads-wiki/pages/20.html
遊戯王 デュエル・オンライン
https://web.archive.org/web/20150809171527/http://www31.atwiki.jp/vipdo/pages/15.html
https://web.archive.org/web/20140628005202/http://do.yugioh-portal.net/
ウィクロス( WIXOSS ) WEBXOSS http://webxoss.com/about_en.html http://webxoss.com/DeckEditor/
BG(ボードゲーム)Engine https://web.archive.org/web/20151209080842/https://bgengine.net/
https://web.archive.org/web/20151209172205/http://14owl.hateblo.jp/entry/2015/12/09/011234
アプレンティス マジック:ザ・ギャザリング(MtG)オンライン化 http://homepage1.nifty.com/Q_Q/ap.html
https://web.archive.org/web/20151202202725/http://homepage1.nifty.com/Q_Q/ap.html
0375デフォルトの名無しさん
2015/12/23(水) 10:43:02.66ID:3hZVGXtKデュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。
例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、
当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを
ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。
既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。
デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど
のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。
マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。
個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。
設計思想は 《 RPGツクール 》 が良いかな? 他に、優れたエディター有ったら挙げてみろ。
個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。
↓
エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。
↓
遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。
バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。
↓
各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。
↓
機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ−グ用でサーバー稼動。
↑
下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。
さ〜て、インド人ベンダーと日本人の翻訳担当PGを見つけよっと!ww
http://wc2014.2ch.net/test/read.cgi/entrance2/1450555747/-20
0376デフォルトの名無しさん
2015/12/23(水) 11:03:57.67ID:sJwRv/VQ本当にcostの領域書き換えようとしたら、OS に依っては、例外で落ちる。
マイコンだったら、ROM 領域に割り当たったりするから、こっちもトラップ起きるか、正常動作しない。
0377デフォルトの名無しさん
2015/12/23(水) 11:12:39.69ID:McSS3rOmさも悪いことの例として書かれても
0378デフォルトの名無しさん
2015/12/23(水) 12:10:12.62ID:hTjb3j4U#define
enum
const static
constexpr
0379デフォルトの名無しさん
2015/12/23(水) 12:13:08.41ID:r+tlUph/列挙される定数ならenum class、実行時定数ならconst、コンパイル時定数ならconstexprかな。
#defineは定数というかマクロに使う感じ
0380デフォルトの名無しさん
2015/12/23(水) 12:13:59.15ID:JwJRlMaEではまず貴様の「定数」とやらの定義を聞こうか
0381デフォルトの名無しさん
2015/12/23(水) 12:16:35.52ID:F7FK9/Ldconstexpr か scoped enum
ただし constexpr はリテラルでしか宣言できないので、非リテラル型なら const
スコープを翻訳単位に制限するときは static const T ... でなく無名名前空間を使って
namespace { const(expr) T ... }
とする って感じ
0382デフォルトの名無しさん
2015/12/23(水) 12:38:03.02ID:BrzFNCu8enumみたいな数値に意味が無い定数は結局のところストラテジやステートに置き換えられるからあまり使わない
物理定数みたいな数値自体に意味のある不変の定数はconstかconstexpr
実行時の環境に依存する定数は保守性優先でメソッドでの問い合わせを使う
0383デフォルトの名無しさん
2015/12/23(水) 12:58:37.25ID:k0+pKQyYconst auto EPS = std::numeric_limits<double>::epsilon();
としてましたが、これで良かったんすね?
便乗質問ですいません
0384デフォルトの名無しさん
2015/12/23(水) 13:16:53.46ID:r+tlUph/constexpr auto EPS = ...
でも通るはずだよ
0385デフォルトの名無しさん
2015/12/23(水) 13:59:05.72ID:k0+pKQyYそうでした。ありがとうございます
ところで std::numeric_limits<double>::epsilon() が返す 2e-16 って値はどのように決まるんでしょうか?
std::numeric_limits<double>::min() の 2e-308 に比べるとかなり大きいですが
0386デフォルトの名無しさん
2015/12/23(水) 14:46:16.76ID:r+tlUph/そもそもその値の定義は「1に足したら1以外の値になる、絶対値が最小の正の値」だから。
つまり
union di {
double d;
uint64_t i;
};
di one, one_plus_epsilon;
one.i = 0x3ff0000000000000;
one_plus_epsilon.i = 0x3ff0000000000001;
double eps = one_plus_epsilon.d - one.d;
でも同じ値が計算できる。
double型とint64_t型のエンディアンにも依るけどね。
0387デフォルトの名無しさん
2015/12/23(水) 15:02:04.89ID:ykJGFkPvIEEE 754形式は仮数部52 bit + 仮想的な最上位 1 bit(常に1)の計53 bitの精度があるから、
log_2(53) = 15.9故に>>386のような結果になるのだと思われ
0388デフォルトの名無しさん
2015/12/23(水) 15:04:05.35ID:F7FK9/Ld「計算機イプシロン」でググったらいいことがある予感
というか、数値計算をする上でその程度の理解だとちょっと厳しいのでは
非正規化数とかの用語は大丈夫?
0389デフォルトの名無しさん
2015/12/23(水) 15:06:32.33ID:ykJGFkPv1 + log_2(52) = 1 + 15.7 = 16.7
つか浮動小数点数の話題は浮動小数点数スレでおk
0390デフォルトの名無しさん
2015/12/23(水) 15:11:28.29ID:k0HavgjY新機能の enum struct 一択だろう
0391デフォルトの名無しさん
2015/12/23(水) 15:12:33.40ID:ykJGFkPv通常の指数表示規則に従わせずに使うやつ
近接した2数の差で生じるが、2^(-970)より大きい数同士の差では(近接していても)生じない
0392デフォルトの名無しさん
2015/12/23(水) 15:14:26.88ID:r+tlUph/私です(AA略
>>385
何か大きな計算をしてて、引き算をした結果0に近いって意味でのεとは意味が違うので注意ね。
そういう意味で使いたいなら
bool simeq(double x, double y) {
return abs(x - y) / (abs(x) + abs(y)) < 0.01;
}
的な関数を作るべき。
0393デフォルトの名無しさん
2015/12/23(水) 15:55:04.23ID:F7FK9/Ldあっという間にレスがついたりで、>>366 はちょっとどうかなと思う
言語仕様はもちろんだけど、環境べったりの細かいとこまで触りたいから C/C++ を使うんじゃないかなあ
0394デフォルトの名無しさん
2015/12/23(水) 16:18:34.94ID:8eCiuqc6abs(x-y) <= numelic_limits<double>::epsilon * abs(x)
じゃないとだめじゃね
0395デフォルトの名無しさん
2015/12/23(水) 16:26:31.55ID:k0+pKQyY前者はざっくり言えば double a,b の一致を調べる際に
abs((a-b)/a)<EPS などとするときの EPS ということですね。
実は今までは何となく不安だったので
const auto EPS = 1e3 * std::numeric_limits<double>::epsilon();
としてました。恥ずかしい、、、
後者は驚きでした。これによりDBL_MINよりもゼロに近い数を表現できるんですね。
(有効数字が下がり計算も遅くなる弊害はありますが)
皆様ありがとうございました。勉強になりました
0396デフォルトの名無しさん
2015/12/23(水) 16:34:01.06ID:F7FK9/Ld>> 1e3 * ...
用途によるけど、別にそれでも問題ない
>>392 が言ってるように、数学的に小さい数を表す(そういう含意がある)ϵ とは意味合いが違うから
むしろ「どんな計算でも計算機イプシロンの精度は保証されてるんだ!」みたいな理解は危ない
あくまで「計算機上で」1.0 < 1.0 + ϵ が保証されてる数に過ぎないから(移項したり辺々に何か足したりしちゃだめだよ!)
0397デフォルトの名無しさん
2015/12/23(水) 17:53:06.86ID:ykJGFkPvbool simeq(double x, double y) {
union di {
double d;
uint64_t i;
};
if (x < y) std::swap(x, y);
di.d = x;
di.t &= 0x3ff0000000000000ULL;
di.t |= 0x1ULL;
double diff = x - y;
return diff <= std::abs(di.d);
}
にすれば最高の精度が出る…!
希ガス…!!
0398デフォルトの名無しさん
2015/12/23(水) 20:18:26.85ID:F7FK9/Ld近似的に 0 かどうかを判定するなら >>395 が言うように
適当な定数を使って比較した方が速いし分かりやすいと思う
0399デフォルトの名無しさん
2015/12/24(木) 01:49:23.55ID:Md3mVxx6if( norm(A-B)/mag(A) < EPS ) //AとBはarray、magはarrayの大きさ(ユークリッドノルム)を返す
magの中で誤差がたまるような演算してたらEPSを超えることも当然有り得るわけで
想定する誤差を考慮してEPSを決めておけって話か
まぁ計算機イプシロンの10倍くらいとっとけば大抵の場合は困らないかな
0400デフォルトの名無しさん
2015/12/24(木) 11:37:59.71ID:lQuTvdvQ�@int& n = ... 基本これ
�Aint &n = ... nのアドレス参照に見えて嫌い
�Bint & n = ... 間延びして見える。でも型が長いときはたまに使う
0401デフォルトの名無しさん
2015/12/24(木) 11:38:41.46ID:acHF714F決めてない
0402デフォルトの名無しさん
2015/12/24(木) 12:33:32.07ID:OOhg2ropカンマ区切りで羅列することが多かった
その際、1のように int* とすると、以降すべてがポインタ扱いになるから、
ポインタとして宣言したい変数にのみ*付けてた
int* p, i, j; //すべてポインタ型
int *p, i, j; //pだけポインタ型
今じゃ羅列はしてないが、これが元で基本は2を常用しているな
0403デフォルトの名無しさん
2015/12/24(木) 12:38:33.72ID:TPzlNnvJ0404デフォルトの名無しさん
2015/12/24(木) 12:42:50.03ID:Pi/jPgdhってのが間違いDANE
C# ならあってるけど
0405デフォルトの名無しさん
2015/12/24(木) 12:49:27.62ID:OOhg2rop学生当時はVisualC++6.0だったけど、そのせいか、はたまた記憶違い…?
0406デフォルトの名無しさん
2015/12/24(木) 12:57:09.69ID:acHF714F0407デフォルトの名無しさん
2015/12/24(木) 15:44:23.40ID:Q3X3HcTd3は演算子と被って検索の邪魔になりそう、とかつい思っちゃう
でもたぶん検索することはない
0408デフォルトの名無しさん
2015/12/24(木) 18:14:23.55ID:oleU/CSHならないから見た目と実態を合わせるために変数側につけるって話じゃないの?
0409デフォルトの名無しさん
2015/12/24(木) 18:27:55.53ID:hibvS7Mlむしろdeclaratorの一部とspecifierをくっつけるという発想がおかしい。
0410デフォルトの名無しさん
2015/12/24(木) 18:44:45.28ID:OOhg2ropいや、当時は
1: 「intポインタ型」の p と i と j を宣言
2: 「int型」の ポインタp と i と j を宣言
と自己解釈してて、納得してたんだよ
その上で、1だと意図せずポインタ型になるので、
変数名に明示的にポインタを書くくせを付けてたって話
自分の誤った理解が、今回解けて良かったとはいえ、
VisualC++6.0で確認してみたいが手元にないのが口惜しい
0411デフォルトの名無しさん
2015/12/24(木) 19:04:25.20ID:GsssoKmX0412デフォルトの名無しさん
2015/12/24(木) 20:36:26.99ID:DECH3WsRそんな変な独自仕様は無かったと
0413デフォルトの名無しさん
2015/12/24(木) 21:32:48.46ID:Feh/kJXC注意しなきゃいけないことのひとつとして
0414デフォルトの名無しさん
2015/12/24(木) 22:32:13.69ID:oleU/CSHその代わり1行1変数にすべしと
0415デフォルトの名無しさん
2015/12/24(木) 22:32:55.13ID:GU6AGSz2で
0416デフォルトの名無しさん
2015/12/25(金) 07:38:33.62ID:AQI4RQgqはどうすんだよ
0417デフォルトの名無しさん
2015/12/25(金) 17:47:35.36ID:Qe6dmkgC「間違わないよう注意しよう」の、注意する部分が強すぎて
間違ったほうで覚えちゃう……ってのは、
プログラミングに限らず世の中けっこうある気がする
0418デフォルトの名無しさん
2015/12/25(金) 19:26:27.60ID:rMHOLY0+アドレスの&を参照の宣言に使ったハゲは死んだ方がいい
ハゲもそろそろ寿命だろ
0419デフォルトの名無しさん
2015/12/25(金) 19:32:12.73ID:wx0vRYD+代案も出さずに文句言ってんじゃねーよゴミ
嫌なら使うなクズ
0420デフォルトの名無しさん
2015/12/25(金) 19:59:16.21ID:k5SbnQhg0421デフォルトの名無しさん
2015/12/25(金) 20:10:48.89ID:Dw2KFXJp0422デフォルトの名無しさん
2015/12/25(金) 20:18:23.43ID:CaNvFOIE目が悪いプログラマをいたわれよ
0423デフォルトの名無しさん
2015/12/25(金) 20:22:59.50ID:VYJL9Hps0424デフォルトの名無しさん
2015/12/25(金) 21:09:20.32ID:sQSCITve情報源にも依るだろうけど。
0425デフォルトの名無しさん
2015/12/25(金) 21:15:38.50ID:DwoG3pnf0426デフォルトの名無しさん
2015/12/25(金) 21:16:58.49ID:PnL2MC9b0427デフォルトの名無しさん
2015/12/25(金) 21:17:30.64ID:h8PddtoJ0428デフォルトの名無しさん
2015/12/25(金) 21:23:47.95ID:VYJL9Hps? は結構使うな。
単体の | じゃないかな
0429デフォルトの名無しさん
2015/12/25(金) 21:25:52.74ID:XvkCqMEu0430デフォルトの名無しさん
2015/12/25(金) 21:26:15.36ID:5nmp/yEAx = [email protected];
0431デフォルトの名無しさん
2015/12/25(金) 21:29:07.75ID:0xMqAn7x0432デフォルトの名無しさん
2015/12/25(金) 21:30:04.57ID:eCSmWQzWint %% ri = v;
みたいな
0433デフォルトの名無しさん
2015/12/25(金) 21:32:41.95ID:0xMqAn7x0434デフォルトの名無しさん
2015/12/25(金) 21:50:38.71ID:sQSCITve単体の|も使うぞ。
内部表現ucs4でターミナルがutf8だと出力するのにシフトと&と|のごった煮が必要になるからな。
0435デフォルトの名無しさん
2015/12/25(金) 23:43:29.98ID:kan7orvoCで適当に書いて見たところ30分経過しても処理が終わる雰囲気ありません。(1から順番に割り切れるのかどうかを全部チェックした)。
まともな時間内で終わらせる書きかたがあるなら、その記述がほしいです。
ないなら、素数の一覧表のURLか何かが欲しいです。
ちなみにその出力が全部でどのくらいのバイト数になるのか分かってません。
0436デフォルトの名無しさん
2015/12/25(金) 23:52:36.72ID:0xMqAn7xhttp://opp-track.cocolog-nifty.com/blog/2013/02/post-6a30.html
0437デフォルトの名無しさん
2015/12/26(土) 00:13:46.87ID:HLaSlD1pタダで欲しがっちゃダメだよ
0438デフォルトの名無しさん
2015/12/26(土) 01:06:44.98ID:PQT39fnHやっぱいらないですってことになりました。
ありがとうございました。
0439デフォルトの名無しさん
2015/12/26(土) 01:08:29.52ID:APwgJKcvいいってことよ、
また悩みがあったら遠慮なく相談しな(´・ω・`)b
0440デフォルトの名無しさん
2015/12/26(土) 01:08:34.95ID:PQT39fnH0441デフォルトの名無しさん
2015/12/26(土) 01:24:13.34ID:sCwZalzQMax_Moves:256
を提示するようになってた;
この情報って何かに活かせるのけ?
0442デフォルトの名無しさん
2015/12/26(土) 04:38:43.16ID:ruJtu//g32 bit の素数だけなら 300 MiB 以下で収まるから、そこから
篩にかけて列挙してく方がいいね
0443デフォルトの名無しさん
2015/12/26(土) 04:41:01.32ID:S13iTXsnconst shared_ptr<T>& ref = list[0]; のように取ると、listに要素を追加した際に
参照先がおかしくなるのですが、何故こうなるんでしょうか?
https://ideone.com/3YLbwe
0444デフォルトの名無しさん
2015/12/26(土) 04:57:01.28ID:bmbNcMd5vectorの仕様としか言いようがない
追加→メモリ拡張→必要に応じて全部の要素を移動
0445デフォルトの名無しさん
2015/12/26(土) 05:51:14.92ID:S13iTXsnそれは知ってましたが、移動に応じて参照先も追従してくれるのかと思ってました
・・・よく考えたらするわけないですよね
なんかこういう勘違いをしてる時点でC++をよく分かってないのが明らかですねorz
あと、shared_ptr自体は本問題には全く関係ない話ですね
スレ汚し失礼しました
0446デフォルトの名無しさん
2015/12/26(土) 11:19:22.26ID:Bg7Bp4xbshared_ptrをつかってるのだから
参照ではなくweak_ptrで実体もらえばいいのに。
0447デフォルトの名無しさん
2015/12/26(土) 11:26:30.63ID:CIWNoXeM0448デフォルトの名無しさん
2015/12/26(土) 11:26:51.79ID:HLaSlD1p0449デフォルトの名無しさん
2015/12/26(土) 11:44:37.92ID:bmbNcMd5ここは
× const shared_ptr<T> &
× weak_ptr<T> &
○ const T &
が正解
0450デフォルトの名無しさん
2015/12/26(土) 12:38:20.64ID:d8jGfVRJ0451デフォルトの名無しさん
2015/12/26(土) 12:40:06.70ID:E3MIEZFa受ければ良いだけなんじゃないの?
これなら追尾してくれるよね
第一、const shared_ptr<T>& ref って何でconst付けているか意味不明なんだが
これって、Tの実態を書き換えないって意味じゃなくて
Tは書き換えられるけどshared_ptr自体は書き換えないって意味だよね
ポインタで言ったら int * const p と同じ意味だよね
そんなことする意味有るの?
0452デフォルトの名無しさん
2015/12/26(土) 12:43:48.18ID:LYATmO+u追尾するわけないだろ
0453デフォルトの名無しさん
2015/12/26(土) 12:55:38.05ID:pVKld/fI0454デフォルトの名無しさん
2015/12/26(土) 12:57:59.25ID:E3MIEZFavectorに入っているスマポへの参照としては追尾しないけど
Tの実際の方へのリンクは貼られたままになるでしょ
それで十分なんじゃないの?
list[0]そのものへの参照が欲しいってことなのかもしれんが
そんな機会はあまりないし、そもそも元のコードは
const shared_ptr<T>& refってconst付きで受け取っているから
参照を通してスマポの値を書き換えることは出来ないし、目的がよく分からんよね
それにlist[0]への参照がほしいならインデックスを取得しておけば済むよね
0455デフォルトの名無しさん
2015/12/26(土) 13:00:32.11ID:PFSeoZHaメイヤーこんな記事もあるぞどっちやねん
http://cx5software.sakura .ne.jp/blog/2012/01/16/how_pass_shared_ptr_to_func/
0456デフォルトの名無しさん
2015/12/26(土) 13:03:51.19ID:E3MIEZFaそれだと生参照になるだろ
shared_ptr<T> ptrで受けるのが安全かと
しかし元のコードは const shared_ptr<T>& ref = list[0]; なので、
彼のしたいことは、list[0]のスマポの値が書き換わったら
それがrefにも反映されてほしい、ってことなのかもしれない
list[0]その物への参照がほしいということなのかもしれない
const T & や shared_ptr<T> で受けると実態にリンクされるから
list[0] が書き換わってもそれは反映されない
元のコードとコンパチにしつつバグを取るには
インデックスを使ってアクセスするのが一番手軽だろう
0457デフォルトの名無しさん
2015/12/26(土) 13:19:03.99ID:E3MIEZFaそのたびにインデックスを更新するのが面倒くさいなら
std::vector< std::shared_ptr<T> * > list;とでもしておいて
auto ptr = list[0];
とでもするかだな
それが
std::vector< std::shared_ptr< std::shared_ptr<T> > > list
とかね
インデックスのほうが楽だと思うけどな
どちらにせよ、彼が const shared_ptr<T>& ref に何を求めているのか謎だから
これ以上は無意味だね
単にshared_ptr<T>で受けるだけで十分な案件かもしれないしな
0458デフォルトの名無しさん
2015/12/26(土) 13:23:31.82ID:HLaSlD1p参照なんて危なっかしいものを素人に触らせるな
0459デフォルトの名無しさん
2015/12/26(土) 13:26:44.79ID:HLaSlD1pオブジェクト指向をしらないからconst & SP<T>だのvector<SP<SP<T>>>だの正気を疑うようなコード平気で書くようになる
0460デフォルトの名無しさん
2015/12/26(土) 13:36:19.04ID:c6cv0Mwc0461デフォルトの名無しさん
2015/12/26(土) 14:01:01.05ID:g622w7ntプロジェクトにまぎれこんだ素人が事故でオブジェクトを破壊しかねない。
その割りにconst shared_ptrみたいな重要度の低いfinalの効果はあるんだよね。
0462デフォルトの名無しさん
2015/12/26(土) 14:10:39.49ID:HLaSlD1p素人だな
java使いはエンティティと値オブジェクトを使いわける事を知っている
c++erはエンティティと値オブジェクトに分離すべきところを横着して中途半端にconstメソッドを使いクライアントコード側でconstを書き忘れるといったミスを平気でする
0463デフォルトの名無しさん
2015/12/26(土) 14:14:39.93ID:g622w7nt0464デフォルトの名無しさん
2015/12/26(土) 14:23:40.30ID:HLaSlD1pそれは値オブジェクトじゃないだろ
なんか勘違いしてないか
0465デフォルトの名無しさん
2015/12/26(土) 14:33:21.07ID:Xbomr4ek0466デフォルトの名無しさん
2015/12/26(土) 14:37:28.95ID:HLaSlD1p0467デフォルトの名無しさん
2015/12/26(土) 14:51:06.89ID:Sgv0r5+yどっちも同じようなもんだから
&でいいだろ。
分かりやすいし
0468デフォルトの名無しさん
2015/12/26(土) 15:02:49.96ID:pVKld/fI0469443
2015/12/26(土) 17:48:27.63ID:S13iTXsnconst shared_ptr<T>& ref と参照にした理由は、shared_ptr自体のコピーコストを嫌ったためです
(その意味では仰るとおりconst付けるのは無意味でした)
同じ考えで、範囲for文では for (auto& ref : list) と参照で受けるのが半ば習慣になってました
これってforの中でlistの再配置が起こるような処理をしてたら大変なことになってたってことですよね
やばすぎる・・・orz
自分のようなアホは安全のためにも、shared_ptrを受けるときは問答無用でコピーにしたほうがいい気が
0470デフォルトの名無しさん
2015/12/26(土) 21:47:14.83ID:WauQYE2g問答無用とかやってるからアホなんだが?
因果関係が逆だよ
0471デフォルトの名無しさん
2015/12/26(土) 21:50:07.71ID:HLaSlD1p0472デフォルトの名無しさん
2015/12/26(土) 22:33:50.15ID:Xbomr4ekお前が得意気にあさってな知識を披露してる値オブジェクト云々の話じゃないから
0473デフォルトの名無しさん
2015/12/26(土) 22:38:11.83ID:HLaSlD1p分かってないのはお前の方じゃねえかw
0474デフォルトの名無しさん
2015/12/26(土) 22:49:47.83ID:Xbomr4ek0475デフォルトの名無しさん
2015/12/26(土) 22:50:38.59ID:bmbNcMd5論理的思考のできない馬鹿はすっこんでろ。
「アホだから問答無用にする」で正しい。
「問答無用でコピー」はアホであることを確認できる行動ないしはそれ故に馬鹿にされる理由に過ぎない
0476デフォルトの名無しさん
2015/12/27(日) 00:01:46.37ID:A2Nkiipwちょっとまてよ。
shared_ptrだから実体を受けるという話になっているが、
他の型ならやはり参照で受けたいという意識なわけだな。
問題の本質は、要素の追加、削除をする可能性のあるスコープ中でイテレータや参照を覚えてるってこった。
位置がずれるだけでなく、reallocして一族郎党お引越しもありうるんだし。
0477デフォルトの名無しさん
2015/12/27(日) 00:52:18.75ID:tFEpU9wFauto&かautoか以前にイテレータが無効になって繰り返し自体が保証がなくなる場合があるからな
forの中で要素の追加削除をするときは注意しないとダメだよ
0478469
2015/12/27(日) 01:23:29.60ID:eoyCmYYXありがとうございます
肝に命じておきます
深刻なバグを産み出す前に気づけたのは不幸中の幸いかな・・・
0479デフォルトの名無しさん
2015/12/27(日) 07:43:39.99ID:Q7k4qUAc0480デフォルトの名無しさん
2015/12/27(日) 08:34:04.93ID:mCeb/k6uごっちゃにしてconstって発想はまさにJavaでゴスリンが
Stringを参照型にしてしまったことだな。
ヘジ「ちょっとジャバの真似したけどC#のstringは間違いだったわスマンww」
0481デフォルトの名無しさん
2015/12/27(日) 13:58:10.03ID:UbTOh1DFコストを気にするのはいいことだけど、shared_ptrの小さなコストを気にするよりも
vectorの大きなコストを気にした方がいいよ。予測が立てられればreserveで予め確保しておけばいいんだし
0482デフォルトの名無しさん
2015/12/27(日) 17:45:45.90ID:LZ1P+G9zFutility purningのマージンは、
手番側が静止探索中に回復可能な評価値の上げ幅の上限ということで、
チェスだと3 CPぐらいにすれば良いと聞いたのですが、これってpromoteする場合をどう考えてるの?
将棋の場合ですが、成りが絡むと駒得の上げ幅が10 CPを超えることがあります。
(例: FUの価値=1 CP、TOの価値=12 CPでFUを捕獲した場合、上げ幅は-1 + 12 + (-CP + 1.1 CP) = 11.1 CP)
実験する限り上げ幅5 CP超えは1局あたり3回ぐらいしか現れないのでできれば5 CPぐらいのマージンで済ませたいんですが
割合的にはレアケースとはいえほぼ確実に発生する10 CP超えのケースにどう手を打つべき?
0483482
2015/12/27(日) 17:47:11.74ID:LZ1P+G9z0484デフォルトの名無しさん
2015/12/27(日) 18:53:37.77ID:qJI8FLcoそれよりもっと上の設計段階を見直すべき
c++技術者は細いところばかり気にして設計がお粗末すぎる
これで実行効率が如何の斯うのと言うのだから呆れるよ
0485デフォルトの名無しさん
2015/12/27(日) 22:06:17.84ID:V9zzXkirauto x = 0
for(auto x = 0; x < 8; x++)
{
// do something
}
x二重定義とかセミコロン抜けとかそういう単純な話なのかしら
0486デフォルトの名無しさん
2015/12/27(日) 22:11:30.39ID:VUJqwlMv0487デフォルトの名無しさん
2015/12/27(日) 22:12:00.04ID:R1VFQ9YE0488デフォルトの名無しさん
2015/12/27(日) 22:14:07.89ID:R1VFQ9YE0489デフォルトの名無しさん
2015/12/27(日) 22:16:20.42ID:PcNcsJH/c++erってくだらないことばっかり気にしてホント馬鹿
0490デフォルトの名無しさん
2015/12/27(日) 22:25:50.30ID:wEcqjPTL0491デフォルトの名無しさん
2015/12/27(日) 22:38:40.47ID:tFEpU9wF0492デフォルトの名無しさん
2015/12/27(日) 22:39:18.67ID:ZMHZ9AEQどうしてそう息を吸って吐くように嘘をつくのか
0493デフォルトの名無しさん
2015/12/27(日) 22:43:22.82ID:R1VFQ9YE0494デフォルトの名無しさん
2015/12/27(日) 22:54:11.10ID:ZMHZ9AEQそうかそうか
でもここはC++スレだ
関係無い言語の話題はスレ違いなので去れ
0495デフォルトの名無しさん
2015/12/27(日) 23:19:43.32ID:UbTOh1DF見直すべきかどうかはその設計を見てみないとなんとも言えないな…
0496デフォルトの名無しさん
2015/12/27(日) 23:53:02.38ID:CfNITRczブーメランというより定常波か
ずーっとやっとれ
0497デフォルトの名無しさん
2015/12/28(月) 00:13:01.29ID:SsjmFHW7コンパイルエラーにならないからうっかりミスしてしまうと言う問題の紹介だろうに
「変数名変えれば終わり」だなんて
どれだけお前は頭が悪いんだ
0498デフォルトの名無しさん
2015/12/28(月) 00:26:31.38ID:a1uFS38y馬鹿なC++erはついうっかりやっちゃうんだなあ
javaエンジニアはまずこんなくだらないループは書かないから安心だ
0499デフォルトの名無しさん
2015/12/28(月) 00:32:56.39ID:V87dzSuE一体どいつがこんな糞コード書くんだよ?
サンプルにしても質が悪すぎるだろ
0500デフォルトの名無しさん
2015/12/28(月) 00:39:28.50ID:j++bijmE0501デフォルトの名無しさん
2015/12/28(月) 00:50:57.95ID:Fltzxhamthrow エラー;
// OKだぜ
0502デフォルトの名無しさん
2015/12/28(月) 00:55:21.58ID:ESQO+1YW0503デフォルトの名無しさん
2015/12/28(月) 01:03:24.73ID:o6lgZwvb関数を呼び出すと、呼び出しのコストが掛かるから、出来るだけ関数マクロ化したったぜ!
って、ドヤ顔で先輩に言われた時には殴り飛ばす一歩手前まで行ったわ
速くなるかもしれんがメンテしにくいし
頭きたから怒り気味に上から目線で実測させたら遅くなっててワロタ
どうもキャッシュに乗りにくくなってしまった模様
0504デフォルトの名無しさん
2015/12/28(月) 01:06:12.96ID:O+Lw46iu気分を害してしまい申し訳ありません。
よかったら飲んで下さい。
つ牛乳
0505デフォルトの名無しさん
2015/12/28(月) 07:07:48.57ID:rt8g75CWインラインにするだけで充分だよな。
でかい関数は、そもそも意味がないし。
0506デフォルトの名無しさん
2015/12/28(月) 10:51:22.76ID:v1wGH8h7キャッシュマシンしかないご時世に、細切れのオブジェクトをバラバラのタイミングで作って捨てて、
仮想関数で間接参照の嵐をふかせまくってたら遅くなってしかたないわな。
0507デフォルトの名無しさん
2015/12/28(月) 14:18:58.41ID:UMA2BrCLint a = 2;
if( 1 < a < 3 )
普通に考えたら無理ぽいですけど
0508デフォルトの名無しさん
2015/12/28(月) 14:34:46.39ID:i05gjBFH0509デフォルトの名無しさん
2015/12/28(月) 14:42:43.52ID:A05iBa2U0510デフォルトの名無しさん
2015/12/28(月) 14:57:12.64ID:i05gjBFHint value;
public:
Int(x) : value(x) {return;}
int get() {return value;}
};
class Bool {
bool premise;
int rhs;
public:
Bool(bool b) : premise(b) {return;}
Bool(int l, int r) : premise(l<r), rhs(r) {return;}
operator bool() const {return premise;}
Bool operator<(int factor) const {return premise? Bool(rhs, factor): Bool(false);}
};
Bool operator<(int lhs, Int rhs) {
return Bool(lhs, rhs.get());
}
Int a = 2;
if (1 < a < 3) { ... }
0511デフォルトの名無しさん
2015/12/28(月) 14:58:53.94ID:UMA2BrCLやっぱそんな形しかないですよねぇ
0512デフォルトの名無しさん
2015/12/28(月) 15:01:50.76ID:UMA2BrCLおぉ、こんなやり方もあるんですね
勉強なります
0513デフォルトの名無しさん
2015/12/28(月) 15:05:08.13ID:i05gjBFH一旦何かのクラスのインスタンスを作って演算子のオーバーロードでゴリッと解決する方法は
そこまで可読性上がらない割に難解で拡張性に乏しいのがちょっと難点だけどね。
0514デフォルトの名無しさん
2015/12/28(月) 23:53:23.55ID:JA4sOSJI0515デフォルトの名無しさん
2015/12/29(火) 00:16:02.70ID:MnDqjltQ0516デフォルトの名無しさん
2015/12/29(火) 00:19:40.24ID:Rykim96A数学とかで需要ありそう・・・
もしかしてMatlab様がもうやってるとか?
0517デフォルトの名無しさん
2015/12/29(火) 01:53:47.27ID:RQT/AIDK0518デフォルトの名無しさん
2015/12/29(火) 02:14:10.60ID:xHO6+WFY苦労してコスト上げて可読性悪くするんだもんな
0519デフォルトの名無しさん
2015/12/29(火) 02:26:12.79ID:VrB6xw8N0520デフォルトの名無しさん
2015/12/29(火) 05:17:34.81ID:q3Z51bKg理解できないおまえがバカなのにな
0521デフォルトの名無しさん
2015/12/29(火) 06:26:44.67ID:bvPeSDE7if (low < var < high) とは表記法が違うが
Scheme だと下のように書ける。
(< val1 val2 ...)
全対象が左から小さい順に並んでたら #t (真) が返る。
0522デフォルトの名無しさん
2015/12/29(火) 07:15:26.63ID:XNVDRgDPわろた
この業界じゃ原始人の発想だろそれw
0523デフォルトの名無しさん
2015/12/29(火) 07:47:50.10ID:/0pFLRObminじゃないからfoldしているわけではないよね。なんか不思議な感じだ。
0524デフォルトの名無しさん
2015/12/29(火) 08:20:55.53ID:x2QuPiOh例えばx < y <= z はx < y and y <= z と等価になります。
http://docs.python.jp/2/reference/expressions.html
0525デフォルトの名無しさん
2015/12/29(火) 09:40:23.32ID:ZD2eNqW/そんなこと考えるな!
0526デフォルトの名無しさん
2015/12/29(火) 10:59:26.46ID:pcIQgVwC0527デフォルトの名無しさん
2015/12/29(火) 11:04:03.32ID:RwgMy6a6if ( !(1.0 <= distance && distance <= 100.0) )
throw エラー;
0528デフォルトの名無しさん
2015/12/29(火) 12:35:54.08ID:6RBxEQHHfor (size_t i = 0; i < l.size(); ++i)
というのをよくやるんですが、size()は毎回評価されちゃうんでしょうか?
今時のコンパイラは賢く定数に置き換えてくれたりしないんでしょうか?
0529デフォルトの名無しさん
2015/12/29(火) 12:38:01.08ID:6RBxEQHH0530デフォルトの名無しさん
2015/12/29(火) 12:53:18.17ID:TUTY/6iGstd::vectorの場合に限ると、-O2付けた出力はこんな感じになったよ。
https://gist.github.com/pixie-grasper/150777a10d70f0abbbf7
評価されるどころか、vectorクラスのprivateメンバから値持ってくる感じのコードに最適化されるっぽい。
0531デフォルトの名無しさん
2015/12/29(火) 13:26:27.57ID:TUTY/6iG/usr/include/c++/4.8/bits/stl_vector.h:642-646
// [23.2.4.2] capacity
/** Returns the number of elements in the %vector. */
size_type
size() const _GLIBCXX_NOEXCEPT
{ return size_type(this->_M_impl._M_finish - this->_M_impl._M_start); }
こんな具合。
あと、_M_implはvectorから見てprotectedだったわ。
0532デフォルトの名無しさん
2015/12/29(火) 14:15:30.87ID:5o0CYWecたぶん毎回評価されず、最初の1回だけ。
ループ中に、コンテナの要素を削除して、エラーになるか試してみ
Javaでは、forループではエラーになるが、
Iteratorではエラーにならない
forループ構文とコンテナは、無関係
一方、Iteratorでは要素を削除すると、sizeも変更されて、
要素数の変化に対応している。
つまり、Iterator構文とコンテナは直結している
0533デフォルトの名無しさん
2015/12/29(火) 14:28:50.16ID:TUTY/6iGいや、汗を見る限りじゃ毎回評価されてる。
ループ部分を抽出するとこうなるんだけど、[rsp+8]と[rsp+16]にpointer型の
vectorから参照可能なbeginみたいな奴とendみたいな奴が入ってて、引き算したりとか右シフトしたりとかしてsize()の値を計算してる。
.LBB0_4:
movl $.L.str, %edi
callq puts
incq %rbx
movq 8(%rsp), %rdi
movq 16(%rsp), %rax
subq %rdi, %rax
sarq $2, %rax
cmpq %rax, %rbx
jb .LBB0_4
詳細は>>530
0534デフォルトの名無しさん
2015/12/29(火) 14:33:07.20ID:yBBCkdZVまあ、callが入ったら駄目だな。
0535デフォルトの名無しさん
2015/12/29(火) 14:40:40.47ID:TUTY/6iGでもif (*it == 0) {l.pop_back();}みたいな事をループに含めたら
ループ中にしっかり判定するように戻った。
最適化の理屈はわかるが理解は出来そうもないな。
0536デフォルトの名無しさん
2015/12/29(火) 15:08:32.55ID:zasxVKJk手元の環境だと再現しないからコンパイラのバージョン教えて欲すぃ
>>534 が言うように puts を call してるから static でないグローバル変数について
最適化がかかるとは考えづらいんだけど
0537536
2015/12/29(火) 15:10:58.33ID:zasxVKJkグローバル変数じゃないよね…
0538デフォルトの名無しさん
2015/12/29(火) 15:14:35.21ID:TUTY/6iGごめん、もう一回確認したらどっちも毎度評価されてた。
間違って(auto i = 0ul; i < l.size(); i++)の代わりに(auto it = l.begin(); it != l.end(); ++it)のコード眺めてたらしい。
本当にごめんよ。
ちなみにバージョンの方はこんな具合
$ clang --version
clang version 3.7.0 (tags/RELEASE_370/final 251906)
Target: x86_64-unknown-linux-gnu
Thread model: posix
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
Copyright (C) 2013 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.
0539デフォルトの名無しさん
2015/12/29(火) 15:24:15.64ID:TUTY/6iGauto l = vec();
として、std::vector<int> vec();は宣言のみにした。
多分vec関数の中でスレッドを生成して別スレッドでベクタのサイズが変わるような例が
最適化を妨げてるんだと思う。
ので、試しに
static auto vec(int l) {
std::vector<int> ret(l);
for (auto i = 0ul; i < ret.size(); i++) {
ret[i] = rand();
}
return ret;
}
して
auto l = vec(argc);
して試してみたら、-O2でl.size()が1度だけ呼ばれるようになった。
0540デフォルトの名無しさん
2015/12/29(火) 15:37:43.90ID:TUTY/6iGもっと賢く最適化してください・・・・・・
色々弄った結果、どうも宣言だけの関数の戻り値には最適化が効きにくいみたい。
まさかコンパイラが1つのファイルに全てを詰め込むスタイルを推奨してたとは。
0541デフォルトの名無しさん
2015/12/29(火) 15:46:32.38ID:Wh0+WWK1スレッドも関係ないし
0542デフォルトの名無しさん
2015/12/29(火) 16:20:44.57ID:zasxVKJk#include <cstdlib>
#include <vector>
std::vector<int> vec() { return std::vector<int>(rand()); }
スレッド云々は関係ないとしても、ループ内で size() と puts() しか呼んでないんだから
これくらいの最適化くらいはして欲しい気が
0543デフォルトの名無しさん
2015/12/29(火) 18:05:58.76ID:FzuTDc5z>ループ中に、コンテナの要素を削除して、エラーになるか試してみ
>>528の最適化は結果的には直感に一致してsize()が定数に置き換わるが、
その結果に至るまでにコンパイラの考えはそれほどストレートではない
削除するコードをループの中に入れるや否や、定数だったsize()はループ毎に呼び出されるsize()に変わるであろう、
ていうかコンパイラにとって、size()は「どんな副作用があるかわからない」外部リンケージの関数に見えるのがデフォ
size()がconstメソッドであっても同じ。C++の言語仕様からは、constメソッドを無条件に定数に置き換えてよいという結論が導けない。
ただ、>>528のケースでは幸いsize()はクラステンプレートのメンバなので、
インライン展開されてループ内で呼び出しの結果が一切変化しないことがワカルから運よく定数にできる
0544デフォルトの名無しさん
2015/12/29(火) 18:10:39.31ID:zasxVKJkまったくその通りだと思うけど、>>533- で言われてるみたいに
最適化が阻害されてるのはなんで?
0545デフォルトの名無しさん
2015/12/29(火) 18:13:13.05ID:FzuTDc5z(1) 関数呼び出しに副作用が無いことをコンパイラに納得させる書き方
(2) ポインタを使用した場合、ポインタのaliasが関数内に存在しないことをコンパイラに納得させる書き方
は少なくとも必須、
(1)は>>540の通り、1つのファイルに全て詰め込むことで達成される
(2)はしばしばベンダー独自の言語拡張に頼らねば実現できぬ(__restrictとか__declspec(noalias)とかetc.)
なお(念のため、)(1)、(2)とものマルチスレッドは関係なく、普通にシングルスレッド状況で問題になる
0546デフォルトの名無しさん
2015/12/29(火) 18:20:19.70ID:FzuTDc5zプログラムとか書いたことの無い素人なのでようわからんが、
多分コンパイラから見て何するかわからない関数puts()が呼ばれていることから、
puts()がIteratorと同じポインタを握っていてsize()の戻り値に相当するprivateメンバを
puts()が書き換える可能性を恐れて
毎回size()の戻り値に相当するprivateメンバをメモリから読み出すコードになるんだろJK、
つまり>>533の(1)と(2)の複合技(悪い意味で
0547デフォルトの名無しさん
2015/12/29(火) 18:29:22.06ID:zasxVKJkうん、うえのコードだと、size(void) は条件を満たしてるよね
puts(const char*) もそうだと思うんだけど、
実際には size() をインライン展開したものがループ内にあるじゃん
(>>533 って要するに (vec.end() - vec.begin()) / sizeof(T) ってことだよね?)
なんでこれがループ外に追い出されないのかなって
>>546
定数の char ポインタとスタック中に置かれたオブジェクトのメンバとの間で
aliasing が起きうるとコンパイラが仮定してるってこと?
納得できるようなできないような……
定数文字列をどこに置くかはリンカが決めることだから
コンパイラとしては aliasing の可能性を否定できない、とか?
0548デフォルトの名無しさん
2015/12/29(火) 18:35:17.18ID:FzuTDc5zプログラムとか書いたことの無い素人なのでようわからんが、
>定数の char ポインタとスタック中に置かれたオブジェクトのメンバとの間で
>aliasing が起きうる
ということではなくて、puts()の中身についてコンパイラがなんら仮定を置けないことに由来するもの
ひょっとしたら、どっか別の翻訳単位において、グローバル変数か何か経由で
vectorのアドレスがputs()に筒抜けなのかもしれない、
とコンパイラは想定せざるを得ない。それが合法なコードとして実現可能な以上は、、、
0549547
2015/12/29(火) 19:03:15.94ID:zasxVKJkむむむ 今の場合は値返しだから関係ないじゃんと思ったけど、
(1) vector は普通ポインタを保持してて、そのポインタが unique であることをコンパイラは仮定できない
(2) コンパイラは puts が何をするのか全く知らない。もしかしたら (1) のポインタがグローバルに置いてあって
それを使って何かしているかも知れない(とコンパイラは考えざるを得ない)
という理解でおk?
0550>>528
2015/12/29(火) 19:27:40.31ID:6RBxEQHHなんか色々調べてもらってすいません
言い忘れましたが、ファイルからデータを読んでvectorにpush_backするつもりです
なので、サイズが定数になることはありえないですよね
せめてforスコープ内でvectorのサイズが変わらないことをコンパイラが判断して
一回目にsize()を呼び出した後はその値をうまくキャッシュみたいに保持してくれたら
嬉しいんですけど、さすがに無理ですかね
まあsize()のコストが気になるケースってそうそうないかな
0551デフォルトの名無しさん
2015/12/29(火) 19:44:22.68ID:RQT/AIDK悩むだけ無駄
0552デフォルトの名無しさん
2015/12/29(火) 20:32:06.11ID:Wh0+WWK10553デフォルトの名無しさん
2015/12/29(火) 20:33:41.23ID:oa6bBwaZほんとこれ
0554デフォルトの名無しさん
2015/12/29(火) 20:49:36.07ID:mJLVAknrreturn s;
}
String s = String("");
String str = validate(s);
&s == &str; // true
上記のコードを右辺値に対しても実現したいのですが、C++ではそもそも可能でしょうか。
以下の方法を試しましたが、どうしてもムーブコンストラクタが必要になります
左辺のインスタンスをコピー無しでそのまま右辺に渡したいのです
String &&validate(String &&s) {
return std::move(s);
}
String str = validate(String(""));
// コピーコンストラクタもデストラクタも呼ばれないようにしたい
0555デフォルトの名無しさん
2015/12/29(火) 21:03:53.91ID:mJLVAknr右辺のインスタンスをコピー無しでそのまま左辺に渡したいのです
右辺でインスタンスを生成している以上、アドレス上にはデータとして存在しているはずなので
C++なら何かしらの方法があると思って左辺値やらムーブセマンティックをずっと調べていたのですが
ここにきて躓いてしまいました。
0556デフォルトの名無しさん
2015/12/29(火) 21:10:08.88ID:ZD2eNqW/0557デフォルトの名無しさん
2015/12/29(火) 21:13:03.67ID:6vdeklix0558デフォルトの名無しさん
2015/12/29(火) 21:20:03.79ID:ZD2eNqW/ムーブとかコピーとか指示しなくてもコンパイラが自動で効率の良い方に判断して決めればいいだろ
0559デフォルトの名無しさん
2015/12/29(火) 22:23:47.63ID:6YBnwxxm0560デフォルトの名無しさん
2015/12/29(火) 22:29:14.30ID:DyLV+MBH> &s == &str; // true
???
0561デフォルトの名無しさん
2015/12/29(火) 22:29:19.92ID:RwgMy6a6http://ideone.com/EulRlT
0562デフォルトの名無しさん
2015/12/29(火) 23:24:13.37ID:B7dg+s8Vだめだぞそのコード
無効な参照を生成してるからな
ttp://ideone.com/Egnenh
そもそも>>554の
String &&validate(String &&s) {
return std::move(s);
}
が潜在的な危険性が高いものだって話だが
0563デフォルトの名無しさん
2015/12/29(火) 23:54:01.51ID:RwgMy6a6おっとそうだな
何故ムーブコンストラクターを使うのがダメなのかはさておいて
ムーブコンストラクター無しだと厳しいな
0564デフォルトの名無しさん
2015/12/29(火) 23:58:05.41ID:6YBnwxxm0565デフォルトの名無しさん
2015/12/30(水) 02:09:58.01ID:uSM4nvoL質問の意味がよくわからんが素直に右辺値参照で拘束すればいいんじゃないの
String &validate(String &s) {
return s;
}
String && s = String(""); // 右辺値
String & str = validate(s);
&s == &str; // true
0566デフォルトの名無しさん
2015/12/30(水) 02:16:52.49ID:Ov2mfylLそんなもん気にすんなよ
0567デフォルトの名無しさん
2015/12/30(水) 09:06:45.17ID:KphNVLo30568デフォルトの名無しさん
2015/12/30(水) 10:41:20.22ID:zgXxrRY50569デフォルトの名無しさん
2015/12/30(水) 10:46:29.16ID:S3GUoFHZ0570デフォルトの名無しさん
2015/12/30(水) 10:52:55.95ID:321WQPIr0571デフォルトの名無しさん
2015/12/30(水) 11:10:43.39ID:gI1ebqZA0572デフォルトの名無しさん
2015/12/30(水) 11:16:22.37ID:D4zykomnなんか回避策ないものか
0573デフォルトの名無しさん
2015/12/30(水) 11:34:21.87ID:Y/XxvHTU0574デフォルトの名無しさん
2015/12/30(水) 11:39:19.42ID:gI1ebqZA3分で考えた。確認はしてない
http://ideone.com/yJneTF
0575デフォルトの名無しさん
2015/12/30(水) 11:55:34.57ID:K47H7mbUできれば関数の戻り値等も一時拘束無しで、インラインで記述したいのです。
String a = validate(buildString("a"));
String b = validate(buildString("b"));
色々試しましたが、どうしても戻り値の代入タイミングでなにかしらのアクションが必要になるようです。
String str = validate(String("")); // 代入時Stringのコピーコンストラクタが呼ばれてしまう
String &&str = validate(String("")); // 同じ参照が渡るが代入時にデストラクタが呼ばれてしまう
0576デフォルトの名無しさん
2015/12/30(水) 11:59:27.37ID:K47H7mbU右辺値と左辺値が同じアドレスの物であることを保証する仕組みがあれば、実現は可能なのかもしれません。
0577デフォルトの名無しさん
2015/12/30(水) 12:00:16.50ID:gI1ebqZA>>574の [i=i] は [&,i=i] の間違い。
実用的じゃないからどうでもいいけど
0578デフォルトの名無しさん
2015/12/30(水) 12:24:09.10ID:gI1ebqZA出来ないと否定する理由を聞きたいものだ
String && s = String(""); // 右辺値
0579デフォルトの名無しさん
2015/12/30(水) 12:47:19.38ID:CQCHxdlRほんとバカだな
0580デフォルトの名無しさん
2015/12/30(水) 12:57:29.01ID:8m5+SCRD0581デフォルトの名無しさん
2015/12/30(水) 13:04:03.82ID:CQCHxdlR
0582デフォルトの名無しさん
2015/12/30(水) 13:04:20.00ID:8RoCccmO一時オブジェクトの寿命について調べた方が良いよ
それが危険な考えだとわかる
そのStringクラスのムーブコンストラクタが十分高速ならば、そんなまどろっこしいことを考える必要は無い
(それこそStringの中にポインターが一つしか無いような場合等)
0583デフォルトの名無しさん
2015/12/30(水) 13:29:51.94ID:K47H7mbU出来ればワンラインで記述する方法を見つけたかったのですが、もともとの目的は処理の高速化であったため、
>>578>>565さんの方法もしくは当初の参照を使う方法を採用することにします。
String &&s = String("");
String &&str = validate(std::move(s));
&s == &str // true
0584デフォルトの名無しさん
2015/12/30(水) 13:35:17.89ID:CQCHxdlR最期の&が 文字型の参照だからよう ダメだろそれ
0585デフォルトの名無しさん
2015/12/30(水) 13:45:36.21ID:CQCHxdlRString &&s = str ;
String &&str = validate(std::move(s));
&s == &str // true
0586デフォルトの名無しさん
2015/12/30(水) 13:59:44.67ID:K47H7mbU参照を用いた本来の方法が一番よさそうですね。
String &validate(String &s) {
return s;
}
String s = String("");
String &str = validate(s);
&s == &str; // true
0587デフォルトの名無しさん
2015/12/30(水) 14:11:32.39ID:gI1ebqZAクレイジーなコードで混乱させんなボケ
>>586
>>565の完成形から劣化させんなボケ
そのStringクラスはムーブコンストラクターがないんだろ?
(575でコピーコンストラクターが呼ばれると書いてるんだから)
0588デフォルトの名無しさん
2015/12/30(水) 14:15:17.23ID:CQCHxdlR0589デフォルトの名無しさん
2015/12/30(水) 14:25:17.74ID:Y/XxvHTU0590デフォルトの名無しさん
2015/12/30(水) 14:32:43.34ID:PBmz2gbU0591デフォルトの名無しさん
2015/12/30(水) 14:36:15.67ID:gI1ebqZAそれはですね
>>585がアホで理解してない上にアホだから
コンパイルも通らない出鱈目なコードを書いてみただけなんです
0592デフォルトの名無しさん
2015/12/30(水) 14:50:11.85ID:CQCHxdlRString retainedstr = String("") ; // 実体を保持
String &&s = retaiinedstr ;
String &&str = validate(std::move(s));
&s == &str // true
0593デフォルトの名無しさん
2015/12/30(水) 14:51:54.26ID:CQCHxdlR実用性あんのかよw
0594デフォルトの名無しさん
2015/12/30(水) 14:52:25.29ID:gI1ebqZAいまだにコンパイルすら通らない
とんちんかんなウンコードを投下しちゃって
0595デフォルトの名無しさん
2015/12/30(水) 14:58:47.36ID:CQCHxdlRString retainedstr = String("") ; // 実体を保持
String &&s = retainedstr ;
String &&str = validate(std::move(s));
&s == &str // true
0596デフォルトの名無しさん
2015/12/30(水) 15:00:47.53ID:gI1ebqZAコンパイルが通るか確認しようとしないんだから…
このウンコめ!
0597デフォルトの名無しさん
2015/12/30(水) 15:01:13.41ID:CQCHxdlR
0598デフォルトの名無しさん
2015/12/30(水) 15:25:53.68ID:gI1ebqZA腹痛ぇ
>>597
あのな、右辺値参照は左辺値で初期化できないんだよ
ついでに String && x = String(""); は
一時オブジェクトがxのスコープだけ延命されるからretainedstrを別の変数に入れるのが全く無駄なんだよ
ついでにmoveに渡す変数はString&&型である必要がないから、やはりString&&を用意することが無駄なんだよ
ついでに一度ムーブした残りカス(変数s)に触れるのは一般的に悪いこととされてるんだよ
わかったら一週間穴にこもってろ
0599デフォルトの名無しさん
2015/12/30(水) 15:33:30.50ID:CQCHxdlR0600デフォルトの名無しさん
2015/12/30(水) 19:09:52.98ID:M6A8aZEH0601デフォルトの名無しさん
2015/12/30(水) 19:12:48.26ID:D4zykomnwxWidgets
0602デフォルトの名無しさん
2015/12/30(水) 19:21:13.20ID:Q+VQ416F0603デフォルトの名無しさん
2015/12/30(水) 20:10:57.71ID:Q+VQ416Ffor(size_t i=0, N=l.size(); i<N; i++)と言いたかったんだろうけど
0604デフォルトの名無しさん
2015/12/30(水) 20:42:43.53ID:gI1ebqZA右辺値参照はアプリケーションプログラムはともかく
ライブラリなら分野を問わず常用
ただ右辺値参照を一時オブジェクトで初期化して延命するのは
糞スレの糞レスぐらいでしか使い道がない
>>574のテクニックもしかり
0605デフォルトの名無しさん
2015/12/30(水) 21:38:59.41ID:M6A8aZEHQt や wxWidget ってイマドキなんですか
イベントハンドラをラムダで渡したり、他の言語 (Python とか Ruby とか) と相互運用したりできる?
0606デフォルトの名無しさん
2015/12/30(水) 21:48:21.07ID:QbRR4fzN0607デフォルトの名無しさん
2015/12/30(水) 23:21:19.30ID:M6A8aZEH実行中にスクリプト側から動的に GUI の項目を操作したり ハンドラをスクリプトで記述したりできて、
かつそのスクリプトを C++ 側から実行時にアタッチ / デタッチできること
……かなあ
全部 C++ で作るのはめんどいししんどいよ
0608デフォルトの名無しさん
2015/12/30(水) 23:53:48.02ID:JlgYQswX0609デフォルトの名無しさん
2015/12/31(木) 00:00:12.94ID:6VYBPGtehttp://ideone.com/hTB42J
書いた奴の自己満足フレームワーク
0610デフォルトの名無しさん
2015/12/31(木) 00:03:18.17ID:6VYBPGte0611デフォルトの名無しさん
2015/12/31(木) 00:06:15.09ID:Lrxj+qUj0612デフォルトの名無しさん
2015/12/31(木) 00:23:06.96ID:PyyPCfRY要らなくなったラムダはイベントハンドラから削除しなければならないんだけど
削除したオブジェクトをラムダがキャプチャしてたら不味いから
同じタイミングで削除しなきゃならないんだけど
削除しようと思うと削除したい対象のラムダを探索しなきゃならないわけだけど
どうせ、thisポインタをキーにしておくぐらいしか、うまい方法が無いわけだけど
0613デフォルトの名無しさん
2015/12/31(木) 06:35:28.32ID:hwCO+aFi0614デフォルトの名無しさん
2016/01/01(金) 00:05:21.74ID:PDfM8fXt0615デフォルトの名無しさん
2016/01/01(金) 00:09:07.31ID:9DJLBWi4GCで救えるのはイベントハンドラーの登録先も不要になったときだけ
0616デフォルトの名無しさん
2016/01/01(金) 00:27:37.65ID:dF7ELeO+0617デフォルトの名無しさん
2016/01/04(月) 09:25:44.20ID:RY1Mzif40618デフォルトの名無しさん
2016/01/04(月) 09:36:05.09ID:oefJgHjC0619デフォルトの名無しさん
2016/01/04(月) 09:52:03.42ID:RY1Mzif40620デフォルトの名無しさん
2016/01/04(月) 10:47:18.41ID:d/OgN9t00621デフォルトの名無しさん
2016/01/04(月) 12:36:29.20ID:0Z0E4/iTHogeのprivateにアクセス出来なくね?
0622デフォルトの名無しさん
2016/01/04(月) 12:53:28.32ID:x5rHK6YBusing HogeCopy = Hoge;
0623デフォルトの名無しさん
2016/01/04(月) 12:55:05.98ID:JG29ScMDコピーってprivateにアクセスする必要ある?
そもそも型のコピーってなんじゃ
0624デフォルトの名無しさん
2016/01/04(月) 13:27:37.05ID:ryo9pTzs別名をつけるメリットは思いつくけど
コピーするメリットが全く思い浮かばない。
0625デフォルトの名無しさん
2016/01/04(月) 15:57:11.58ID:RY1Mzif4>>624 型のコピーとコピーじゃないのによってテンプレートの特殊化を別物にするとか、intに新しい演算を定義するとか。
0626デフォルトの名無しさん
2016/01/04(月) 16:17:45.65ID:31VDmaGaもしかしてこのスレの強者は少なくともコンパイルエラーなんてヘマはしないとか?
0627デフォルトの名無しさん
2016/01/04(月) 18:03:58.04ID:FhMj24vi0628デフォルトの名無しさん
2016/01/04(月) 18:41:52.04ID:PWQd7yEq?
特殊化できる時点で別の型やん…
0629デフォルトの名無しさん
2016/01/04(月) 18:59:21.74ID:RY1Mzif40630デフォルトの名無しさん
2016/01/04(月) 19:19:01.31ID:sMTgy5ar現時点ではそのような機能は無い
0631デフォルトの名無しさん
2016/01/04(月) 20:58:24.95ID:PWQd7yEqそれをコピーって言ってるの?
オレオレ表現にも程があるぞ…
0632デフォルトの名無しさん
2016/01/04(月) 21:00:04.95ID:PWQd7yEq0633デフォルトの名無しさん
2016/01/04(月) 21:53:48.21ID:lELbBk3Mコピーと言ってるんだから別の型に決まってるだろ
日本語を勉強して出直せ
0634デフォルトの名無しさん
2016/01/04(月) 23:10:05.98ID:IfH9xfDwキタ━━━━(゚∀゚)━━━━!!
0635デフォルトの名無しさん
2016/01/05(火) 02:51:49.34ID:C4wviD0G空のクラスに継承したんじゃ駄目なんだろうか
0636デフォルトの名無しさん
2016/01/05(火) 03:01:52.60ID:qdeLL6th0637デフォルトの名無しさん
2016/01/05(火) 04:16:47.81ID:h4uipHpMstrong typedefとかopaque aliasとか言ってくれないと。
0638デフォルトの名無しさん
2016/01/05(火) 08:19:48.66ID:KIPOXvA0たいていの言語でできるでしょ
型定義の部分選択して ctrl-C ctrl-V …
0639デフォルトの名無しさん
2016/01/05(火) 09:28:32.45ID:LntnFA7dintとlongが同一ビット数なら同一だと言えるのかね? やれることは一緒だし。
そういう関係を一般的に作り出す方法は考えつかないなあ。
ちなみにVC++で確認してみたらintと__int32でオーバーロードすることは出来なかった。
0640デフォルトの名無しさん
2016/01/05(火) 12:44:07.71ID:bgpEtT/U爆笑した
0641デフォルトの名無しさん
2016/01/05(火) 16:48:35.45ID:zdhQndDPC++はオワコン
0642デフォルトの名無しさん
2016/01/05(火) 17:11:18.29ID:qdeLL6th0643デフォルトの名無しさん
2016/01/05(火) 18:44:58.55ID:7Q2tXWc20644デフォルトの名無しさん
2016/01/05(火) 19:12:54.90ID:Woj1scU2読んでないけど戦慄した
0645デフォルトの名無しさん
2016/01/05(火) 20:21:52.49ID:pdn2jg8d継承で十分だろ。
もしかしてJavaScriptのプロトタイプのこと言ってるのか?
0646デフォルトの名無しさん
2016/01/05(火) 21:16:44.23ID:00c582j0googleあたりはjavaもc#もswiftも超える独自言語を手に入れたいはず。
dirt?go?何それ美味しいの?
0647デフォルトの名無しさん
2016/01/05(火) 21:18:38.17ID:Nzvsp30A0648デフォルトの名無しさん
2016/01/05(火) 21:18:43.75ID:R3czB2hZ良くわからないから、君の所望する機能が実装されている具体的な言語を教えてくれまいか?
0649デフォルトの名無しさん
2016/01/05(火) 22:54:08.85ID:7Q2tXWc2Dはその愚を犯したのかもしれないな。
C#とかも危なそうに見えるんだが設計が良いのかGUIの利便性を追求したというセールスポイントが良かったのか?まだ元気。
Javaもマルチプラットフォームがウケてるのかな?
Dのセールスポイントがハッキリしないという事かもしれない。
型のコピーって何?
0650デフォルトの名無しさん
2016/01/05(火) 23:35:37.60ID:WmZ+DE/+流行るとか言ったやつ誰だよ
0651デフォルトの名無しさん
2016/01/05(火) 23:51:07.57ID:D1dQyGLj0652デフォルトの名無しさん
2016/01/06(水) 00:17:50.87ID:dKGWEjRgそのどちらも外してるだろ文盲
>>643
妄想キチガイは去れ
>>645
お前の程度の低いオツムでは十分かも知れないが同意は求めない方がいい。
Aと別の型Bを作ったのにB&がA&にキャスト出来てしまったらおかしいだろ低能
0653デフォルトの名無しさん
2016/01/06(水) 00:37:31.38ID:5UG3hvjQあくまでも「既存の任意の」型Aに対してそのコピーとなる型Bを作りたい、しかもソースコードコピペ改変ではなく、
ということだったら答えは「C++では無理」だと思う。
それができるように設計した型に対してだったらできるだろうけど。
0654デフォルトの名無しさん
2016/01/06(水) 00:59:11.25ID:NeF0se+20655デフォルトの名無しさん
2016/01/06(水) 02:23:54.37ID:kBV+7dn0C言語とソースコードレベルで互換性が無かったから
具体的にはCのヘッダをそのまま読み込めなかったから
有志の人がCのヘッダをDに移植しまわってるけど
そんな怪しげなものを使いたいとは思わないだろう
0656デフォルトの名無しさん
2016/01/06(水) 08:36:21.49ID:KjcuT4OLコケた原因はひとえに絶え間ない破壊的変更のせい
ライブラリも入門サイトもせいぜい半年でなぎ倒される
誰がそんなもの使うか
0657デフォルトの名無しさん
2016/01/06(水) 08:46:49.87ID:/XlzX9bH0658デフォルトの名無しさん
2016/01/06(水) 11:54:46.98ID:6VagEy4C下記のサイトを参考に電卓のプログラミングを作成しているのですが、添付画像の黄色枠で囲っている部分では何故if文で{}が用いられていないのかがわからないので教えて頂きたいです。
http://www5b.biglobe.ne.jp/~suugaku/vc++kougi/kiso/dai6koudai7wa.html
http://i.imgur.com/cU9edjZ.jpg
0659デフォルトの名無しさん
2016/01/06(水) 12:16:44.47ID:QNndC4zW0660デフォルトの名無しさん
2016/01/06(水) 13:00:25.49ID:zF3cauCRif (y2==0)
z=z&10;
と書いてもいいお。
0661デフォルトの名無しさん
2016/01/06(水) 13:39:31.62ID:03yrwXIOそれバグの温床だから
0662デフォルトの名無しさん
2016/01/06(水) 13:41:09.64ID:T4CebiEs初心者がいきなり C++/CLI はやめた方がいいと思うぞ
C++ を覚えたいのなら素の C++ 、.net 覚えたいのならば C# から入った方が良いと思う
他のページは見ていないが、張ったコードを見る限り他のサイトで勉強しなされ
初心者はなるべききれいなコードだけを見た方が良い
0663デフォルトの名無しさん
2016/01/06(水) 13:42:19.10ID:/g1uIeriそれで可読性が高まるなら別に問題ないと思うけど
でも可読性なんて主観の問題でもあるしな
0664デフォルトの名無しさん
2016/01/06(水) 13:51:31.05ID:UxbtoQe/一貫性がなくなる
クラスや関数のカッコは省略できないしカッコをつける方向で統一すべき
0665デフォルトの名無しさん
2016/01/06(水) 14:02:25.34ID:3zvgfCMD0666デフォルトの名無しさん
2016/01/06(水) 14:14:52.15ID:/XlzX9bH省略していい/良くない、という議論はなにか違う。
0667デフォルトの名無しさん
2016/01/06(水) 15:40:33.70ID:audoA3Q/0668デフォルトの名無しさん
2016/01/06(水) 15:46:38.00ID:audoA3Q/0669デフォルトの名無しさん
2016/01/06(水) 15:49:22.23ID:/XlzX9bH0670デフォルトの名無しさん
2016/01/06(水) 16:08:02.61ID:/g1uIeri0671デフォルトの名無しさん
2016/01/06(水) 16:42:35.44ID:kBV+7dn0else if はどうするの?
if(...){}
else { if(...){} }
って書くの?
0672デフォルトの名無しさん
2016/01/06(水) 16:47:00.21ID:2xmASC79cにはelseifという構文はない!とか言いたいだけじゃないのか
常識的に考えてelse if{}だろ
0673デフォルトの名無しさん
2016/01/06(水) 16:47:28.42ID:/XlzX9bHこの話はやめようじゃないか。
0674デフォルトの名無しさん
2016/01/06(水) 17:40:22.69ID:RGaENvv1文法上は複文も使えるという感じだろう。
0675デフォルトの名無しさん
2016/01/06(水) 17:43:46.46ID:C2N+bGa7わりと気づかずそう書いちゃうことはあった…
0676デフォルトの名無しさん
2016/01/06(水) 18:22:24.51ID:3zvgfCMD0677デフォルトの名無しさん
2016/01/06(水) 19:14:46.63ID:9fKkTwJdコロンとセミコロンだったか、ピリオドとカンマの
打ち間違いでトラブルが起きたって話は聞いたことがある。
CやC++じゃないと思うけど。
0678デフォルトの名無しさん
2016/01/06(水) 19:58:42.59ID:KjcuT4OL0679デフォルトの名無しさん
2016/01/06(水) 20:58:21.95ID:/g1uIeri0680デフォルトの名無しさん
2016/01/06(水) 21:01:15.49ID:5UG3hvjQ0681デフォルトの名無しさん
2016/01/06(水) 21:55:31.41ID:dKGWEjRg0682デフォルトの名無しさん
2016/01/06(水) 22:00:39.10ID:dAXQ+tnq行き過ぎて押し付けは悪だけどある程度押し付けてくれないと初心者おれが死ぬ
0683デフォルトの名無しさん
2016/01/06(水) 22:10:21.76ID:5UG3hvjQ押し付けるって、誰が?
初心者にそういう人間が必要になる状況って何なの?理解に苦しむ。
0684デフォルトの名無しさん
2016/01/06(水) 22:14:22.86ID:dKGWEjRg2ちゃんねるで無縁の人に自分のコーディングスタイルを押し付けるのは間違いなくキチガイ
0685デフォルトの名無しさん
2016/01/06(水) 22:14:34.93ID:dAXQ+tnq自分でスタイル模索するとエライことになるから、ある程度洗練されたスタイルを教えて欲しいの
0686デフォルトの名無しさん
2016/01/06(水) 22:21:42.87ID:dKGWEjRg変態: ボクにスタイルを調教して下さいハァハァ!
>>682はどちらかというと後者
683が理解に苦しむのはいたしかたない
0687デフォルトの名無しさん
2016/01/06(水) 22:31:41.76ID:dKGWEjRgよしお前に天下のGNUスタイルを教えてやろう
if (func (arg1, arg2))
statement;
else
{
statement;
}
https://www.gnu.org/prep/standards/html_node/Formatting.html#Formatting
0688デフォルトの名無しさん
2016/01/06(水) 22:31:50.76ID:FyCc+Dtf0689デフォルトの名無しさん
2016/01/06(水) 23:03:51.66ID:5UG3hvjQところでVisual Studioって設定次第だろうけど
if のあとスペース開けずにtab押すと変なことするね。
たとえば if(a=0) でifと(の間にカーソルがある状態でtab押すと勝手にこうなる。
if (true)
{
}(a = 0)
やめてほしいんだけど、どの設定だっけ?
0690デフォルトの名無しさん
2016/01/06(水) 23:43:20.72ID:xma6U5e/なんにせよ、if (a=0)はきもいな…
0691デフォルトの名無しさん
2016/01/06(水) 23:57:57.54ID:5UG3hvjQおおっww悪い悪いwww
0692デフォルトの名無しさん
2016/01/07(木) 00:05:26.31ID:jV+PPUjDなんだこれは・・・たまげたなぁ
0693デフォルトの名無しさん
2016/01/07(木) 00:08:53.89ID:P0u7J+GCGoogleも個性的なスタイルで有名
『do not use C++ exceptions.』
https://google.github.io/styleguide/cppguide.html#Exceptions
0694デフォルトの名無しさん
2016/01/07(木) 08:03:05.37ID:02/PEFdC0695デフォルトの名無しさん
2016/01/07(木) 12:16:30.75ID:jV+PPUjDもうしてるとか?
0696デフォルトの名無しさん
2016/01/07(木) 12:36:35.50ID:Wfw0ONSO高速化するって
変態ですか?
以下がそのマクロたち
http://codepad.org/Fh4fq2mJ
上から順に αブレンド、ベクトル内積、ベクトル正規化
一番下はもうやけくそ
俺の場合
#define 主義 { C++で組む = C99で組む; if(C++で組む== C99で組む) inlineは使わない主義;}
int main() {
主義
return -1;
}
なんだよねぇ
0697デフォルトの名無しさん
2016/01/07(木) 12:40:18.58ID:ig6R4qGwということで、つぎのかんじゃさんどうぞー
0698デフォルトの名無しさん
2016/01/07(木) 12:42:21.20ID:ig6R4qGw0699デフォルトの名無しさん
2016/01/07(木) 13:44:47.87ID:bWvRU8752番目のは内積じゃなくて外積に見えるけど?
3次元に決めうちなんだから普通の関数にしてもなんらペナルティはなさそうだ。
自分はマクロ定義不使用縛りを課している。
0700デフォルトの名無しさん
2016/01/07(木) 13:52:14.06ID:uG/iUsjbそんな無駄なif文書いてる時点でお察し
おれならSSE使ってinline関数だな
0701デフォルトの名無しさん
2016/01/07(木) 14:03:07.83ID:Pf5s4Kd+なに作ってんの?これが一番重要なんだけど。
俺は作る物なくて困ってる。
それとも仕事かなんかで作りたくない物だけ作ってんの?
俺は別に数学が好きなわけでもなんでもないし。
0702デフォルトの名無しさん
2016/01/07(木) 14:09:36.60ID:bWvRU875自分が便利になるツール
0703デフォルトの名無しさん
2016/01/07(木) 14:25:48.01ID:JBjLWnoq無茶言うなって思ったらpragma onceはほぼ全てと言っていいほどのコンパイラでサポートされてるのね。
0704デフォルトの名無しさん
2016/01/07(木) 15:31:12.80ID:jV+PPUjDマクロは根絶されるべきもの
いやしくもこのスレの住人ならばマクロ撲滅運動に貢献しなさい
0705デフォルトの名無しさん
2016/01/07(木) 15:37:35.70ID:bWvRU875ああゴメン
インクルードガードだけは使ってるわ。
気にさわったら袋だたきにしてくれ
0706デフォルトの名無しさん
2016/01/07(木) 15:44:02.75ID:bWvRU8750707デフォルトの名無しさん
2016/01/07(木) 15:49:08.26ID:N1UvBltE0708デフォルトの名無しさん
2016/01/07(木) 16:23:58.40ID:7vfkJ+8f0709デフォルトの名無しさん
2016/01/07(木) 16:38:26.25ID:jV+PPUjDgoto同様、要は使い用かね
0710デフォルトの名無しさん
2016/01/07(木) 17:02:11.92ID:h6IODMw0テンプレートの特殊化でマクロをよく使うなあ。
boostでもよく使われてるよね。
0711デフォルトの名無しさん
2016/01/07(木) 17:05:45.32ID:HwbuJDkG0712デフォルトの名無しさん
2016/01/07(木) 17:08:10.76ID:h6IODMw00713デフォルトの名無しさん
2016/01/07(木) 18:08:52.01ID:9s+XESwg0714デフォルトの名無しさん
2016/01/07(木) 18:32:12.25ID:LXmdZrFUMFCからパクっただけだけど
0715デフォルトの名無しさん
2016/01/07(木) 20:37:47.61ID:DDM1Q/Wc0716デフォルトの名無しさん
2016/01/07(木) 20:56:21.96ID:lRIC4Lm00717デフォルトの名無しさん
2016/01/07(木) 21:07:57.54ID:zpJ8fCsqどれくらいの規模を大規模開発って言うの?
0718デフォルトの名無しさん
2016/01/07(木) 21:23:44.17ID:JpTJcFqHUNIXv6
0719デフォルトの名無しさん
2016/01/08(金) 00:16:01.66ID:SFovjtWAttp://techon.nikkeibp.co.jp/article/COLUMN/20120210/204592/
> F-35のソフトウエア規模は全体で1800万行。このうち新規開発は1160万行で、
> 同じステルス型戦闘機として有名な「F-22A」と比べても4倍の規模だそうです。
F-35はC++だけど、F-22はAdaな。
むしここではF-22がAdaで1800/4万行ってのほうがなんか凄みがあるが。
0720デフォルトの名無しさん
2016/01/08(金) 09:30:19.71ID:tpB5KsLp0721デフォルトの名無しさん
2016/01/08(金) 11:54:38.75ID:fLzwOGxiソフトはN台作ってもほぼコストは1倍ですしおすし
0722デフォルトの名無しさん
2016/01/09(土) 00:44:09.61ID:G8JADAjustatic const string typeName
というメンバに"foo"を入れてるんですが、
もっと頭いいやり方絶対ありますよね?
0723デフォルトの名無しさん
2016/01/09(土) 00:56:50.93ID:N16yOwletypeidとtypeinfoでどうよ?
0724デフォルトの名無しさん
2016/01/09(土) 01:17:39.23ID:hFixEK58保持することが目的になってしまっている馬鹿は
言うことが違うな
0725デフォルトの名無しさん
2016/01/09(土) 07:02:07.66ID:Fk82Ooairttiなんて使ってるのは世界中で7人くらいと推定されている。
0726デフォルトの名無しさん
2016/01/09(土) 07:57:31.33ID:U1JQjBCjqtとか割とメジャーなOSSでもそうやっているから、あまり良い解は無さそうだ。
0727デフォルトの名無しさん
2016/01/09(土) 10:38:03.41ID:0Ig0qDlpQueryInterfaceにvoid**渡してswitchでキャストとかやってんじゃん
あれdynamic_castと内容的に同じことだし、
dynamic_castはvtableを使うわけだよな
つまりおまえさんが間違ってると言っている相手は動的結合そのものだぞ
0728デフォルトの名無しさん
2016/01/09(土) 13:07:31.90ID:CpCNnIMM枯れているから使ってるだけで。
0729デフォルトの名無しさん
2016/01/09(土) 13:33:10.30ID:Fk82Ooaiどうしてお前はそんなに頭が悪いのだ?
rttiはC++に閉じた仕組み、QueryInterfaceはC++に閉じていない。
0730デフォルトの名無しさん
2016/01/09(土) 13:40:55.46ID:KXL8RYc/おいおい話をすり替えるなよ
間違っているかどうかであって、閉じているかどうかではないぜ
頭が悪くて申し訳ないが、頭が狂ってる人こそ自分の心配をしたらどうだ
0731デフォルトの名無しさん
2016/01/09(土) 14:17:58.94ID:e/TIyCm20732デフォルトの名無しさん
2016/01/09(土) 14:33:46.75ID:Fk82Ooai本当に頭が悪いな。C++に閉じた世界では間違っているといってる。
0733デフォルトの名無しさん
2016/01/09(土) 14:38:01.86ID:Fk82Ooai質問: char *a="abc", *b="123"; でa+bでつなげようとしましたができません。
オレ: それは間違っている。
バカ: 正しい。+で文字列を連結できる言語がある。
0734デフォルトの名無しさん
2016/01/09(土) 14:46:38.43ID:6gDXs0JPだが>>733の例えは意味不明だ
0735デフォルトの名無しさん
2016/01/09(土) 19:21:30.12ID:G8JADAjuそういやこんなのあるんでした。忘れてました
>>726
自分も、とあるそこそこでかいOSSで同じことしてたのを真似てました
typeidみたいな実行時型情報をあえて使わない理由があったりするんですかね?
クラステンプレートと相性悪いとか?
0736デフォルトの名無しさん
2016/01/09(土) 20:03:52.03ID:7Jt43H000737デフォルトの名無しさん
2016/01/09(土) 20:29:01.57ID:m1NDYqaC設計として間違っているかどうかという問題が、
なぜ言語機能とそれ以外に分ける必要が出てくるんだ?
アプリ屋が言語のせいにして逃げる口実に使えるかどうかという視点で論じているのか?
0738デフォルトの名無しさん
2016/01/09(土) 22:00:04.64ID:Fk82Ooaiなんでお前、そんなに頭悪いんだ?
0739デフォルトの名無しさん
2016/01/09(土) 22:35:44.20ID:m1NDYqaC0740デフォルトの名無しさん
2016/01/10(日) 00:04:39.98ID:550mM9t8もともと>725はC++がstatic typingであることを理由に挙げているのだから
RTTIの是非が言語機能についてのみ言及であることはおかしくはない
突然「分けて考えるの禁止」などという俺ルールを持ち出す>>730のような馬鹿はどうしようもない
0741デフォルトの名無しさん
2016/01/10(日) 00:06:39.12ID:KZTskEjX0742デフォルトの名無しさん
2016/01/10(日) 00:08:06.98ID:ldysN96Rどうする?
0743デフォルトの名無しさん
2016/01/10(日) 00:22:29.45ID:550mM9t8お前のサイコロ情報に価値など無いから
代わりに半ケツでも出してたらどうだ
0744デフォルトの名無しさん
2016/01/10(日) 00:34:26.25ID:A0I7pImoキタ━━━━(゚∀゚)━━━━!!
0745デフォルトの名無しさん
2016/01/10(日) 01:24:12.69ID:JhCLPk/20746デフォルトの名無しさん
2016/01/10(日) 08:00:23.93ID:dvof2tBX普通に使ってんだけど
0747デフォルトの名無しさん
2016/01/10(日) 09:11:38.85ID:qudb7NGOわかりやすく説明してやっても理解できないバカは罵倒するだけ。
0748デフォルトの名無しさん
2016/01/10(日) 14:09:10.54ID:C+WC2CnFを働きながらプライベートな限られた時間で学習して一人前になれますか。
c++の文法でつまずくことは特にないです。
0749デフォルトの名無しさん
2016/01/10(日) 14:11:05.66ID:CDjvfoVa0750デフォルトの名無しさん
2016/01/10(日) 14:20:41.86ID:7+LAjb+g0751デフォルトの名無しさん
2016/01/10(日) 14:27:33.96ID:wjEuI9UW0752デフォルトの名無しさん
2016/01/10(日) 14:47:08.34ID:KZTskEjX0753デフォルトの名無しさん
2016/01/10(日) 14:59:23.67ID:qudb7NGO0754デフォルトの名無しさん
2016/01/10(日) 20:01:43.31ID:A0I7pImo可能だけど、そればかりは個人の資質次第としか言いようが無いと思う
0755デフォルトの名無しさん
2016/01/10(日) 20:04:34.86ID:mfbMaCRH理解や調べる速さや物覚え、
そして妥協点で満足して分かったつもりになる能力がないとまともな速度では学習しきれない。
0756デフォルトの名無しさん
2016/01/10(日) 20:05:40.33ID:mfbMaCRH0757デフォルトの名無しさん
2016/01/10(日) 21:01:35.84ID:DqVvg+zxC++03,C++1x,標準ライブラリとかガン無視されるのもマイナス
0758デフォルトの名無しさん
2016/01/10(日) 22:09:34.67ID:3R0pjSOb0759デフォルトの名無しさん
2016/01/10(日) 23:41:23.62ID:lr/f1ZoA0760デフォルトの名無しさん
2016/01/11(月) 01:37:57.70ID:wq6N3Kc5MFCを採択するようなニッチな場面で
C#という選択肢があるはずがないだろう低能
0761デフォルトの名無しさん
2016/01/11(月) 01:51:39.59ID:dz1SW2uzスレの空気悪くなるからやめてほしいんだが・・・
0762デフォルトの名無しさん
2016/01/11(月) 02:01:44.75ID:uJtkKKOeバカをバカと呼んで何が悪い
スレの空気が悪くなるからくだらない非難は止めろ
0763デフォルトの名無しさん
2016/01/11(月) 02:07:28.30ID:Edevw0n0>バカをバカと呼んで何が悪い
空気が悪い
0764デフォルトの名無しさん
2016/01/11(月) 02:17:25.64ID:wq6N3Kc5低能を含むレスは半分が俺のようだ
0765デフォルトの名無しさん
2016/01/11(月) 08:09:50.96ID:uJtkKKOeそれでは、このスレに来ないという選択をすれば良いな。
0766デフォルトの名無しさん
2016/01/11(月) 08:54:46.87ID:rxVWnOdq他人の意見を聞かない。>>3のテンプレからもわかる。
>>765も冗談じゃなくて本当のことだね。
きっと>>761も自演でしょ。
0767デフォルトの名無しさん
2016/01/11(月) 11:33:24.99ID:dz1SW2uz慣れ合いはともかく煽り罵りは邪魔でしかないけど、どうしようもないことだからスルーしてる
でもたまにイラッときて、いい加減にしろと言いたくなってしまう
0768デフォルトの名無しさん
2016/01/11(月) 13:32:12.40ID:zbh6igZOもちつこう。
それは言い過ぎかと。
>>767
激しく同意。
ここ数年同じパターンだから、さすがに慣れたわ。
罵倒くんのおかげで、リアルでも耐性ついて、俺自身の人間性がレベルアップした気がする。
そういう意味で、あいつには割と感謝してる。
0769デフォルトの名無しさん
2016/01/11(月) 13:41:15.01ID:LTvMV7iaあまりスルー力が高そうに見えないな
参考画像
https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRmfN9x3aAMz1bm6VjOlHpjcwbb17inqmyR5sWLoC2b4-H816VZWvcSDHsJ
0770デフォルトの名無しさん
2016/01/11(月) 13:46:37.80ID:IjRCLy/Eバトウ君の別個体かも知れないけど、
ふらっとC#も荒れてるしウンザリ
0771デフォルトの名無しさん
2016/01/11(月) 14:00:37.53ID:JutXF6Cv0772デフォルトの名無しさん
2016/01/11(月) 14:30:28.70ID:2XBLH7sUレスの技術的価値、殺伐さ、という組み合わせで
有有←読む価値ある
有無←読む価値ある
無有←価値無し
無無←価値無し
結局こうだから
0773デフォルトの名無しさん
2016/01/11(月) 15:13:48.75ID:clK+goHo昔はそういうところも2ch文化ってことで是としてた節があったけど
今は2ch自体がただの掲示板にすぎないからな
文化も糞もない
0774デフォルトの名無しさん
2016/01/11(月) 17:14:26.46ID:6EuZL6LC言葉遣いこそ悪いものの有益な情報がちゃんと含まれてるからなぁ。
質問者をただ見下すだけ罵倒するだけの返答はお断り、っていう
スレッドの趣旨を例示したものだと思っていた。
0775デフォルトの名無しさん
2016/01/11(月) 17:22:13.78ID:uJtkKKOe罵倒されるのは知ったかぶりしてウソを答える自称回答者。此奴は叩いて潰さないとダメ。
0776デフォルトの名無しさん
2016/01/11(月) 19:37:30.31ID:wq6N3Kc5お前の方が人格を疑われかねないぞ
0777777
2016/01/11(月) 19:44:18.73ID:NyTNyuvA0778デフォルトの名無しさん
2016/01/11(月) 19:52:51.32ID:d9M93+6h0779デフォルトの名無しさん
2016/01/11(月) 20:19:59.74ID:uJtkKKOeバカがまき散らかしたウソが蔓延してる掲示板には価値が無い。
0780デフォルトの名無しさん
2016/01/11(月) 20:24:22.57ID:Fah0ydLsスレの品質を保とうとする勢力がまだ残っていたら
バカや嘘を締め付ける力が優勢だけど
品質が低下してあるラインを超えたら見捨てられるから
あとはノイズだけが降り積もっていくだけ
バカは放置されこうしてコミュニティは一生を終える
0781デフォルトの名無しさん
2016/01/11(月) 20:32:48.21ID:IUrb95R1ウソの回答が付いたとわかったなら正しい解答をすればいいだけだろう。
それが技術者として「叩いて潰す」ことになる。
正しい解答にだって罵倒を含めれば受け入れない言い訳にされてしまう可能性だってある。
まったく合理的でない。
0782デフォルトの名無しさん
2016/01/11(月) 20:39:31.92ID:Fah0ydLs罵倒か否かは語るべき価値もない
罵倒の有無で論旨が左右されることもない
0783デフォルトの名無しさん
2016/01/11(月) 20:54:16.37ID:qDZy1U6Z嘘を訂正しないで馬鹿って言うだけ?
いやーん馬鹿
0784デフォルトの名無しさん
2016/01/11(月) 21:06:51.37ID:wq6N3Kc5馬○鹿には>>772や>>782のような論理的思考は難しかったようだ
0785デフォルトの名無しさん
2016/01/11(月) 21:13:58.07ID:IUrb95R1論理的だというのならその客観的で妥当な目的を説明してもらわないと。
0786デフォルトの名無しさん
2016/01/11(月) 21:17:20.09ID:wq6N3Kc5論理的に必然性が導き出せないことと
論理的に間違っていることを混同した馬鹿
0787デフォルトの名無しさん
2016/01/11(月) 21:19:43.23ID:qDZy1U6Z0788デフォルトの名無しさん
2016/01/11(月) 21:35:15.89ID:qDZy1U6Z|:::::::::::::;;;ノ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|::::::::::( 」 < 論理的に必然性が導き出せないことと
論理的に間違っていることを混同した馬鹿
ノノノ ヽ_l \______________
,,-┴―┴- 、 ∩_
/,|┌-[]─┐| \ ( ノ
/ ヽ| | バ | '、/\ / /
/ `./| | カ | |\ /
\ ヽ| lゝ | | \__/
\ |  ̄ ̄ ̄ |
⊂|______|
|l_l i l_l |
| ┬ |
0789デフォルトの名無しさん
2016/01/11(月) 21:36:27.27ID:VI4UFV9n意識高い系なんだろうね
0790デフォルトの名無しさん
2016/01/11(月) 21:39:22.35ID:zbh6igZOマジ、オヌヌメ。
0791デフォルトの名無しさん
2016/01/11(月) 21:40:58.64ID:JutXF6CvC++の話題に対して間違いを正すのはギリおk
罵倒は、C++との関係を立証した方がより望ましい
0792デフォルトの名無しさん
2016/01/11(月) 22:21:02.51ID:VI4UFV9n0793デフォルトの名無しさん
2016/01/11(月) 22:23:48.78ID:JutXF6Cv>>791は「C++」の文言が入ってるからギリおk
0794デフォルトの名無しさん
2016/01/11(月) 22:32:05.73ID:wq6N3Kc5「本スレのあり方について言及しているから」でなく
「キーワードが含まれているから」といあたりが
どうしようもなく低能のアロマ
0796デフォルトの名無しさん
2016/01/11(月) 22:42:13.02ID:VI4UFV9n0797デフォルトの名無しさん
2016/01/11(月) 23:24:48.46ID:UhSyCJUj0798デフォルトの名無しさん
2016/01/12(火) 02:27:17.30ID:I6rTk7bH間違った事を強弁されるのは本当に萎えるよ
0799デフォルトの名無しさん
2016/01/12(火) 07:09:31.65ID:xNqBHdx20800デフォルトの名無しさん
2016/01/12(火) 19:50:56.19ID:7kdSKUGZ0801デフォルトの名無しさん
2016/01/13(水) 00:17:19.69ID:L5klkXci0802デフォルトの名無しさん
2016/01/13(水) 18:57:15.02ID:z0Cmtt7f近年のC++プログラミングでは、トレイトなどを駆使したメタプログラミングにより
処理を実行時ではなくコンパイル時にやってしまうのがトレンドのようですが、
従来型の実行時(動的)な処理は基本的にすべてコンパイル時(静的)の処理に置き換えられるものなんでしょうか?
それとも、無理な場合もあるんでしょうか?
ちなみに、こんなことを聞いたのは以下のようなブログを読んだのがきっかけです
ttp://qiita.com/Riyaaaa_a/items/887f6190e710c6410994
0803デフォルトの名無しさん
2016/01/13(水) 19:06:59.98ID:3B0MZy9Tあとテンプレートはダックタイピングになるので強い型安全の保証も難しいだろう
0804デフォルトの名無しさん
2016/01/13(水) 19:17:00.39ID:2hL1OeUFきもい質問だろ
0805デフォルトの名無しさん
2016/01/13(水) 19:38:10.21ID:QjeDGB/squiitaってしたり顔でサクッとウソ書いてあるから疑ってかかった方が良い
> 各インスタンスが関数ポインタテーブルを持つことでスタックを圧迫し、
普通の知能もってりゃ、テーブルの実体はクラスごとに1つあればオッケーで、
インスタンスはそれへのポインタが1つ増えるだけで良いとわかりそうなもんだが。
こういうマヌケな事を書いてるところは、その先を読む気もしないわ。
0806デフォルトの名無しさん
2016/01/13(水) 19:58:03.40ID:69fUgg/c俺は
> class Base{
> class Super : public Base{
この名前の次点で素早くギブアップしたw
そこから下は一行も読んでない
0807デフォルトの名無しさん
2016/01/13(水) 20:27:36.78ID:pyDKoxXs0808デフォルトの名無しさん
2016/01/13(水) 21:14:54.44ID:EoYroDLnたしかに真逆とは
0809デフォルトの名無しさん
2016/01/13(水) 21:36:42.99ID:QjeDGB/s「バカか? ポインタ1個分がスタック圧迫するだと?」
と罵倒できる、ここの方が健全だよね。
0810デフォルトの名無しさん
2016/01/13(水) 21:42:47.06ID:69fUgg/cDerived : Base
Sub extends Super
って感じかな
だから余計にカオス
0811デフォルトの名無しさん
2016/01/13(水) 22:10:05.57ID:z0Cmtt7fなんだか自信に満ちた書きっぷりだったので、普通にフムフムと読んでしまいました
ただ、仮想関数テーブルは速度の観点でよろしくないことがあるとは聞きます
そういう場合にメタプログラミングで置き換えられないか考える、という感じでしょうか?
0812デフォルトの名無しさん
2016/01/13(水) 22:11:01.63ID:d5qzONzBというか見当つけないとやばいような
0813デフォルトの名無しさん
2016/01/13(水) 22:18:54.46ID:LUXlk2QR真偽は別として、
仮想関数の数だけ関数ポインターを格納したvtableを
すべてのオブジェクトが持つためと書いてあるだろ文盲
0814デフォルトの名無しさん
2016/01/13(水) 22:25:15.88ID:BvZrk89z仮想関数である事がパフォーマンス上の問題になるケースって、相当少ないから気にしなくて良いよ。
本の1〜2回、ポインタによる間接参照を辿る程度。
そういうのは問題になってから、原因を調査した上で改良すれば良いだけ。
ほとんどの場合、全然関係ないところにボトルネックはあるから、気にしない気にしない。
0815デフォルトの名無しさん
2016/01/13(水) 22:26:07.60ID:QjeDGB/s少しでも知能があればインスタンスごとに持つ必要がないのは明白であり、
既に>>805で偽であると断じている
死ね、バカ
0816デフォルトの名無しさん
2016/01/13(水) 22:33:19.79ID:QjeDGB/s二重の間接参照のペナルティはおうけど、それが問題になる局面で仮想メンバ呼ばなけりゃ良いだけの話
件のブログは全く読む気しないが、テンプレートで性能アップなんてのは幻想だと思うよ
0817デフォルトの名無しさん
2016/01/13(水) 22:45:41.98ID:1MrQElfZダックタイピングになっても、動的型付けになるわけじゃないんだから型の安全性は変わらんよ
お前テンプレートメタプログラミングしたことないだろ
0818デフォルトの名無しさん
2016/01/13(水) 22:50:22.90ID:LPUWxnLk「書かれたコードを呼び出す」とはこれまた曖昧な
0819デフォルトの名無しさん
2016/01/13(水) 22:53:59.49ID:bHHjMdz0オブジェクトがヒープ上になければいけない、と勘違いしてるやつが以前いた。
放置した。
0820デフォルトの名無しさん
2016/01/13(水) 23:32:42.49ID:z0Cmtt7f自分にはメタプログラミングは敷居が高く感じるので、それを聞いて安心しました
だいたい、経験浅いくせに凝ったことやろうとしてもろくなことにならんですよね
0821デフォルトの名無しさん
2016/01/14(木) 02:21:42.64ID:87BOzuvCbaseclass->virtual();が遅い、デカイと言いながら
パフォーマンス向上!!と謳ったテンプレートではbaseclass->virtual();が実現できないと記事の最後に書いてあって和ロタ
こういうアホにスペース貸し出すな。qiita
0822デフォルトの名無しさん
2016/01/14(木) 03:35:19.02ID:wi7HAYBxそもそもそれが真だとしてスタック食い潰すか?
仮想関数でポリモルしたいならポインタで扱う事になるし
0823デフォルトの名無しさん
2016/01/14(木) 03:49:31.16ID:87BOzuvC> Riyaaaa_a
> 北の方で高専生やってます。 C++でゲーム作ったり、テンプレートメタプログラミングをしたり。
ずいぶん幼稚な思考だと思ったら案の定。
0824デフォルトの名無しさん
2016/01/14(木) 15:11:12.77ID:3xoxSYC8何故今までおかしいと思わなかったんだ自分・・・吊ってくるorz
0825デフォルトの名無しさん
2016/01/14(木) 19:29:33.39ID:Sio+1GmJインスタンスごとにテーブルを持ってると考えてしまうことはそんなにおかしな発想じゃあない
0826デフォルトの名無しさん
2016/01/14(木) 19:40:40.78ID:xs/jHoAF便乗質問ですが、
テーブルの作成はクラスの初回のインスタンス化で行われ、
2個目以降のインスタンス化では何もしないということですか?
0827デフォルトの名無しさん
2016/01/14(木) 19:47:12.71ID:b/ISwWkGつまり共有できるところは共有するということでは(キリッ)
0828デフォルトの名無しさん
2016/01/14(木) 20:12:29.09ID:MzRmodn1いんや、コンパイル時に作成だよ。
0829デフォルトの名無しさん
2016/01/14(木) 20:14:56.37ID:hYstN1PO0830デフォルトの名無しさん
2016/01/14(木) 20:56:56.66ID:wi7HAYBx基底クラスの仮想関数が呼び出せないとでも思い込んでなきゃ
そういう発想にはならないと思う
0831デフォルトの名無しさん
2016/01/14(木) 21:39:02.45ID:26y3BBuX0832デフォルトの名無しさん
2016/01/14(木) 21:50:18.45ID:xs/jHoAFありがとです。一人で変な勘違いしてました
単なるテーブルなんだからコンパイル時に出来上がって当然ですよね
0833デフォルトの名無しさん
2016/01/14(木) 22:37:12.93ID:P4SGT366初回かどうかは関係なくインスタンスごとにテーブルの初期化が行われるように振る舞う
http://ideone.com/TyPDhY
0834デフォルトの名無しさん
2016/01/14(木) 23:32:48.35ID:P4SGT366ctime
残念ながらC11のtimespecは使えないので
ミリ秒まで必要ならstd::chronoを組み合わせて使うしかない
0835デフォルトの名無しさん
2016/01/15(金) 07:04:44.57ID:WQIaqYsW0836デフォルトの名無しさん
2016/01/17(日) 22:58:32.40ID:aEwXbHoX0837デフォルトの名無しさん
2016/01/17(日) 23:42:22.64ID:l2MX1byn0838デフォルトの名無しさん
2016/01/18(月) 00:07:48.02ID:kCdvK5WI0839デフォルトの名無しさん
2016/01/18(月) 00:20:19.57ID:PN/aZH6jピュア・バーチャルな関数があるとコンパイル通らないわ
0840デフォルトの名無しさん
2016/01/18(月) 00:36:29.76ID:1IQlXDwzそれに間接的似呼ばれている場合はコンパイルエラーにすることが不可能だし
0841デフォルトの名無しさん
2016/01/18(月) 01:02:18.06ID:PN/aZH6j0842デフォルトの名無しさん
2016/01/18(月) 07:07:28.85ID:1IQlXDwzどうせ妄想のコンパイラーだろ?
0843デフォルトの名無しさん
2016/01/18(月) 09:13:04.59ID:20Rww3ua悩みたくないのでBoostのdate_time使います
0844デフォルトの名無しさん
2016/01/18(月) 09:55:38.04ID:PN/aZH6jhttp://ideone.com/hLWFJG
0845デフォルトの名無しさん
2016/01/18(月) 10:47:02.69ID:AVCLJmiz> prog.cpp: In constructor 'Kantoka::Kantoka()':
> prog.cpp:13:11: warning: pure virtual 'virtual void Nantoka::nantoka()' called from constructor
"warning" を「コンパイル通らない」と言うかどうか、という点の認識が違うんじゃないかな。
コンパイルは通ると言う人のほうが多いと思うよ。
純粋仮想関数がオーバーライドされてないクラスのインスタンス化できないことについては
たぶん誰も異論は無い。
でもそこはコンストラクタ中の純粋仮想関数呼び出しとは関係ない。
0846デフォルトの名無しさん
2016/01/18(月) 11:01:49.40ID:PN/aZH6jそういうのを「難癖」と表現しました。
結局インスタンス化できないんだからピュア・バーチャルはコンストラクタから呼べないということには間違いは微塵もないんだが。
あとワーニングはエラー扱いしたほうがいいよ。俺はずっとそうしてる。そうしない奴とは一緒に仕事したくない。
0847デフォルトの名無しさん
2016/01/18(月) 11:06:03.21ID:ib6exPCPワーニングかエラーかって言葉の定義の問題だから、スタンスの問題にすり替えられても少々困る。
0848デフォルトの名無しさん
2016/01/18(月) 11:17:37.56ID:AVCLJmizもしかして、 Kantoka からさらに派生したクラスで nantoka() をオーバーライドすれば
派生クラスがインスタンス化できる(純粋仮想関数を呼び出す Kantoka のコンストラクタが呼ばれる)のに
気づいてないのかな?
0849デフォルトの名無しさん
2016/01/18(月) 11:33:19.11ID:PN/aZH6j難癖の上塗り
その場合nantoka()はピュアバーチャルじゃないからw
つかそんなへんてこりんな設計するな
0850デフォルトの名無しさん
2016/01/18(月) 11:35:23.24ID:FsCZAz0x0851デフォルトの名無しさん
2016/01/18(月) 11:51:13.65ID:AVCLJmizいや、>848の場合でも>844-845と同じ警告が出るんだけどね。
コンパイラが間違ってるとでも言うの?
0852デフォルトの名無しさん
2016/01/18(月) 12:11:39.59ID:5L4n9nSa0853デフォルトの名無しさん
2016/01/18(月) 13:02:04.77ID:HetPa4FB0854デフォルトの名無しさん
2016/01/18(月) 13:34:41.80ID:PN/aZH6jhttp://ideone.com/jJHfvI
試しにやってみたけどリンクエラーになるんですが?結局コンストラクタではピュアバーチャルは呼べない。
>>850
バーカ。お前は難癖野郎未満。
0855デフォルトの名無しさん
2016/01/18(月) 14:08:04.19ID:uMGt1p7ohttp://ideone.com/jFx9uA
0856デフォルトの名無しさん
2016/01/18(月) 15:39:02.12ID:PN/aZH6j0857デフォルトの名無しさん
2016/01/18(月) 18:16:12.49ID:IEnSuMyH0858デフォルトの名無しさん
2016/01/19(火) 00:43:10.26ID:Lt3kNDHx定義しなけりゃエラー、定義すりゃ動くって話じゃなくて、どっちも未定義動作の結果だから気をつけてな。
0859デフォルトの名無しさん
2016/01/19(火) 01:28:27.98ID:tEwpEdlTifstram ifs {input_file};
ifstream_iterator<int> iite1 {ifs};
ifstream_iterator<int> eos;
ifstream_iterator<int> iite2 {ifs};
ofstream ofs {output_file}
ofstream_iterator<int> oite {ofs};
transform( ++iite1, eos, iite2
, []( const int& post
, const int& prev)
{
return post - prev;
}
);
ってやったらダメなんですか? なんか結果がおかしいんですが
0860デフォルトの名無しさん
2016/01/19(火) 01:40:19.12ID:tEwpEdlT0861デフォルトの名無しさん
2016/01/19(火) 01:59:26.13ID:Lt3kNDHx2つの iite1, iite2 それぞれがインクリメントのたびに ifs >> x するから、
片方をインクリメントしたときに取り出された値はもう片方からは見えなくなる。
たぶん adjacent_difference() さんの出番。
https://www.google.co.jp/search?q=adjacent_difference
0862デフォルトの名無しさん
2016/01/19(火) 12:28:34.20ID:I8HE+idCムーブやコピーを使わずに両者を一括で処理できる関数を作りたいのですが。
http://ideone.com/GAlNj2
0863デフォルトの名無しさん
2016/01/19(火) 12:40:31.71ID:LBmPehyf結局何をやりたいのかは不明だけど、まずconstを勉強しなさい
http://ideone.com/OH9KJ8
0864デフォルトの名無しさん
2016/01/19(火) 12:56:09.58ID:o3vXp8Ujああこれだと思ったんですが、それの仕様で、最初の一項はそのまま残すってのが、何でこんな風にしちゃったのって思いますね。
要らないなら最初を飛ばせばいいじゃんって思うかもしれませんが、例えば別のクラスからdoubleなんかへ『特定の二項関数を適用した場合のみキャストが定義』されるってケースでは
adjacent_differnceでは最初の一項が単なる代入となってしまうので次元が違うんですよ
具体例を挙げるなら、time pointとtime pointの差でtime durationが定義されるって場合、欲しいのはtime durationのリストなのに、最初の一項を代入が発生すると、それはtime pointだから型が合わないわけです
じゃあ特別に初項のtime pointだけ無理矢理time durationに変換するコードを定義するってなると邪道というかコードが汚れるというか、そもそもそんな定義に正当性はあるのか、とか余計なことを色々考えなければならなくなるので、とにかくなんでこんな仕様にしたのか残念でなりません
点毎の微分係数のリストが欲しいのに初項だけなぜか原始関数が入ってるみたいな感じです
0865デフォルトの名無しさん
2016/01/19(火) 13:29:59.33ID:LBmPehyf初期値が0扱いされてるだけだから正当性もクソもないよ
残念なのは。。。
0866デフォルトの名無しさん
2016/01/19(火) 14:13:46.61ID:u5xt7rMo出力されるものは、
初項のみ入力型、それ以降は入力型どうしの差の型です。
両者が一致しないならコンパイルエラーになるでしょう?
取り敢えず生成して最初だけ捨てるとか以前にコンパイルでストップするでしょ
0867デフォルトの名無しさん
2016/01/19(火) 14:31:29.68ID:I8HE+idC>参照と左辺値の両方を受け取れる関数って作れますか?
>参照と右辺値の両方を受け取れる関数って作れますか?
>>863
まさにこれがやりたかったのです。ありがとうございます。
h関数やmoveの用途に誤解を招くミスがあったので元ソースを修正しておきました。
http://ideone.com/GAlNj2
0868864
2016/01/19(火) 16:48:12.65ID:u5xt7rMohttp://stackoverflow.com/questions/8267806/implicit-transformation-while-calling-stdadjacent-difference
なので、ワークアラウンドとして出力型から入力型への変換関数を書き、無条件でNaNを返すようにしました。
これなら今後意図しないところでうっかり勝手なキャストがされてしまったとしても見つかり易いでしょうから。(本当はそんなキャストをした値など持ち回して、その内比較などした時点でエラーで停まって欲しいんですが)
いずれにせよバグの卵を仕込んだようで気持ち悪いです(感想)
0869デフォルトの名無しさん
2016/01/19(火) 17:03:44.18ID:QRF0ukOE正確にはpopはできないからrangeを使うことになるが
0870デフォルトの名無しさん
2016/01/19(火) 20:30:59.08ID:I2igp/Hj最適化とか気にしても仕方ない気がするが
0871デフォルトの名無しさん
2016/01/19(火) 21:30:54.15ID:LBmPehyf0872デフォルトの名無しさん
2016/01/19(火) 22:45:17.98ID:hRgr/fBZの中身を
vector<array<double, 2>> v;
に渡したいんですが、forで回すのではなく1発で渡す方法ってないですか?
0873デフォルトの名無しさん
2016/01/19(火) 23:07:55.63ID:xZbak6Ni0874デフォルトの名無しさん
2016/01/19(火) 23:22:51.00ID:hRgr/fBZしまった、タイポしましたorz
0875デフォルトの名無しさん
2016/01/20(水) 00:30:15.92ID:NAm3D3i5https://ideone.com/hWx03e
0876デフォルトの名無しさん
2016/01/20(水) 00:33:42.12ID:NAm3D3i5格好つけないでベタなコード書け
その方が速い
0877デフォルトの名無しさん
2016/01/20(水) 00:33:42.79ID:NAm3D3i5格好つけないでベタなコード書け
その方が速い
0878デフォルトの名無しさん
2016/01/20(水) 00:34:38.51ID:NAm3D3i50879デフォルトの名無しさん
2016/01/20(水) 01:15:07.18ID:CgeLzYDgおお、ありがとうございます
しかしこれは・・・実際使うわけにはいきませんね
0880デフォルトの名無しさん
2016/01/20(水) 05:48:14.00ID:t0Y9mTVs格好つけてないで ベタなコードだけで
毎日何かを頑張っていりゃ
書いていくんだ それでいいんだ
型に飲み込まれ エラーではじかれて
それでもその手を離さないで
バグがあるんだ みんなあるんだ
解はどこにある 君は休みを取れない
0881デフォルトの名無しさん
2016/01/20(水) 06:41:42.51ID:HskUHurdなんかメドレーになりそうで嫌だ
0882デフォルトの名無しさん
2016/01/20(水) 08:39:28.48ID:NAm3D3i5自分で初期値ありのadjacent_differnceでも作れ
ただ自己満足したいだけなら続けてどうぞ
0883デフォルトの名無しさん
2016/01/20(水) 21:54:30.21ID:gq7zZGSJ0884デフォルトの名無しさん
2016/01/20(水) 21:54:59.79ID:Ci1f4cma0885デフォルトの名無しさん
2016/01/20(水) 22:01:53.08ID:7pHwgTRUまぁ一般的には得意じゃね?
0886デフォルトの名無しさん
2016/01/20(水) 22:08:23.19ID:e8aI9wBzシフトより普通の割り算の方が速いCPUやDSPを見たことが無いから、
まあ普通は2のn乗で割るのは得意と言えるでしょう
>>884
整数の種類とは?
0887デフォルトの名無しさん
2016/01/20(水) 22:13:49.51ID:1TVX6yTA2の乗数か否か
0888デフォルトの名無しさん
2016/01/20(水) 22:15:13.15ID:LUAhyj75ビットシフトするだけ
0889デフォルトの名無しさん
2016/01/20(水) 22:17:22.40ID:e8aI9wBzまあ確かに、
「2の乗数で割るのに比べて2のn乗で割るのが得意」
とは言えないわな
屁理屈
0890デフォルトの名無しさん
2016/01/20(水) 22:17:35.51ID:Ci1f4cma日本語読解能力の無い低能は去れ
0891デフォルトの名無しさん
2016/01/20(水) 22:19:24.38ID:e8aI9wBz割る数が固定であれば割り算の代わりに乗算を行うことで特に得意とは言えないCPUも存在はする
0892デフォルトの名無しさん
2016/01/20(水) 22:24:51.80ID:KVzlV0R10893デフォルトの名無しさん
2016/01/20(水) 22:27:40.37ID:e8aI9wBz0894デフォルトの名無しさん
2016/01/20(水) 22:28:44.12ID:Ci1f4cma一週間穴にこもるべき
0895デフォルトの名無しさん
2016/01/20(水) 22:28:44.83ID:I6UYKzryそうじゃなきゃ割り算命令(または逆数乗算)使うから
0896デフォルトの名無しさん
2016/01/20(水) 22:38:02.27ID:e8aI9wBzコーディング時に2^nだってわかっていれば
プログラマーがシフトに変更できるから普通は速い
明らかな2^nによる除算をシフトに置き換えられるコンパイラが存在するかどうかは知らん
Visual Studio 2015 は無理そう
0897デフォルトの名無しさん
2016/01/20(水) 22:42:44.15ID:e8aI9wBzそれから最近の高性能CPUだと、割る数が2^nの場合の除算命令は処理が早く終わるのが普通
スループットが向上しレイテンシも短くなる
http://instlatx64.atw.hu/
0898デフォルトの名無しさん
2016/01/20(水) 22:45:09.29ID:e8aI9wBz低能は >>894
0899デフォルトの名無しさん
2016/01/20(水) 22:54:20.69ID:e8aI9wBz2^nかどうか事前に判別して違うコードを走らせるってのも可能だね
>>895
2の階乗って2だけど、2のべき乗の間違いだよね
あと、変なところに誤爆したでしょ?
0900デフォルトの名無しさん
2016/01/20(水) 22:56:21.78ID:I6UYKzry>割る数が2^nの場合の除算命令は処理が早く終わるのが普通
例えばそのリストのどれを見ればそれが分かりますか?
ちょっと見たけど分からなかった
0901デフォルトの名無しさん
2016/01/20(水) 22:58:02.65ID:I6UYKzryそう。べき乗の間違いでした
0902デフォルトの名無しさん
2016/01/20(水) 23:35:22.15ID:I6UYKzry0903デフォルトの名無しさん
2016/01/20(水) 23:49:09.97ID:Ci1f4cma20年前に見たボーランドbccですら
2のべき乗以外の割り算でもシフトが使われるケースは有るのだが
嘘をつく前に生成されたアセンブリコードを確認したらどうだ?
0904デフォルトの名無しさん
2016/01/21(木) 00:16:53.77ID:RQbtFNgK割り算命令がそもそも無いとかあってもすごく遅いとかあったからね
0905デフォルトの名無しさん
2016/01/21(木) 00:21:15.60ID:0HmD462yunsigned intの9や10での割り算をシフトを使ったコードに置き換えるというのに
0906デフォルトの名無しさん
2016/01/21(木) 00:34:21.36ID:RQbtFNgKホントか?試してみたけどdiv使ってるんだが
0907デフォルトの名無しさん
2016/01/21(木) 02:50:22.80ID:RQbtFNgKどういうコードをどういうオプションでVS2015のx64でコンパイルしたら、unsigned intの9や10での割り算をシフトを使ったコードに置き換える
って言うんだ?答えられなけりゃ20年前のbccの件も虚言と見なす
>嘘をつく前に生成されたアセンブリコードを確認したらどうだ?
とか言ったんだからそれくらいは当然だよな?
0908デフォルトの名無しさん
2016/01/21(木) 07:11:22.26ID:0HmD462yReleaseにしないとdivになる
0909デフォルトの名無しさん
2016/01/21(木) 07:12:57.80ID:0HmD462yint_val / 8
の結果ぐらい確認してないのか
0910デフォルトの名無しさん
2016/01/21(木) 08:24:59.65ID:TVvRrwr+でhttps://goo.gl/T8WrIL
0911デフォルトの名無しさん
2016/01/21(木) 09:20:33.26ID:y+dNRHZwまともに確認すらせずに返答するしな
0912デフォルトの名無しさん
2016/01/21(木) 10:50:16.84ID:RQbtFNgK>>908
Releaseでもdivだね
>>909
unsigned intの9や10での割り算って言ってるだろアホ
>>910
定数なんざ問題にしてねーよ
定数ならシフト使うこともあるって俺は>>895で書いた
0913デフォルトの名無しさん
2016/01/21(木) 11:00:46.87ID:TVvRrwr+それは変数が9か10かを確かめるコードが出るって言ってるのか?
さすがにそんなコードは出ないだろ
unsignedの定数での割り算ならさらに簡単になるだろうしな
0914デフォルトの名無しさん
2016/01/21(木) 11:05:36.66ID:RQbtFNgKこれはとんだ勘違いだった謝る
0915デフォルトの名無しさん
2016/01/21(木) 11:23:15.37ID:TVvRrwr+0916デフォルトの名無しさん
2016/01/21(木) 13:00:57.22ID:X8Ey5hke0917デフォルトの名無しさん
2016/01/21(木) 14:02:30.61ID:y+dNRHZwシフト演算とdivじゃ10倍以上の差があるのにな
0918デフォルトの名無しさん
2016/01/21(木) 14:15:16.66ID:Ln13efwQ0919デフォルトの名無しさん
2016/01/21(木) 14:55:52.13ID:Ln13efwQ片方はemplace、もう一方は emplace_after だし、挿入位置違ってきますよね。
抽象的に、リンクで繋ぐ系のコンテナを貰って、条件に合うところに幾つか要素を挿入します(listでもforward_listでも結果は同じになります)って関数を自然に書けるものなのでしょうか? それともメタプログラミング必須ですか?
0920デフォルトの名無しさん
2016/01/21(木) 15:13:19.94ID:zscSzf1M0921デフォルトの名無しさん
2016/01/21(木) 15:21:02.57ID:F7LwJmHZSTL(standard template library)の横断なんだからメタプロ必須
traits一個作るだけ
0922デフォルトの名無しさん
2016/01/21(木) 15:32:17.65ID:+1Wa9Hdcほら、傲慢は美徳って言うし…(意味が違います
0923デフォルトの名無しさん
2016/01/21(木) 16:05:24.51ID:RQbtFNgK定数の2^n以外の場合については俺が間違いだったことを認めるから
昨日のe8aI9wBzは俺の>>900の質問に答えてくれないかな
0924デフォルトの名無しさん
2016/01/21(木) 16:16:04.74ID:RQbtFNgK俺I6UYKzry=RQbtFNgKが試してみた限り
Skylakeのdivでは2^nかどうかでは差は見られないんだが
差が出る「最近の高性能CPU」って例えば?是非教えてほしいな
0925デフォルトの名無しさん
2016/01/21(木) 16:40:30.24ID:zscSzf1M結果が小さくなる方が速く終わるっぽい
0926デフォルトの名無しさん
2016/01/21(木) 17:15:24.08ID:RQbtFNgKちなみにCPUは何ですか?
こっちでは(Skylake+GCC4.8.4)では結果が小さくなるようにしてもdiv系命令使ってる限り差は出ないけど
0927デフォルトの名無しさん
2016/01/21(木) 17:40:25.35ID:zscSzf1M1.c
unsigned int a (unsigned int a)
{
return 1111111 / a;
}
2.c
unsigned int a(unsigned int);
int main ()
{
int i;
for (i = 0; i < 100000000; i++)
a (10000000);
return 0;
}
このコードだとa(1)とか10000000とかが一番速く終わって2が一番遅くなる
0928デフォルトの名無しさん
2016/01/21(木) 17:44:54.10ID:zscSzf1Mこれだと全部同じだった
0929デフォルトの名無しさん
2016/01/21(木) 18:02:27.03ID:y+dNRHZwintelの文書に書いてあるよ
知らないにしても他の人みたいに動かして確認すればいいのに何なんだコイツは
0930デフォルトの名無しさん
2016/01/21(木) 18:05:51.20ID:Ln13efwQback()やsize()すら無いって・・・
0931デフォルトの名無しさん
2016/01/21(木) 18:11:37.46ID:0O01DQba0932デフォルトの名無しさん
2016/01/21(木) 18:43:50.40ID:E9KCKHCxそのような自説を持ってるのはQだけです
だが最後に自分の誤りを認識した時点で素直に謝れるメンタル だ け は凄いと思うわ
0934デフォルトの名無しさん
2016/01/21(木) 19:27:35.76ID:Ln13efwQメタプロはまだぼくには早いなぁ
0935デフォルトの名無しさん
2016/01/21(木) 19:41:52.93ID:hKcolSLCつい面倒なので wp.lock()->hoge() と横着しちゃうんですが、いつか痛い目みそうな予感がします。
上手い具合に何とかする方法ないでしょうか?
0936片山博文MZ ◆T6xkBnTXz7B0
2016/01/21(木) 19:45:22.06ID:ypubXGFS{
...
}
0937デフォルトの名無しさん
2016/01/21(木) 20:09:41.71ID:ypubXGFS0938デフォルトの名無しさん
2016/01/21(木) 20:34:19.36ID:LqtdmCnCsize( ) はまだしも back( ) のためのポインタケチるためのものだし、当たり前だろ
0939デフォルトの名無しさん
2016/01/21(木) 21:59:56.82ID:Ln13efwQ0940デフォルトの名無しさん
2016/01/21(木) 23:10:02.14ID:H8Alaf9u>if (auto ptr = a.lock())
copy elisionが期待できるとしても無駄なコピー/ムーブが
発生しうる書き方はどうも落ち着かない。
auto &&と書きたくなってくる。
0941デフォルトの名無しさん
2016/01/21(木) 23:35:41.37ID:ySY5R7YZ0942デフォルトの名無しさん
2016/01/22(金) 06:57:40.42ID:xsHc+uK/0943デフォルトの名無しさん
2016/01/22(金) 07:49:31.44ID:KaWUxaNQそんなどこぞの女王みたいな事言ってたら、デストラクタが暴動を起こすぞヽ(^。^)ノ
0944デフォルトの名無しさん
2016/01/22(金) 07:54:12.64ID:nKA5Ublh0945935
2016/01/22(金) 10:14:57.31ID:5LnUGiwJ今までそうしてきました。
elseの中でどのクラスのどの関数なのかエラーメッセージを出したりしてたんですが、
面倒臭くなって質問した次第です。
0947デフォルトの名無しさん
2016/01/22(金) 18:21:29.83ID:iI4n/Grb0948935
2016/01/22(金) 20:25:00.39ID:5LnUGiwJ相互参照させる場合、前者は後者への強参照を、後者は前者への弱参照を
メンバとして持つのが普通だと思ってたのですが、もしかして逆なんですか?
0949デフォルトの名無しさん
2016/01/22(金) 21:19:55.44ID:gy9aPLY5それだと親が生きてる限り子への参照が無くならない。
明示的に子の削除をしなければならなくなる。
>>947なら子への参照が無くなればその子は消える。
全ての子が消えれば親も自動的に消える。
0950デフォルトの名無しさん
2016/01/22(金) 21:59:23.10ID:9qqofano子が親のweak_ptrを持つのはあまり旨みがないというか、生ポインタでも良いんじゃね?ってなる
0951デフォルトの名無しさん
2016/01/22(金) 22:06:48.94ID:9qqofano子が親のshared_ptrを他のオブジェクトに渡すとかという場面で
生ポインタじゃなく、子が親のweak_ptrを持つのも一応意味があるっちゃあるが
逆の方が何かと都合がよいことが多いのだ
なにせ子が生きている間は親も生きているわけだろうから
親をweak_ptrで持っていてもnull_ptrが返ってくることは無いので
0952デフォルトの名無しさん
2016/01/22(金) 22:10:32.65ID:63yfy9Byこのサイトの問題4.4で、何も入力せずenterを押すと入力を終えるの部分をどうやれば作るか教えて下さい
while (1) {
cin >> a;
if (a.length()==0) {
break;
}
このように入力した文字をaにいれてaの長さが0ならループを抜けるようにしたのですがうまくいきません
0953デフォルトの名無しさん
2016/01/22(金) 22:17:40.62ID:fbzf1CVx0954デフォルトの名無しさん
2016/01/22(金) 22:26:02.40ID:63yfy9By改行文字とはendlのことですか?
判定する所でa==endl としてもエラーが出ます
0955デフォルトの名無しさん
2016/01/22(金) 22:33:49.62ID:iI4n/Grb依存性が逆に見えたから言ってみただけ
Observerパターンなら親がweak持てばいいけど違うなら逆じゃないよん
循環参照は機能分割が不十分な事による設計ミスのが多いよ
0956デフォルトの名無しさん
2016/01/22(金) 22:42:11.03ID:BMlJwOmj持ち出すあたりが既に設計の誤りの可能性大。
というかshared_ptr使ったコードは高確率で糞コード。
0957デフォルトの名無しさん
2016/01/22(金) 22:45:56.01ID:iI4n/Grbstring str;
while( getline(cin,str) && str.length() ){
処理
}
0958デフォルトの名無しさん
2016/01/22(金) 22:58:26.71ID:63yfy9Byすみません、よくわかりません
getline関数はこのサイトでまだ扱ってないので使い方がわからないのと、どうしてそのコードで入力が空白かどうか判定できるのでしょうか?
0959デフォルトの名無しさん
2016/01/22(金) 23:06:21.99ID:iI4n/Grbgetline(cin,str) // cinの入力を一行strに取り込む(改行文字なし)、失敗で偽
str.length() // 1文字以上なら真、0文字なら偽
このスレは怖い人がいっぱいいるから質問するなら下のにしなさい
【初心者歓迎】C/C++室 Ver.97【環境依存OK】
http://peace.2ch.net/test/read.cgi/tech/1439849418/l50
0960デフォルトの名無しさん
2016/01/22(金) 23:12:12.68ID:PuO012nm一番攻撃的なのはお前なんだが
0961デフォルトの名無しさん
2016/01/22(金) 23:28:13.82ID:63yfy9By理解できました。
ありがとうございます
0962デフォルトの名無しさん
2016/01/23(土) 00:09:49.18ID:oOoz6Pehずいぶん攻撃的だねえ・・・
0963デフォルトの名無しさん
2016/01/23(土) 00:10:09.38ID:ACxJywqs希ガス
0964935
2016/01/23(土) 00:54:21.22ID:M1o1eQTVこの糞コードを書いたときの流れはこんな感じでした。
クラスもインスタンスもたくさんあってメモリリーク怖いから、とりあえずインスタンス化には
スマートポインタshared_ptr使っとこう。
↓
そういえばクラス関係は 国→県→市→番地 みたいな階層構造になってるんだった。
(左側クラスは右側クラスを複数含む)
↓
じゃあメンバでvector<shared_ptr<class>を持たせよう。
↓
逆方向 国←県←市←番地 にものアクセス欲しいな。
↓
shared_ptrメンバじゃ循環参照になってしまうから、weak_ptrメンバにしとくか。
↓
weak_ptrいちいちlock()すんのめんどくせー。
↓
>>935に至る。
まぁ事実まともな設計とか全くしたことない素人なんですが、改めて書き下してみると酷いな・・・
0965935
2016/01/23(土) 00:59:37.64ID:M1o1eQTV考えてみたのですが、こんな感じで合ってるでしょうか?
親クラス(管理側)をP、子クラス(非管理側)をCとして、
�@PはCをメンバとして所有する。複数所有したいならvector<C>とする。
�ACはPへアクセスする必要があるなら、Pへの参照メンバを持たせる。
�BPのvector<C>メンバの並び順をCの内部状態によって変えたいなら、vectorではなくlistにする。
�Bが正しいか気になります。
0966935
2016/01/23(土) 01:03:44.65ID:M1o1eQTVきちんと考えていない、つまり設計が不十分な可能性を疑うべき、ということでしょうか。
>>955さんの
>循環参照は機能分割が不十分な事による設計ミスのが多いよ
や、>>956さんの
>というかshared_ptr使ったコードは高確率で糞コード。
はそういう意味だったんですかね。
そうするとスマートポインタが主として登場すべき場面とは、関数内でテンポラリ的にインスタンスを作り
それを他の関数に渡す等のごにょごにょした作業をしたいときなんでしょうかね?
なんかレスが多くなってすみませんが、指導していただけると助かります。
0967デフォルトの名無しさん
2016/01/23(土) 02:07:22.97ID:ACxJywqs現実のアーキテクチャで走るプログラムは
(1) アルゴリズムと、(2)データ構造と、(3)スレッド間通信
からなる
このうち、(1)はの範囲は処理の順序が命なのであって、
設計完了=処理の順序が明らか、ということなので設計完了したならばスマポの出番など無い
一方(3)は、スレッドAからスレッドBにデータを渡しっぱなしにできたら
同期化が簡単になって無駄な実行時コストも抑えられるからスマポの出番と言える
ていうかimmutableなオブジェクトを他のスレッドで破棄させるケースぐらいしか
スマポの使用は正当化されない
残りの(2)は、(1)に属することもあれば(2)に属することもある
(スマポ自体のデータ構造とか、カーネル内のデータ構造とかは(2)の範疇
スマポ自体の是非とは関係ないので省略
0968デフォルトの名無しさん
2016/01/23(土) 02:09:35.49ID:oOoz6Peh循環参照のミスというのは同層のことで、親子のただの相互参照は一般的だよ
�Bは速度がいらないならvector、他はそんなに問題あるとは思えない
weak_ptrのエラー分岐が億劫ならマクロにしたらというぐらい
人に教える程の立場でもないのでこれぐらいにしておきます
0969デフォルトの名無しさん
2016/01/23(土) 02:12:14.42ID:ACxJywqs誤:残りの(2)は、(1)に属することもあれば(2)に属することもある
(スマポ自体のデータ構造とか、カーネル内のデータ構造とかは(2)の範疇
正:残りの(2)は、(1)に属することもあれば(3)に属することもある
(スマポ自体のデータ構造とか、カーネル内のデータ構造とかは(3)の範疇
あと補足で、std::unique_ptr<T>は(1)の範疇でも実装上のテクニックとして多用することもあるが
あんまり賢くないのでここではスマポに含めないものとする、
0970デフォルトの名無しさん
2016/01/23(土) 06:32:51.71ID:9P3xRRKyshared_ptrを使うのはその名の通り特定のオブジェクトによる所有や集約の関係ではない場合、生存期間の管理が疎結合の場合に使う
国の知らない間に一部の市が消えることがあるか?
市より先に国が消えることがあるか?
国→県→市→番地 なら多くの場合は「国が複数の県を所有または県は国に集約」のパターンになることが多い
0971デフォルトの名無しさん
2016/01/23(土) 08:02:49.16ID:+qmFdC28殺す必要がない(vectorのメンバとして作られるからあとで自動で死ぬとか)なら子が持つ親のポインタはスマポじゃなくて生ポインタでいいんじゃない?
ポインタじゃなくて参照型のメンバ変数持ってルートノードは自分への参照でもいいけど、==演算子のオーバーロードは面倒くさそうだし結局親ノードの判定にポインタの比較しそうな気がするわ
0972デフォルトの名無しさん
2016/01/23(土) 10:58:19.45ID:xWQTZZB90973デフォルトの名無しさん
2016/01/23(土) 11:41:45.07ID:2xi+SZqr// Only one element by one partition.
前置詞わかんないです><
0974デフォルトの名無しさん
2016/01/23(土) 11:56:10.39ID:BpJ08GBs自信ない
0975デフォルトの名無しさん
2016/01/23(土) 12:05:54.61ID:bbKQS1co// A partition has only one element
// Only one element for(in) each partition
// At most one element can be appeared in each partition
// A partition has at most one element
// Multiple elements are prohibited in a partition
// 一つのパーティションに一つの要素だ。日本語も読めない馬鹿はクソして寝ろ
0976デフォルトの名無しさん
2016/01/23(土) 12:32:51.86ID:Tt4ej2EeOnly one element in one section
0977デフォルトの名無しさん
2016/01/23(土) 12:40:10.50ID:9P3xRRKyいえそれはパーティションでなくpartitionです
用語と一般名詞の区別ぐらいはした方がいい
0978デフォルトの名無しさん
2016/01/23(土) 12:42:14.32ID:Tt4ej2Ee働くならパーティションのある会社の方がいいぞ?
0979デフォルトの名無しさん
2016/01/23(土) 12:44:29.00ID:VPAh/uPo0980デフォルトの名無しさん
2016/01/23(土) 12:44:52.04ID:9P3xRRKy文脈を読まずに単語レベルで反応してしまったんだろうな
0981デフォルトの名無しさん
2016/01/23(土) 12:48:38.88ID:Tt4ej2Ee頭大丈夫か?
0982デフォルトの名無しさん
2016/01/23(土) 12:48:39.35ID:ZeOvtoAd0983デフォルトの名無しさん
2016/01/23(土) 13:42:00.33ID:7KDEJB/l0984デフォルトの名無しさん
2016/01/23(土) 13:43:05.61ID:7KDEJB/l0985964
2016/01/23(土) 14:42:34.05ID:M1o1eQTVありがとうございます。さっそく糞コードを修正します。
いやはやとんでもない勘違いをしていた・・・
0986デフォルトの名無しさん
2016/01/23(土) 16:52:12.93ID:2O2OeDHJ0987デフォルトの名無しさん
2016/01/23(土) 19:41:20.94ID:2xi+SZqrOnly one element can belong to each partitioned range.
こうかな
0988デフォルトの名無しさん
2016/01/23(土) 19:50:19.75ID:MQWxukSB0989デフォルトの名無しさん
2016/01/23(土) 20:00:22.29ID:xc9KTHaP0990デフォルトの名無しさん
2016/01/23(土) 20:07:07.21ID:xc9KTHaP仕様上でpatitionの意味がはっきりしてればわざわざrangeつけるのは普通の表現としてはクドい
『一つのパーティションにつき一つの要素のみ』なら
each partition can have only one element.
とかでいいんじゃないか?
0991デフォルトの名無しさん
2016/01/23(土) 20:24:11.82ID:xc9KTHaP「patitioned(部分集合化)されたrange」のことだからな
>>973のいうパーティーションはそれぞれの部分集合のことだろ
0993デフォルトの名無しさん
2016/01/23(土) 21:46:41.75ID:2O2OeDHJ0994デフォルトの名無しさん
2016/01/23(土) 21:52:02.81ID:xc9KTHaP0995デフォルトの名無しさん
2016/01/23(土) 23:04:39.12ID:HdItgJjm0996デフォルトの名無しさん
2016/01/23(土) 23:16:08.61ID:HdItgJjmhttp://peace.2ch.net/test/read.cgi/tech/1453557975/
0997デフォルトの名無しさん
2016/01/24(日) 00:03:08.58ID:XILi4z/PおっとQの悪口はそこまでだ
0998デフォルトの名無しさん
2016/01/24(日) 00:18:02.59ID:ZhXA5MpP0999デフォルトの名無しさん
2016/01/24(日) 01:39:42.78ID:+srqsch51000デフォルトの名無しさん
2016/01/24(日) 04:52:41.80ID:vt7CmcBy10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
http://pink-chan-store.myshopify.com/
レス数が1000を超えています。これ以上書き込みはできません。