C++相談室 part154at TECH
C++相談室 part154 - 暇つぶし2ch386:デフォルトの名無しさん
21/01/31 17:00:34.53 ZnRwde8F.net
[補足]
なお、Cの伝統だと、
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); }
ではなく、
#define b(x,y) do {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } while(0)
と書く。
こうしておくと、このマクロを{}ブロックを伴わないif文に書いたときに異常動作
をしない。

387:はちみつ餃子
21/01/31 17:08:36.84 +XHxoAeu.net
>>378
素直に読めばグローバルスコープで予約されているものは
グローバルスコープで予約されているという意外の意味を読み取ることは出来ない。
そこからローカル変数も制約されるという主張が出てくる理由が不在なんで、
何を言うてんのやろ……? ってなるわけ。

388:デフォルトの名無しさん
21/01/31 17:11:34.77 ziXVeJXQ.net
>>350
in instantiation of function template specialization ... requested here
というエラーが出ます

389:デフォルトの名無しさん
21/01/31 17:14:33.59 fCVb5Gn/.net
>>376
だから二重評価が問題になるようなことをマクロでやるなって
その例だってinlineで書けるだろ
邪道なやり方を保護するために
本筋が迷惑を被るのは本末転倒だ

390:デフォルトの名無しさん
21/01/31 17:15:05.39 ZnRwde8F.net
>>380
「All identifiers that begin with an underscore are always reserved
 for use as identifiers with file scope in both the ordinary and
 tag name spaces.」
「file scopeを持つ識別子として使用されるために予約されている」
だべ?
block scopeを持つ識別子として使用されたら、話がおかしいと思うが。
「この自動車は、仕事で使うために予約されています」
の場合、その自動車を私用で使えば、規則違反だよね。

391:デフォルトの名無しさん
21/01/31 17:15:45.54 fCVb5Gn/.net
int _x; //こんなのがあっても
#define b(x,y) {int _x=x; int _y=y; f(_x,_y); g(_x,_y); } //ブロックスコープで保護されるだろうが

392:デフォルトの名無しさん
21/01/31 17:19:07.49 ZnRwde8F.net
>>382
でも、_ が最初に来る名前をアプリが使っちゃいけない、というのは伝統的にそういう
ことが一番の目的だと思うぞ。
もう一つは、コンパイラの内部でこっそり使う場合があって、それと知らないうちに
衝突する可能性が僅かにあるため。
なぜこっそり使うかと言うと、絶対に衝突しないようにコンパイラ側を
書こうとするとコンパイラ作りに手間がかかるから。
もし、アプリ側が命名規約を守ってくれていれば、コンパイラ作りが楽になる
ことがある。

393:デフォルトの名無しさん
21/01/31 17:20:06.45 ZnRwde8F.net
>>384
b(_y,_x)
と書いたらどうなるか考えてみたらしだんご。

394:デフォルトの名無しさん
21/01/31 17:25:17.52 fCVb5Gn/.net
>>385
おまえさんはコンパイラ屋か?
そうだとして同業者は__builtin_va_argのように注意深くやってるぞ
自分らのエゴのために客に制限をかけるようなことを
でかい声で叫びまくるのはやめてくれ

395:デフォルトの名無しさん
21/01/31 17:30:48.87 ZnRwde8F.net
>>387
まあ、本当はコンパイラ内部でこっそり使う場合、絶対に衝突しないような
もっと変な名前を使っているから大丈夫なんだ。
起動時の TickCounter の値を変数名の一部に入れたりとかね。

396:デフォルトの名無しさん
21/01/31 17:37:15.73 2WBeknRq.net
>>383
ローカルスコープで同じ名前の別変数を定義するのは「その自動車を私用で使う」ことには当たらないって言ってるの

397:デフォルトの名無しさん
21/01/31 17:42:24.07 /1NNOLNs.net
ヘッダーファイルに書くか、ソースファイルに書くかの違いも大きい。
ヘッダーファイルに書くときは名前衝突に対する細心の注意が必要。

398:デフォルトの名無しさん
21/01/31 17:45:15.36 fCVb5Gn/.net
>>386
{int _x=_y; int _y=_x; f(_x,_y); g(_x,_y); }
どうなるって言いたいんだ?

399:デフォルトの名無しさん
21/01/31 17:51:16.48 /1NNOLNs.net
C/C++の場合、スコープだけ意識するのは不十分で、ヘッダーかソースかで厳格さを変える柔軟性が必要。
ヘッダーに書くと影響範囲が大きいから。

400:デフォルトの名無しさん
21/01/31 17:57:13.23 fCVb5Gn/.net
テンプレートなんか普通にヘッダに内容全部を書くが
マクロでバカやるやつがいなければ平和だよ

401:デフォルトの名無しさん
21/01/31 17:58:49.95 A8yllSCF.net
ローカルスコープでも _x が禁止だというなら >>346 のマクロ a 定義内で _x を使っていい理屈もわからんよな。

402:デフォルトの名無しさん
21/01/31 18:55:26.91 gXTMTlGe.net
std::pair<>を継承してquadを作る場合どうなりますか?

403:デフォルトの名無しさん
21/01/31 18:58:05.19 gXTMTlGe.net
std::regexが意外と使える子に成長してますが、標準化委員会では捨て去る提案まで出てるそうで。

404:デフォルトの名無しさん
21/01/31 19:37:14.68 /1NNOLNs.net
std::regexはプロパティが貧弱なので結局、従来の正規表現ライブラリ使う羽目になる。
std::regexと互換性のあるインターフェースを持つ正規表現クラスを提供するよう呼びかけるのが現実的。

405:デフォルトの名無しさん
21/01/31 19:51:04.44 vFnk+kXo.net
順序付き pair って自分で順番に格納するのと2要素のsetにするのどっちが良いですか

406:デフォルトの名無しさん
21/01/31 20:39:53.24 /1NNOLNs.net
pairはSTLのアルゴリズムの恩恵を得るための物。
自宅の郵便受けを豪華にしたところで、郵便事業には何の関係もない。ただの趣味の世界。

407:デフォルトの名無しさん
21/01/31 21:08:09.18 vFnk+kXo.net
set< pear<int, int> > で、ある数を含む pear を高速に検索する方法ってある?

408:デフォルトの名無しさん
21/01/31 21:47:36.00 jyYnHelr.net
set<int, vector<pair<int,int>*>>
元の集合に1億個程度のペアが入ってるとすると、住所録めいたものをあらかじめ生成しておく
配列でやっても速そう
list[m].empty()
こういうリストで空っぽかどうかわかればいいわけだ
vector<vector<pair<int,int>*>>>;
それならドでかい二次元配列に入れた方がラクかもしれない
連想配列でも出来る
map<int ,vector<pair<int,int>*>>>
静的な話だったが動的つまり追加と検索が交互に起こるとおそらく話は違ってくる
全部試して早かったモンが高速である、程度の他愛ない結論に落ち着く

409:デフォルトの名無しさん
21/01/31 22:01:19.63 gvpDZJRs.net
構造体にしろよバカども
読みにくいだろ

410:
21/01/31 22:54:08.94 wKQ2AmTw.net
>>333
>>339
では _x ではなく x_ にしようっかな‥‥

411:デフォルトの名無しさん
21/01/31 23:01:41.96 eyFvwlDf.net
googleスタイルガイドはそちらを推してるな

412:デフォルトの名無しさん
21/02/01 01:17:42.16 FSry25xS.net
>>391
int _x=_y;
int _y=_x;
ここの二行目の右辺の_xは、b(_y,_x)の第二引数の_xではなく、一行目
で宣言した_xになっているので、b(_y,_x)の第一引数の_yになる。つまり、
int _x=引数の_y;
int _y=引数の_y;
となるので、{}の中の_x, _yは、どちらも引数の_yの値に等しくなってしまう。
これではマクロ作者が意図したことではなくなってしまう。

413:デフォルトの名無しさん
21/02/01 01:19:32.38 FSry25xS.net
>>394
まあ、それはもっともな指摘なのだが、アプリ本体では使用禁止で、
マクロでは使用可能と勝手に解釈してしまうのが一つの流儀。

414:デフォルトの名無しさん
21/02/01 01:22:56.68 FSry25xS.net
>>389
そうではなくて、ローカルスコープで使うことそのものが、file scope
で使ってないことに当たるので、規約違反と言うことになると解釈できる
気がするんだ。
なぜそんなルールにしたのかは分からんがな。

415:デフォルトの名無しさん
21/02/01 03:22:30.15 fw9rYrIy.net
>>405
残念だったね。インライン関数使おうね。
>>406
あなたの流儀を規格の定めであるかのように話すのは迷惑なのでやめてくださいね。
>>407
file scope で予約されてる名前を file scope で使ってないなら問題ないね。
規約違反などという解釈にはならない。気のせい。そんなルールになってない。ってことで終われよ。

416:デフォルトの名無しさん
21/02/01 07:01:58.51 v6ebtUL1.net
>>400
unordered_map<int, int>

417:デフォルトの名無しさん
21/02/01 07:30:17.18 LhepLs74.net
>>406
マクロ定義内の仮引数名は当のマクロ定義外の何者とも関係しないのでは…
いわゆる束縛変数

418:デフォルトの名無しさん
21/02/01 07:38:30.21 LhepLs74.net
として安全に取り扱われる
一方>>346の_xはa(x)が展開された結果が他のプリプロセッサ定義で再置換され得るなら危険
これが起きるかはプリプロセッサの仕様(規格)を見たら白黒付くが
個人的には君子なので危うきには近づかないことに死体、

419:デフォルトの名無しさん
21/02/01 08:09:47.67 v6ebtUL1.net
うちの若いのがあんなアホマクロ書いてたら張っ倒す
まあ、やらかしそうなのはいないけど

420:デフォルトの名無しさん
21/02/01 09:26:53.82 5yr9aQzL.net
>>346
そもそもそのマクロで生成される変数はファイルスコープでないから、そもそも問題外では?
仮にファイルスコープな変数を宣言するようなマクロでも、ユーザが意図せず

421:デフォルトの名無しさん
21/02/01 11:43:32.41 xFB8fPis.net
仕事に情熱が持てなくなった

422:デフォルトの名無しさん
21/02/01 11:43:38.91 VhfMLcQM.net
>>346
アホだ

423:デフォルトの名無しさん
21/02/01 12:06:54.06 ZelzH3+k.net
>>414
コロナの影響だろな。
福島大爆発の影響も計り知れない。
「原爆ぶらぶら病」で検索してください。

424:デフォルトの名無しさん
21/02/01 12:30:15.68 jyRtFT93.net
>>408
>file scope で予約されてる名前を file scope で使ってないなら問題ないね。
そうじゃない。
英語原文を読めば、file scopeで予約されているのではなく、file scopeで
使用するために予約されているのだ。
だから、file scope以外で使用することが禁止されている。

425:デフォルトの名無しさん
21/02/01 12:32:18.30 jyRtFT93.net
>>417
日本語で言うなら、「file scope 専用」。

426:デフォルトの名無しさん
21/02/01 12:46:40.95 /T40sBmV.net
>>414
ちゃんと飯を食え。
週末はちゃんち休め。
年10日は連続した休暇をとれ

427:デフォルトの名無しさん
21/02/01 12:55:04.41 ioMwojjO.net
>>417
その一文ばっかりやたらこだわるけど
これが属しているセクションの名前って「17.4.3.1.2 Global names」なんだわ
グローバル名前空間の名前以外については言及してないの
ドラフトならインターネットで無料で見られるんだからこの辺の全容見てきな?

428:デフォルトの名無しさん
21/02/01 13:14:13.18 Z79JHlVc.net
>>417
あらゆる場所で使ってはいけないのなら、7.1.3でわざわざ1つ目と対比させるように使用用途を限定して記載した理由を説明してよ。
普通はコンパイラ実装者のために予約されている、だけで十分でしょ

429:デフォルトの名無しさん
21/02/01 13:45:48.95 fos4FOVO.net
仕事に情熱が持てなくなった

430:デフォルトの名無しさん
21/02/01 13:50:50.97 jyRtFT93.net
URLリンク(www.learncpp.com)
Second, you should avoid naming your identifiers starting with an underscore, as these names are typically reserved for OS, library, and/or compiler use.

431:デフォルトの名無しさん
21/02/01 14:08:01.06 fos4FOVO.net
>>373
obj& operator [] (int i) {return elem[i];}
もちろんelem[]の定義はobj elem[];
obj.shape() も実装すると便利

432:デフォルトの名無しさん
21/02/01 14:13:00.08 fos4FOVO.net
>>416
「コロナでゴロゴロ病」

433:デフォルトの名無しさん
21/02/01 15:47:43.70 Z79JHlVc.net
>>423
そのサイトを紹介して何の証明になるの?

434:デフォルトの名無しさん
21/02/01 16:16:30.24 ZelzH3+k.net
>>426
URLリンク(isocpp.org)

435:デフォルトの名無しさん
21/02/01 16:22:14.79 ZelzH3+k.net
C++ is the only real language for expert developers.

436:デフォルトの名無しさん
21/02/01 16:55:19.50 fos4FOVO.net
C/C++は好きだし比較的最強の部類だと思うけど
夢未過ぎは判断を誤るから色んな言語を適材適所に使えるようになるのが理想

437:デフォルトの名無しさん
21/02/01 17:40:26.58 LhepLs74.net
システム記述言語はアセンブラを除けばこの世にCとC++とRustしか、

438:デフォルトの名無しさん
21/02/01 17:46:42.82 ZelzH3+k.net
中国人のありがたいお言葉ですぞ。

439:デフォルトの名無しさん
21/02/01 18:02:36.06 jyRtFT93.net
大体、この板には中国人や韓国人はほとんど来ず、来ているのはアメリカ人
やヨーロッパやアフリカが多いらしい。

440:デフォルトの名無しさん
21/02/01 18:44:36.44 +21BJdPm.net
いやrustが最強でしょww

441:デフォルトの名無しさん
21/02/01 18:47:23.23 CDWd/LQ7.net
Goは駄目なん?

442:デフォルトの名無しさん
21/02/01 18:57:50.94 0s4gr52A.net
自作の構造体をsetに入れたいときって operator < さえ定義しとけば良いの?
eraseとかは全部のメンバが同じものを見つけて消してくれると思って良い?

443:デフォルトの名無しさん
21/02/01 21:08:59.66 ZelzH3+k.net
検索するとひろみをお勧めしてくる時点で無理だった。

444:デフォルトの名無しさん
21/02/01 21:34:17.50 ZelzH3+k.net
しかもチップも取るんかーい!

445:デフォルトの名無しさん
21/02/01 22:43:42.23 CtNYZU7D.net
>>435
erase含め、同値性は!(a<b)&&!(b<a)で判定される
全メンバ一致で同値と�


446:ンなしたいなら辞書順比較する比較関数を定義すればよし



447:デフォルトの名無しさん
21/02/01 22:46:24.33 FbSt8IWH.net
演算子オーバーロードは地雷度高い。

448:デフォルトの名無しさん
21/02/01 22:53:14.56 CtNYZU7D.net
まあ、setに入れるためだけなら演算子オーバーロードするより関数オブジェクト使う方がいいかね

449:デフォルトの名無しさん
21/02/01 23:03:45.93 f9q1oLiO.net
C++の質問じゃないとは思うんですが、上位数ビットを0で埋めたいといった場合は
「0埋めしたいビットを0、他を1にしたもので&演算する」
であってますか?

450:デフォルトの名無しさん
21/02/01 23:11:37.27 ZelzH3+k.net
合ってます。

451:デフォルトの名無しさん
21/02/01 23:17:45.03 f9q1oLiO.net
>>442
ありがとうございます
今までは例えばQWORDの上位3バイトを0埋めしたいってとき(value << 3*8) >> 3*8って言う2命令使う馬鹿な方法でやっていました・・・

452:デフォルトの名無しさん
21/02/02 02:08:00.00 DmcXRB7X.net
へ椅子ブックが少し綺麗になってます。

453:デフォルトの名無しさん
21/02/02 02:10:27.05 DmcXRB7X.net
RedditのC++コミュは17万人、オンラインが500人以上。
凄いね。

454:デフォルトの名無しさん
21/02/02 10:17:10.33 uFATDe77.net
ビット演算の中で最速なのってシフトじゃなかったっけ?
だから下手したら>>443の方がフェムト秒レベルでは微妙に早いんじゃない?

455:デフォルトの名無しさん
21/02/02 10:29:21.33 kGc73xZq.net
命令語長がマスク分だけでもQWORDに対して、シフトなら1バイト程度か

456:デフォルトの名無しさん
21/02/02 12:37:23.36 vWAdhQ36.net
>>446
CPUの世代やアーキテクチャによって違うが、
Latencyが、Shiftの方がandより少し遅いことがある。

457:はちみつ餃子
21/02/02 12:49:48.88 +MtixY9O.net
>>434
Go は GC が前提にあるから少し制約が強いけども、
OS のカーネルを書くのでもない限り思ったより足かせにならないという評価はあるみたいだね。

458:デフォルトの名無しさん
21/02/02 13:08:50.07 aIAA0dxH.net
Goはクソすぎるから駄目だ
何が駄目といってまず名前が駄目

459:デフォルトの名無しさん
21/02/02 13:45:57.34 8HFbTrXI.net
GoはPC初心者用
昔でいういわばBASIC

460:デフォルトの名無しさん
21/02/02 18:03:08.15 FSwj4KRK.net
バレルシフタと単純ゲート
レイテンシも糞もねえだろ

461:デフォルトの名無しさん
21/02/02 18:11:36.53 8HFbTrXI.net
でもその縛りプレイが大好きな変人も居る

462:デフォルトの名無しさん
21/02/02 22:23:15.74 likaPPB8.net
operator ==も定義しておくとなお良い
==のために<が2回呼ばれるのもアホらしいと感じるはず…
結局std::rel_opsを使って全部定義するという結論に落ち着く

463:デフォルトの名無しさん
21/02/02 22:25:04.30 likaPPB8.net
インテルのやつはバレルシフタじゃない気配がする…
シフト結果をテーブル化した方が速かったことg

464:デフォルトの名無しさん
21/02/02 22:28:35.48 likaPPB8.net
あるいは最大限バレルシフタにしようとしているがパイプライン1段に収まっていないだけかもしれん…

465:はちみつ餃子
21/02/03 00:25:34.21 p0NvFN6a.net
>>443
gcc, clang, msvc で最適化最大で試してみたら and をとるように最適化されたぞ。
主要コンパイラがそのように最適化するということは (前後の状況によるかもしれないけど)
たぶん and のほうが効率的ってことなんだろう。

466:デフォルトの名無しさん
21/02/03 00:38:50.10 53EFMpkm.net
ビットシフトは64bit整数でのコンパイラ解釈が信用できないからAND演算子使うのが確実だと思うけどどうかな。

467:デフォルトの名無しさん
21/02/03 00:51:08.70 5b6XJ+8s.net
>>458
落ち着いてよく考えてみよう
お前がC++で作った成果物のうち、お前自身が書いたコードの割合なんてごくごく僅かに過ぎない
仮にそんなレベルで互換性が当てにならないような環境があったとして、お前が直接書いていない他の99%のコードがまともに動くと本気で思うか?

468:はちみつ餃子
21/02/03 00:54:51.58 p0NvFN6a.net
0xffffffffff とか書いてたら桁数を正しく書けてるか不安になる……
今の C++ だと桁区切りも入れられるけど、
どう入れたら意図がわかりやすいかようわからんし、
シフトで表現するのもありな選択だと思う。

469:デフォルトの名無しさん
21/02/03 01:01:02.57 +m9V7fCu.net
>>458
具体例をお願いできますか?

470:デフォルトの名無しさん
21/02/03 01:20:23.24 53EFMpkm.net
コンパイラがちゃんと32bit整数への丸め警告を出してくれるならいいが、しれっとコンパイルされたらお手上げ。

471:デフォルトの名無しさん
21/02/03 02:47:38.99 +m9V7fCu.net
>>462
丸めって暗黙の型変換のことですか?
シフト演算は特に関係しないと思いますが……

472:デフォルトの名無しさん
21/02/03 06:01:31.58 QcjMAifW.net
>>460
0x0000'ffffull

473:デフォルトの名無しさん
21/02/03 06:29:42.77 y3dS6mbz.net
unsigned long long x = (0x1ULL << 32) - 1ULL;
ならちゃんと動く(と思う)が
unsigned long long x = (0x1 << 32) - 1;
とかだとイマイチ不安が…

474:デフォルトの名無しさん
21/02/03 06:38:54.06 Nl+WsQpo.net
>>465
下の方はイコールの右辺にintしか出てこないのだから、intが32bitの環境なら32bitでしか計算されないだろう

475:デフォルトの名無しさん
21/02/03 10:23:38.02 q8Ed7guF.net
丸めと暗黙の型変換は違うものでは?

476:デフォルトの名無しさん
21/02/03 11:47:09.95 HtH84Poo.net
丸めや打ち切りは浮動小数点数の概念やね

477:デフォルトの名無しさん
21/02/03 13:02:19.58 53EFMpkm.net
ビットシフト記述は自然すぎてソースコードに埋もれてしまう。
64ビットマスクのAND記述は見た目がどぎついので、かえって人間の注意を引くことができる。

478:デフォルトの名無しさん
21/02/03 14:45:43.48 J722wycU.net
なにいってんだこいつ

479:デフォルトの名無しさん
21/02/03 15:50:32.48 pE1foWCw.net
>>465
やっぱり、32BITの時が一番プログラミングし易かったな。
64BITになると、64BITと32BITを区別して書く必要が出てきて、
書くのが面倒になった。

480:デフォルトの名無しさん
21/02/03 19:12:23.88 XaYGR0Wv.net
そう?ポインタサイズくらいしか違いなくない?

481:デフォルトの名無しさん
21/02/03 21:29:02.90 53EFMpkm.net
まじめにC/C++標準型size_tを使っている人には32bitと64bitの処理切り分けが地味に辛い。

482:デフォルトの名無しさん
21/02/03 22:36:28.54 y3dS6mbz.net
>>465の下の方のやつは符号拡張されたりする気がするorz

483:デフォルトの名無しさん
21/02/03 22:40:25.83 Ea4RwHR/.net
>>424
> obj& operator [] (int i) {return elem[i];}
> もちろんelem[]の定義はobj elem[];
objは行列クラスで、elemはobjのメンバで行列要素を格納する一次元配列、で合ってますよね?
class obj{
 array<int, ?> elem;
public:
 obj& operator [] (int i) {return elem[i];}
};
ということですか?

484:デフォルトの名無しさん
21/02/04 03:22:45.38 R0EDVzG0.net
>>473
size_t は、型名が長いし _ も含んでいるし、打つのが辛い。
それにコードに締める長さも長くなるので画面が狭くなるし。

485:デフォルトの名無しさん
21/02/04 04:17:06.60 SkZt7jTc.net
>>473
まじめに、て別にsize_t使ってたら偉いわけじゃない
サイズを表したいけどいちいち考えたくない場合の選択肢だぞ

486:デフォルトの名無しさん
21/02/04 11:32:06.33 sIhIIpMX.net
size_t型はSTLを使う人なら避けて通れない。

487:デフォルトの名無しさん
21/02/04 11:40:48.70 ZzRKCYY/.net
>>471


488: それ本来そこにあった問題に気付いていないだけだったと思うぞ



489:デフォルトの名無しさん
21/02/04 11:44:02.03 ZzRKCYY/.net
>>475
class obj{
 array<obj, ?> elem;
public:
 obj& operator [] (int i) {return elem[i];}
};

490:デフォルトの名無しさん
21/02/04 12:06:17.02 DWE1XJjK.net
>>480
それってarrayのarrayとかvectorのvectorとか配列の配列として行列を作るのと同じですよね?
一次元配列に要素を格納しておいて[][]でアクセスするのは不可能なんでしょうか
row majorやcolumn majorを自由にできる、等の理由でそちらの方が好ましいのですが

491:デフォルトの名無しさん
21/02/04 12:29:12.61 waKgX41w.net
一次元配列を内包しているクラスのoperator[](int y)が、下記のようなクラスを返すようにすればできる。
class Row {
vector<int>& 一次元配列への参照
int 列数
int y
int& operator[](int x){ return 一次元配列への参照[列数*y+x]; }
};

でも自分ならoperator[]は使わずもとのクラスにindex(x, y)みたいな関数を用意して対処すると思う。

492:デフォルトの名無しさん
21/02/04 13:10:42.29 g2cSm/y9.net
malloc とか new で確保したメモリ領域を使うように
vector ( または array ) をインスタンス化するにはどうすればよいですか?

493:はちみつ餃子
21/02/04 13:13:43.37 ttCVH4wp.net
>>481
こういう雰囲気で他のクラスをひとつ間に入れることでなんとかなる。
URLリンク(wandbox.org)
だけど俺も >>482 の言う通り operator[] にこだわらずに適当なメンバ関数でやる方法を推すわ。
実態として二引数なのだし、記法のためだけに余計な定義をするの馬鹿らしいと思う。
提案としては hoge[i, j] みたいな感じで二引数のインデックスを受け取れるようにする案は出てるんだが、
現状ではこのときのカンマは普通にカンマ演算子として解釈される。
前準備として、 C++20 からはブラケット内でのカンマは非推奨にするという変更が入っている。
URLリンク(timsong-cpp.github.io)

494:はちみつ餃子
21/02/04 13:20:29.03 ttCVH4wp.net
>>483
ある時点で確保済みのメモリの上にオブジェクトを構築するには
std::uninitialized_default_construct を使う。
でも std::vector 自体を適当なメモリの上に構築できても
std::vector 内で使うメモリは std::allocator で確保しようとするから、
必要ならアロケータを定義する必要がある。

495:デフォルトの名無しさん
21/02/04 15:40:11.75 R0EDVzG0.net
>>479
いや、全て32BITは、それに全て統一することで速度とメモリ効率と実用性の
バランスが取れていた。
ところが64BITだと実用上、表せる値の範囲はオーバースペックで
変数のメモリに占めるバイト数が8バイトと余りにも効率が悪い。
なので、多くの数値は32BITとし、必要な部分だけ64BITにするという
面倒な選択を強いられる様になった。
アドレスが64BITなので、それを整数型に入れるためには32BITの整数では
不足するので引きつられて整数も64BITを必要としがちになり、大混乱
が生じている。
(また、メモリーもアドレスを32BITより多くを必要とするアプリは非常に稀。)

496:デフォルトの名無しさん
21/02/04 16:48:02.49 DWE1XJjK.net
>>482
ありがとうございます
ストラウストラップの「プログラミング言語C++」に「行列クラスの設計」なるセクションがあったのを覚えてるので、そちらではどうしていたかも見てみます

497:デフォルトの名無しさん
21/02/04 17:07:22.68 dB2jWvbu.net
unique_ptr<Hoge[]> p(new Hoge[4]{a, b, c, d});
みたいな定義と同時に代入は出来るのですが
(各要素毎に Hoge(a), Hoge(b), Hoge(c), Hoge(d) になりました)
unique_ptr<Hoge[]> p = make_unique<Hoge[]>(4);
だと引数無しのデフォルトコンストラクタが無いといけないし
(そもそも引数無しのデフォルトコンストラクタ作りたくない)
unique_ptr<Hoge[]> p = make_unique<Hoge[]>({a, b, c, d});
とか
unique_ptr<Hoge[]> p = make_unique<Hoge[]>(4){a, b, c, d};
とかはコンパイル出来ませんでした
引数無しのデフォルトコンストラクタがあれば
unique_ptr<Hoge[]> p = make_unique<Hoge[]>(4);
p.reset(new Hoge[4]{a, b, c, d});
だとうまく逝きますが効率が悪い気がします
make_unique は使ってはいけないのでしょうか?

498:デフォルトの名無しさん
21/02/04 17:51:26.68 b9gCdorg.net
>>487
485も見てねー

499:デフォルトの名無しさん
21/02/04 17:52:07.72 b9gCdorg.net
まちがえた。484

500:デフォルトの名無しさん
21/02/04 20:56:33.92 ZyzsEROR.net
配列のunique_ptrは色々と中途半端で使いづらいからオススメしない

501:デフォルトの名無しさん
21/02/04 22:14:32.91 b9gCdorg.net
>>488
unique_ptr<Hoge[]> p;
p.reset(new Hoge[4]{a, b, c, d});
でよいのでは?

502:デフォルトの名無しさん
21/02/04 22:20:26.07 un3OWVjy.net
>>486
32bitアプリでも今どきなら64bit整数を使える処理系は多いだろ
そもそもアドレスを整数型に入れるっていつの時代の人よw

503:デフォルトの名無しさん
21/02/04 22:47:34.63 /RiZUiBF.net
>>493
アドレスを整数に入れるのは過去の話じゃないぞ

504:デフォルトの名無しさん
21/02/04 22:51:09.67 sIhIIpMX.net
intptr_t整数型を使ってたのっていつの時代?

505:デフォルトの名無しさん
21/02/04 23:24:48.23 hMfhfQWp.net
uintptr_tならいつもお世話になっております

506:デフォルトの名無しさん
21/02/05 00:01:41.63 NIkVqohR.net
この手合いのボケを量産するのはC++の害だな

507:デフォルトの名無しさん
21/02/05 01:35:15.82 EB7VAtvO.net
むしろCの害

508:デフォルトの名無しさん
21/02/05 01:52:47.05 xbM9VFWh.net
Rubyって結局勉強しないままPythonの時代になってしまったな

509:デフォルトの名無しさん
21/02/05 04:42:48.12 ZuGfyZDY.net
同様にC++を勉強しないままRustの時代になる

510:デフォルトの名無しさん
21/02/05 09:51:39.70 U76qOqQA.net
>>488
URLリンク(www.it-swarm.jp.net)演算子よりもstd-makeuniqueを使用する利点/826350881/amp/
URLリンク(ja.stackoverflow.com)の利点

511:デフォルトの名無しさん
21/02/05 13:28:24.98 ou/gU5gH.net
c++やらずにrustとか馬鹿量産するだけにしか思えんな。

512:デフォルトの名無しさん
21/02/05 14:10:32.07 Xzu/prlh.net
それ言ったらノーコードがどうたら言ってる奴らはもっとやばそう

513:デフォルトの名無しさん
21/02/05 14:17:08.86 M7C1cdPI.net
ノーコードていってノードツリーみたいなのでフロー管理するやつ
よくゲーム系ツールにありがちだけど、サンプルみたいな単純な処理ならともかく
こみいったフローになってくるとノード間の接続線がものすごいことになって
とても管理しようという気になれない、まさに見た目どおりのスパゲティプログラムに

514:デフォルトの名無しさん
21/02/05 14:18:44.73 ou/gU5gH.net
>>503
それはもう50年くらいずっとそうだろ。
ノーコードとか逆に俺様言語作ってるのとほぼ変わらん状態にしかならんという
しょーもない展開しか見たことない。

515:デフォルトの名無しさん
21/02/05 15:14:07.00 zImWQG8r.net
VCPKGのupdate、upgradeが常に失敗するんだけど、使えてる人いますか?
小まめにupdateしないからだろか?

516:デフォルトの名無しさん
21/02/05 15:14:37.91 zImWQG8r.net
Goは標準ライブラリが圧倒してる。

517:デフォルトの名無しさん
21/02/05 15:18:44.78 zImWQG8r.net
半年に一度フルビルドみたいになってしまう。

518:デフォルトの名無しさん
21/02/05 16:12:02.35 A9cGRDK5.net
Goは何がクソといってまず名前がクソ

519:デフォルトの名無しさん
21/02/05 16:36:26.85 zImWQG8r.net
C++は基本だから、義務教育で習得するべき。

520:デフォルトの名無しさん
21/02/05 16:50:43.11 /MNAnFTn.net
言語仕様がでかすぎるからC言語で精一杯
オマケで紹介される程度かな

521:デフォルトの名無しさん
21/02/05 18:21:14.28 7P5D6x+s.net
>>505
昔はアセンブラすら触れない奴がC言語とか笑わせるなとか真顔で言う人がいたんだぜ。
別に仕事ができるのならRustでもPythonでも何でもいいと思うぞ。

522:デフォルトの名無しさん
21/02/05 19:09:46.26 AjJLCZml.net
仕事ができるのならw

523:デフォルトの名無しさん
21/02/05 20:48:06.29 ou/gU5gH.net
>>512
仕事ができるならなw
できないカスがクソみたいなもん押し付けてくるから文句が出るんだよ。
rustでもpythonでもまともなコード書いてりゃ文句はないわ。
まともじゃないから文句が出る。

524:デフォルトの名無しさん
21/02/05 21:49:13.85 a81hUa+F.net
というか、プログラマとしてrust(鉄さび、腐食)になるというダブルミーニングを狙ったんだと思うけど。

525:デフォルトの名無しさん
21/02/05 21:59:53.11 kFtfKVND.net
お前らってド素人のくせになんでいっちょまえの口利くん?
それって不思議だわ

526:デフォルトの名無しさん
21/02/05 22:34:33.49 EB7VAtvO.net
Rustの名前は金属の錆じゃなくてサビ菌が由来

527:デフォルトの名無しさん
21/02/05 22:36:07.20 NIkVqohR.net
Rottenでいい

528:デフォルトの名無しさん
21/02/05 22:48:47.57 a81hUa+F.net
Perl6はRakuになってしまったし、Rustもいずれ「わびさび」の境地でSabiに改名されるでしょ。

529:デフォルトの名無しさん
21/02/06 03:04:22.39 kQVOjfvp.net
「まともなコードが書けるなら」じゃなくて、まともなコードを強制するのがRustという言語の方針だと思うが

530:デフォルトの名無しさん
21/02/06 04:45:05.79 oQfB5lBJ.net
>>284
昔からのプログラミング/電気界隈の慣習だから仕方ないけど、2要素のミニマルなブール代数しか扱わないにも関わらずboolean型を称するのがそもそもキモい
プログラミングで使うような半順序関係は、9割booleanで書くのが一番スッキリする
一般のbool型をプリミティブにして、そこからt/fやら三要素やらに派生するのが合理的に思う

531:デフォルトの名無しさん
21/02/06 04:50:47.70 GfZyzG1j.net
ブーリアン革命。

532:デフォルトの名無しさん
21/02/06 05:13:59.88 oQfB5lBJ.net
革命というか、クラスシステムでブール代数をエミュレートしてるのが現状のOOPじゃないかと
まあ言語によって可補性はマチマチだけど、全てについてスーパークラス/サブクラスなクラスを設けるのは、メインストリームの言語では大体そうだろ

533:デフォルトの名無しさん
21/02/06 07:27:56.30 S9Y30hRK.net
>>520
だとしたら胡散臭さ200%のカルトだな

534:デフォルトの名無しさん
21/02/06 09:31:12.13 rZdEmaWa.net
>>524
Java、Kotlin、Scala、C#、Ruby、Python、PHP
あたりのどれかを触ってみれば、危険な記述を言語仕様レベルで封印することのありがたさが分かる
他言語も触ってみることをオススメする

535:デフォルトの名無しさん
21/02/06 09:34:34.84 5Ze23T9D.net
よくわからんが安全カミソリみたいなものかね?

536:デフォルトの名無しさん
21/02/06 10:10:31.61 rZdEmaWa.net
>>526
そんな感じ
まぁ、C++もマスターすれば危険な記述を避けることはできるんだけど...
プログラマーが悪意を持ってプログラムを記述しない限り安全なコードになるようにしようという試みは大切だと思う

537:デフォルトの名無しさん
21/02/06 10:11:15.51 S9Y30hRK.net
>>525
ありがとう、おまえさんのレベルの低さがよくわかった
文法や動作がよくわかってなくてマシンに警告してもらわなきゃ自分では判断できないんだな
アプリの内容


538:として良からぬ事を企むという次元には程遠いわけか



539:デフォルトの名無しさん
21/02/06 10:12:54.42 rZdEmaWa.net
>>528
投稿した瞬間の不意打ちレスワロス

540:デフォルトの名無しさん
21/02/06 10:17:55.71 u/OM7jGY.net
>>527
> プログラマーが悪vログラマーが悪意を持ってプログラムを記述しない限り安全なコードになるようにしようという試みは大切だと思う
>>528
> 文法や動作がよくわかってなくてマシンに警告してもらわなきゃ自分では判断できないんだな
この流れは大草原不可避

541:デフォルトの名無しさん
21/02/06 11:01:19.43 PohEB++t.net
>>504
Unity とか UE はきらい?

542:デフォルトの名無しさん
21/02/06 11:07:09.44 PohEB++t.net
>>509
めっちゃわかります
URLリンク(blog.golang.org)
URLリンク(write.kogus.org)

543:デフォルトの名無しさん
21/02/06 11:09:03.81 gLiOOG5V.net
rustの縛りプレイはマルチスレッドでのメモリ管理のクソ面倒さが原因だろう

544:デフォルトの名無しさん
21/02/06 12:19:39.89 S9Y30hRK.net
>>527
いーや、くだらねえ
プログラマを信頼しない方針はあれもダメこれもダメの制限だらけになるだけだ
おまえさん自身も実社会で職場の誰よりも制限だらけなんだろう
重責を担ったことのないやつは人のせいにすることしか考えねえ

545:デフォルトの名無しさん
21/02/06 12:25:16.36 UXUwo66G.net
それだけ無責任で信頼出来ない人間が多いって事だろ

546:デフォルトの名無しさん
21/02/06 12:31:39.86 58EQLFGq.net
信頼はタダではないからな
バグを流出させたら銃殺ぐらいが妥当

547:デフォルトの名無しさん
21/02/06 12:53:16.04 DutNpJ49.net
>>528
お前のレベルが極めて高いのは分かったが、お前の共同の開発者もお前のようにハイレベルだとは限らない

548:デフォルトの名無しさん
21/02/06 13:19:02.89 Hu1Z4B3S.net
>>534
負け犬の遠吠え

549:デフォルトの名無しさん
21/02/06 13:29:55.66 EjDQT0l8.net
>>460
「(type)~0」でどう?

550:デフォルトの名無しさん
21/02/06 13:32:30.22 TGsCRbLO.net
>>536
ハゲを流出させたら~と空目した

551:デフォルトの名無しさん
21/02/06 13:33:33.54 rZdEmaWa.net
>>538
しー!余計なことを言うんじゃないっ!

552:デフォルトの名無しさん
21/02/06 13:38:49.17 Hu1Z4B3S.net
>>528はスマートポインタを知らなさそう
文章から溢れ出る無能感

553:デフォルトの名無しさん
21/02/06 13:44:48.20 S9Y30hRK.net
構ってちゃんは、スマポ憶えたてらしいなw

554:デフォルトの名無しさん
21/02/06 13:46:38.15 gYQHLnIz.net
天才の俺が書くプログラムは絶対正しいから無駄なバカよけ機能はいらないしテストのような下等なことはしない
って豪語してたいつぞやの天才くんが帰ってきたのかな

555:
21/02/06 13:50:19.96 kbrcRlAn.net
>>544
私は馬鹿なので天才のコードというのがどんなのか凄く興味があります…

556:デフォルトの名無しさん
21/02/06 13:53:43.56 ROiZJzWf.net
コテハンでこの程度の文章も読めないのは

557:
21/02/06 13:55:54.96 kbrcRlAn.net
>>546
そりゃ馬鹿だからでしょう…

558:デフォルトの名無しさん
21/02/06 13:59:04.79 aJ9IYVGP.net
どう考えても誰かさんに対する皮肉なんだよなぁ...
まぁ、荒れるから誰とは言わないけど

559:デフォルトの名無しさん
21/02/06 14:05:03.59 fN0CSTPN.net
傲慢かましすぎもへりくだりすぎも良くない

560:デフォルトの名無しさん
21/02/06 14:06:38.65 zTEH7215.net
>>548
すでに荒れる種をまいてるきみが一番有害

561:デフォルトの名無しさん
21/02/06 14:12:51.02 aJ9IYVGP.net
>>550
いや、俺は別にS9Y30hRKは天才だと思ってるぞ!誰もS9Y30hRKの事をゲロカス老害だとか、バグを減らす上での有害な存在だとか、人を見下すだけの無能だとか、自分にとって都合のいい妄想を口に出す病人だとか、構ってちゃんだとか、そんなこと全�


562:R思っていないから!!S9Y30hRKは天才!!疑う余地もなく天才!!ハイレベルなバカで誰もついていけないとか、そんなこと思っていないから!!! だから!それ以上この話はやめろぉおおおお!!!



563:デフォルトの名無しさん
21/02/06 14:21:36.41 rZdEmaWa.net
>>545
馬鹿でも扱えるくらい綺麗なコードが天才のコードだと思う
C++は表現豊かな言語だから...他の言語も触ると、綺麗な記述方法を学ぶ良い機会になるよ

564:デフォルトの名無しさん
21/02/06 14:56:25.58 58EQLFGq.net
>>552が扱えるかどうかが天才か否かの基準か!

565:デフォルトの名無しさん
21/02/06 15:01:56.11 S9Y30hRK.net
綺麗かどうかじゃない
何を実現したのかだ
綺麗に書くのはエチケットだが一番大事なことではない

566:デフォルトの名無しさん
21/02/06 15:11:21.64 f5ipo2xA.net
>>553
銃殺は銃刀法違反及び殺人罪に接触することすら理解できないお前でも分かるコードが存在したら私はそのコードを書いた天才を尊敬する

567:デフォルトの名無しさん
21/02/06 15:21:29.14 58EQLFGq.net
行政が法律に基づき行うなら問題無い
人が作った法律なら人が改正することができる

568:デフォルトの名無しさん
21/02/06 15:22:17.24 S9Y30hRK.net
スレ違い板違い失せろ

569:デフォルトの名無しさん
21/02/06 15:28:25.66 58EQLFGq.net
>>557
>>555に対するレス

570:デフォルトの名無しさん
21/02/06 15:30:29.13 f5ipo2xA.net
自作自演?

571:デフォルトの名無しさん
21/02/06 16:36:26.06 oR/8CbQ7.net
やらかしちゃいましたねー
人を見下しておきながら、人を見下す側もウッカリミスはするという事が証明されました
こういうウッカリ屋はプログラミングでも不具合を引き起こします
馬鹿でも天才でもウッカリ屋でも保守できるコードは記述するように心がけましょう

572:デフォルトの名無しさん
21/02/06 16:38:50.88 oR/8CbQ7.net
>>560
他にもテストの自動化、バージョン管理ツールの導入等もして不具合が流出しない仕組みを揃えておきましょう
以上

573:デフォルトの名無しさん
21/02/06 16:54:20.22 bwIKlxQ8.net
std::stringにUTF-8のコードを入れてプログラムを書いていますが、これを正しく編集する
にはUTF-8での文字の境界を正しく認識しないと駄目ですよね?
それは一般的にはどう処理するものなのでしょうか。
UTF-8のビットパターンとバイト数のことは知っていますが、それを自分で処理すべきか、
さらには絵文字とか複数のユニコードが組み合わさったものはどうするのか、とか。

574:はちみつ餃子
21/02/06 17:05:10.96 N9CbrPsc.net
>>562
コードポイント単位での処理で良いのであれば自分で適当に書いてしまってもいいと思う。
高度なものになると ICU などのライブラリを使う。
書記素クラスタ単位での処理が必要だったり正規化だったりといった場合では
コードを書けば済むというものでもなくて巨大な表が必要だし歴史的な変な規則が盛りだくさんだから
よほどの根性がないと自分ではどうにもならないと思う。

575:蟻人間
21/02/06 17:07:58.83 gG6zzvvp.net
>>562 Windowsだったら
#include <windows.h>
MultiByteToWideChar(CP_UTF8, 0, ...);
MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, ...);
WideCharToMultiByte(CP_UTF8, 0, ...);
IsTextUnicode(...);
などが使えると思われます。

576:デフォルトの名無しさん
21/02/06 17:41:00.54 GfZyzG1j.net
スカラー値が一文字を表現するとは限りませんが、ユニコードスカラー値を基本にするのが現実的な妥協点だと思います。
きちんと処理するのは、データベースとアルゴリズムが必要なので、少人数では無理です。
ICUが有力な選択肢となりますが、これも気難しいライブラリなので、用途に合わないかもしれません。
事実上、世界中の様々な民族の文字を統一的に扱う目論見は破綻していると思います。

577:デフォルトの名無しさん
21/02/06 17:44:16.27 +KPQZs33.net
URLリンク(youtu.be)

578:蟻人間
21/02/06 17:50:18.63 gG6zzvvp.net
URLリンク(ja.wikipedia.org)
>任意のバイトの先頭ビットが "0" なら1バイト文字、"10" なら2バイト以上の文字の2番目以降のバイト、...(中略)...であると判定できる。

579:蟻人間
21/02/06 17:55:50.63 gG6zzvvp.net
つまり、
uint8_t utf8_byte = ...;
if (!(utf8_byte & 0x80)) {
// 1バイト文字。
} else if ((utf8_byte & 0xC0) == 0xC0) {
// マルチバイト文字の先頭バイト。
} else {
// マルチバイト文字の非先頭バイト。
}

580:デフォルトの名無しさん
21/02/06 18:11:29.66 6eQmSTNr.net
プログラミングのお題スレ Part18
スレリンク(tech板:453番)
UTF-8 は、先頭ニブル・4ビットで、1~4バイト文字を判別しています
こういう規則か?

581:デフォルトの名無しさん
21/02/06 19:16:40.60 S9Y30hRK.net
>>561
殺虫剤のパラドックスって知ってる?

582:デフォルトの名無しさん
21/02/06 20:33:00.74 zn5WrP4C.net
>>570
恥の上塗り?w
ただし、自動化されたリグレッションテストの場合は、同じテストを繰り返すことでリグレッションが低減しているという有益な結果を示すことができる。
URLリンク(note.com)

583:デフォルトの名無しさん
21/02/06 21:07:07.97 GfZyzG1j.net
テストロボットだぞ、ガシャーン!ガシャーン!

584:デフォルトの名無しさん
21/02/06 21:08:55.93 GfZyzG1j.net
片山さんの自動パズルとか、ウェブだったら☆1万くらいついてそうだけど。
なんでWindowsにこだわるんだろ。

585:蟻人間
21/02/06 22:54:31.87 gG6zzvvp.net
>>573 JavaScriptで動くものはすでにある。
URLリンク(katahiromz.github.io)
あるが、ビジネスとして展開する能力がない。

586:デフォルトの名無しさん
21/02/06 23:50:48.27 58EQLFGq.net
クレブナー基底で解くやつ!

587:デフォルトの名無しさん
21/02/07 06:07:42.85 HYoiJUgB.net
>>571
質問に答えてねw

588:デフォルトの名無しさん
21/02/07 06:47:27.09 jX/y7Db/.net
>>576
ん?
どの質問?
>>570ならリンク先読めばいいだけだろ
恥ずかしくて読めないのかもしれないけどw

589:デフォルトの名無しさん
21/02/07 08:26:36.56 HYoiJUgB.net
>>576
俺の質問にアンカーつけといてどの質問はねえだろ
恥ずかしくてとぼけてんのおまえさんだろ

590:デフォルトの名無しさん
21/02/07 08:29:49.52 p49/UnNX.net
テストはやらないよりもやったほうがはるかに良い
前の版通ったテストが最新版でも通るという品質は担保される
殺虫剤のパラドックスよりも恐れなければならないのは
いっぱい作ったテストコードが事実上同じテストでしかないという事態になることの方
※ 個人の感想です

591:デフォルトの名無しさん
21/02/07 08:49:47.79 m5BD34IK.net
>>578
別に完璧になくせるなんて誰も言っていないのに勝手にツッコんでるの何?としか思ってないよ

592:デフォルトの名無しさん
21/02/07 08:57:32.70 HYoiJUgB.net
>>580
おまえさん、こう言ったんだぜ
> 不具合が流出しない仕組みを揃えておきましょう
流出しなくなんかならねえ
不具合はポカミスばかりとは限らない
おまえさんのような浅はかな思想で突っ走った先に
碌でもない結末が待っていることだってある
揃えられるものなら揃えてみな
自分ができねえことを他人に言うな

593:デフォルトの名無しさん
21/02/07 09:11:28.01 p49/UnNX.net
人は思い込みを反証することで生


594:きていける だが完璧に反証できないこともある ユニットテストはそのかけがえのないものを教えてくれた



595:デフォルトの名無しさん
21/02/07 09:41:41.73 m5BD34IK.net
>>581
え?それ俺じゃないけど
テストやればバグが無いといえるわけじゃないから安心するなってだけで、テストするなって話じゃないよね
主旨は同じだよね
何が気に入らないの?

596:デフォルトの名無しさん
21/02/07 10:00:05.54 HYoiJUgB.net
ああ、俺じゃないで逃げるのか
情けねえやつだな

597:デフォルトの名無しさん
21/02/07 10:07:20.85 jX/y7Db/.net
>>578
アンカーつけてると言うなら
> >>570ならリンク先読めばいいだけだろ
って書いてあるだろ
よほどアホでもない限りそんなアホなこと言うわけ無いと思ったからどれ?
って聞いたんだけど、想像以上のアホだったってことかな?w

598:デフォルトの名無しさん
21/02/07 10:10:29.25 jX/y7Db/.net
>>581
不具合はなくせないから仕組みも努力もいらんと言うならそれでいいんじゃね?
お・ま・え・ん・と・ろ・こ・で・は w

599:デフォルトの名無しさん
21/02/07 10:13:42.72 2AGAGJ05.net
マスクも手洗いもコロナを100%防げるわけじゃないから
マスク付ける必要も手を洗う必要もないね

600:デフォルトの名無しさん
21/02/07 10:20:21.65 HYoiJUgB.net
テストツールいらねえなんて言ってねえぜ
テストツール万能論はアホの考えだと言っている

601:デフォルトの名無しさん
21/02/07 10:21:25.49 HYoiJUgB.net
で、身に覚えのあるやつが返事してるから
ニヤニヤ笑ってるのさ

602:デフォルトの名無しさん
21/02/07 10:48:37.66 2AGAGJ05.net
「テストツール万能論」を主張したレスなんて一つも見えないんだけど
存在しないものを見てニヤニヤしてる変態こわい

603:デフォルトの名無しさん
21/02/07 10:56:59.83 HYoiJUgB.net
それを>>587がぬかすとは笑止な

604:デフォルトの名無しさん
21/02/07 11:11:45.24 0QEz1MW7.net
構い過ぎじゃね?

605:デフォルトの名無しさん
21/02/07 11:52:54.07 jX/y7Db/.net
>>591
まさかと思うけど>>587がマジで言ってるとか思ってないよね?w

606:デフォルトの名無しさん
21/02/07 12:03:05.54 2AGAGJ05.net
ああ・・・そういうことね・・・すまん触るべきじゃなかった

607:デフォルトの名無しさん
21/02/07 13:47:28.22 p49/UnNX.net
すまんで済んだらユニットテストは要らんわ!

608:デフォルトの名無しさん
21/02/07 14:09:34.56 qbLU6RFF.net
野菜食えで馬鹿みたいにブチギレるホリエと一緒やな

609:デフォルトの名無しさん
21/02/07 15:05:54.73 HYoiJUgB.net
>>593
奴は「必要ないね」とぬかしたんだ
別に武漢熱に話をすり替えようとすり替えまいとそこは関係ない

610:デフォルトの名無しさん
21/02/07 15:41:29.20 yi1XmM9H.net
>>597
文章を字面通りにしか解釈できない人?

611:デフォルトの名無しさん
21/02/07 16:31:48.90 jcLu/xd9.net
vectorを参照渡しするときの方法について教えてくください
class sansyo
{
private:
std::vector<short> _stdSansyo;
public:
void setSansyo(std::vector<short>& sansyo);
}
;void sansyo::setSansyo(std::vector<short>& sansyo)
{
_stdSansyo = sansyo;
_stdSansyo[5] = 500;
}
int main()
{
std::vector<short> moto;
sansyo cSansyo;
for (int i = 0; i < 10; i++) {
short tmp = i * 2;
moto.push_back(tmp);
}
cSansyo.setSansyo(moto);//ここで参照渡しのはず
for (int i = 0; i < 10; i++) {
std::cout << "値=" << moto[i] << "\n"; //値が変わっていない
}
}
こんなふうに、参照渡しにしてみたのですがどうも参照渡しになっていないでそのまま新しいvectorが作られちゃったぽいのですが
これだとメモリを倍使っちゃってるし、時間も掛かってますよね
どういうふうにしたら、喚ばれた側の関数で参照渡しに出来るのでしょう

612:蟻人間
21/02/07 16:37:08.22 sfdJNFTq.net
>>599
右辺値参照かstd::swap

613:デフォルトの名無しさん
21/02/07 17:13:26.18 8CWTHaUD.net
>>600
サンプル貼ってよ

614:デフォルトの名無しさん
21/02/07 17:21:04.63 jcLu/xd9.net
std::swapも右辺値参照も全然上手く行きそうになかっのたで
宣言をポインタにして
private:
std::vector<short> *_stdSansyo;
void sansyo::setSansyo(std::vector<short>& sansyo)
{
_stdSansyo = &sansyo;
sansyo[6] = 100;
_stdSansyo->data()[5] = 50;
}
関数をこんなふうに書き換えたら、ちゃんと参照だけで動いたのでもういいや
けど右辺値参照とstd::swapの例も出してくれたらこれから色々いたスカリマス

615:デフォルトの名無しさん
21/02/07 17:24:59.07 8CWTHaUD.net
>>600
ほれほれ
貼れんのか

616:デフォルトの名無しさん
21/02/07 17:28:56.01 yi1XmM9H.net
>>599
参照渡し自体はできてるはず。
ただ参照渡ししたvectorをクラスのメンバに代入して、代入されたクラスメンバの方を更新しているからvectorを渡した元の方にはまったく影響が無いというだけ。

617:デフォルトの名無しさん
21/02/07 17:29:10.92 jX/y7Db/.net
>>598
もうそう言うことにしないと自我が保てないんだろw

618:デフォルトの名無しさん
21/02/07 17:59:39.88 p49/UnNX.net
sansyo::_stdSanshoをどうしても参照にしたいならこうするしか、
class sansho {
private:
std::vector<short> _stdSansyo;
public:
sansho(std::vector<short>& src) : _stdSansyo(src) { }
void setSansyo(std::vector<short>& sansyo);
};
void sansyo::setSansyo(std::vector<short>& sansyo) {
_stdSansyo[5] = 500;
}
int main() {
std::vector<short> moto;
sansyo cSansyo(moto); //ここで参照渡し
for (int i = 0; i < 10; i++) {
short tmp = i * 2;
moto.push_back(tmp);
}
cSansyo.setSansyo(moto); // moto[5]に500が入りまくり
for (int i = 0; i < 10; i++) {
std::cout << "値=" << moto[i] << "\n"; //値が変わった!(予定
}
};

619:デフォルトの名無しさん
21/02/07 18:00:52.99 HYoiJUgB.net
>>598
だったら何だとぬかす気だ?
> 存在しないものを見てニヤニヤしてる変態こわい
> 文章を字面通りにしか解釈できない人?
要するに話になんない奴ってことだろ
言ったことにも裏の意味にもコメントされたくない
じゃあ相手しねえでやるから黙ってろゴミ

620:デフォルトの名無しさん
21/02/07 18:02:35.24 p49/UnNX.net
訂正orz
誤: private: std::vector<short> _stdSansyo;
正: private: std::vector<short>& _stdSansyo;
もしcSansyo.setSansyo(moto)の呼び出し時に参照を渡したいんじゃああ!
という向きにはsansyo::_stdSansyoはstd::vector<short>* _stdSanshoにして
ポインタを持つようにすべき

621:デフォルトの名無しさん
21/02/07 18:10:05.07 p49/UnNX.net
ちゅかもっと大きな一般原則としてつぎのどっちかにすべき
(1) std::vector<short>の実体の所有権をmain()(で定義いているmoto)に固定してcSanshoクラスにmotoのアドレスを記憶させない
(2) std::vector<short>の実体の所有権をcSanshoクラスのインスタンス(_stdSansyo;)に固定してmain()でmotoを定義するのをやめる
※ 個人の感想です
つまり出題が悪い。出し直し

622:はちみつ餃子
21/02/07 18:10:05.98 hHDgzHUe.net
>>602
元の考え方を変えずに動作させるにはその方法は十分に妥当だと思うよ。
ただ、もっと複雑なプログラムになったときにうっかりデータよりポインタのほうが
長生きすることになっても発見しづらいデザインになっている。
可能なら全体のデザインを見直すべきという話で、
いっそ所有権を渡してしまったほうが間違いにくいかもねという意味で右辺値参照や swap の話題が出ているので、
>>599 をベースにして右辺値参照や swap を使う例に書き換えるのは難しい。
別物になってしまう。

623:デフォルトの名無しさん
21/02/07 18:11:12.01 yi1XmM9H.net
>>607
自分以外の複数の人を同一人物だと思っちゃう人?

624:デフォルトの名無しさん
21/02/07 18:14:03.86 p49/UnNX.net
>>611
ネットの総意とか言い出しちゃう人?

625:デフォルトの名無しさん
21/02/07 18:16:20.19 p49/UnNX.net
検証不能な事物を錦の御旗にするような人間が
ソフトウェアのテスト推しなのは
大いなる矛盾である氏ね

626:デフォルトの名無しさん
21/02/07 18:18:25.00 HYoiJUgB.net
>>611
あの流れで
> 文章を字面通りにしか解釈できない人?
なんてぬかすやつは複数ID自演厨と見なされて当然だ
疑われたくなければ口の利き方に気をつけな
疑いは晴れてない
この後の発言にも気をつけるんだな

627:デフォルトの名無しさん
21/02/07 18:24:44.17 4v/nAOdw.net
>>566
なにこれ

628:デフォルトの名無しさん
21/02/07 18:29:05.24 U/6f7Qk0.net
参照をフィールドに保持するのは、一部のパーサーくらいでは?
しかも、状態を関数に切り分けないとデバッグが辛いので、仕方なくそうするだけで、バッド何とかの類だし。

629:デフォルトの名無しさん
21/02/07 18:31:34.10 U/6f7Qk0.net
むかし5chで誰かが、プログラムを書くときは必ずテストしてるはずなんだって言ってましたが。
それを単体テストとして書いておけばずっと使えて便利だよと。
その書き込みを見て世界中の人がテストフレームワークを書き始めたんですよ。

630:デフォルトの名無しさん
21/02/07 19:06:50.71 n+epGkV9.net
>>616
想像力が足りなすぎ
>>617
想像力が豊かすぎ

631:デフォルトの名無しさん
21/02/07 20:53:42.20 U/6f7Qk0.net
バッドエンディングですね。

632:デフォルトの名無しさん
21/02/07 21:03:56.50 ZOvCZ0cx.net
グローバル変数使うなとは言わないけどコメントもないのはキツい
grep掛けて検索しても訳分からん
ポインタで飛び火してるときなんてもう…

633:デフォルトの名無しさん
21/02/07 22:09:55.11 IiZq+u+t.net
演算子オーバーロードの厄介さはキーワード検索で拾いにくいこと。
反復子もそうだが。ま、言い出したらきりないが。

634:仮トリップ
21/02/07 22:57:26.65 HI2f2oIL.net
>>561を書いたのは私なんだけどなぁ...
面倒くさそうな人がいるし、一般論だけ言って立ち去ろって思っただけ

635:仮トリップ
21/02/07 23:02:22.83 HI2f2oIL.net
ちなみに、>>561以降は何も述べてない。
私は一般論を語っただけだから、他の人が私と似た考えでツッコミを入れただけに過ぎない。
殺虫剤のパラドックス?それがどうした?
私はテストコードを書いて不具合を激的に抑えているが?
殺虫剤のパラドックスを説明したところで、不具合を限りなくゼロに近づける試みが無駄であることの証明にはならない。

636:蟻人間
21/02/07 23:09:32.25 sfdJNFTq.net
>>622-623
自我の芽生え、おめでとう!
では、かえるの歌を歌います。
【...JASRAC権利関係の為、自主検閲...】
♪パパーン
(全員でクラッカーを鳴らす)

637:デフォルトの名無しさん
21/02/07 23:20:12.91 IiZq+u+t.net
殺虫剤のパラドックスなんてものは存在しない。
ただの退行テスト不足だ。

638:デフォルトの名無しさん
21/02/08 06:24:22.18 PnrMZIJR.net
殺虫剤のパラドックスって言いたかっただけやろw
そもそもテストで発覚したバグを修正したら同じテストで摘出できないのは当たり前
摘出できたら単なる修正漏れだしw
JSTQBの関係者か信奉者が言い出したんだろうけどあまり意味のない用語だと思う

639:デフォルトの名無しさん
21/02/08 06:42:41.05 HwnOmmQF.net
蒸し返さなくていいから……

640:デフォルトの名無しさん
21/02/08 07:03:25.17 nKLqWVxG.net
虫返さないですと!?

641:デフォルトの名無しさん
21/02/08 11:05:43.31 NGjwD54G.net
>>610
そもそも>>600は的外れだと思うんだが
メンバの方を参照かポインタで持つ、で終わりだろ
3行目以降完全に蛇足

642:デフォルトの名無しさん
21/02/08 11:20:50.36 VJ9lplXi.net
>>627,628
そういうのは無視しろ

643:デフォルトの名無しさん
21/02/08 12:00:56.57 zDqHH6LK.net
スルーの法則

644:デフォルトの名無しさん
21/02/08 12:43:41.70 DuebuhTc.net
>>602
>>599
誰か
永続的に使用するなら shared_ptr


645:で受け取れ。今のままだとsetSansyoを呼び出す側が所有権手放していいのかわからなくて困るだろ。 て指摘した? 今や生ポインタなんて性能優先のときに内部的に使用するもんで、インターフェイスで使用するもんじゃない。 あと、参照も関数内だけで使用する引数に使うもんで、永続的に所有する引数に使うもんじゃない。



646:デフォルトの名無しさん
21/02/08 14:04:18.90 VJ9lplXi.net
コンストラクタでなら参照型のメンバ変数に保存できる。ほとんどの人はやらないけど。

647:デフォルトの名無しさん
21/02/08 18:54:29.18 DuebuhTc.net
>>633
できるのと実際に実装するのは別の話だわな。
所有権の無いオブジェクトの参照を保存するなんて狂気の沙汰だ。

648:デフォルトの名無しさん
21/02/08 19:12:34.60 nKLqWVxG.net
アイキャンユーキャン。

649:デフォルトの名無しさん
21/02/08 20:51:28.21 U8Md53kE.net
>>633
クラス間に親子関係のようなものがあって、子の生存期間が常に親の生存期間内にあるような場合は、親への参照をメンバ変数とすることは普通にあると思うけど。例えば>>484とか

650:デフォルトの名無しさん
21/02/08 21:15:43.14 NGjwD54G.net
shared_ptr(またはスマポ)至上主義の変なやつ以前から居るんだよな
相手にするな

651:デフォルトの名無しさん
21/02/08 21:37:27.20 UsSsiWeS.net
ナマポ使ったほうが良い場面なんて皆無でしょう

652:デフォルトの名無しさん
21/02/08 21:48:31.75 2GJiXyxS.net
出たwナマポ完全否定奴w

653:デフォルトの名無しさん
21/02/08 21:58:57.06 VJ9lplXi.net
参照型のメンバ変数は参照オブジェクトの生存期間を保証できないからweak_ptrで保存しておいて使う時だけshared_ptrを取得するのがC++的な解決なんじゃないの。

654:デフォルトの名無しさん
21/02/08 22:08:09.48 FKp3giDs.net
スマポにしたら所有権の問題を考えなくてよい
というわけではないからスマポ使えというのは妥当ではない
逆に所有権に矛盾が無ければインスタンスは生成元が与えた参照を持って良い
ていうかスコープを抜けたら自動的に解放される系のクラスを書いたら
エラー処理上エラー通知先としての生成元オブジェクトの参照保持はほとんど不可避

655:デフォルトの名無しさん
21/02/08 22:11:14.29 NgGwlfwa.net
コピー禁止のshared_ptr欲しい

656:デフォルトの名無しさん
21/02/08 22:25:23.27 bp+4mh0R.net
すべてスマポで書くスタイルも悪くないと思うけど、メイヤーズ神もツリー構造で子が親のポインタを持つときはナマポで十分と書いている

657:デフォルトの名無しさん
21/02/08 22:27:43.60 34Jom8HU.net
木のノードは子へのポインタじゃなくて子のノードIDを持て😡

658:デフォルトの名無しさん
21/02/08 22:48:15.38 NgGwlfwa.net
自分よりポインタの方が寿命が長いことが保証されているなら確かに生ポで問題ないが
それが成り立つ状況ってなかなかないよな。

659:デフォルトの名無しさん
21/02/08 23:02:19.81 VJ9lplXi.net
参照先の実体がまだ生存しているかどうか知るにはweak_ptr::expired()を使うしかないのが現状でしょ。

660:デフォルトの名無しさん
21/02/08 23:07:56.19 nKLqWVxG.net
Chromiumはstd::unique_ptrを全面的に使ってるけど、ポインタを使う設計そのものが古いような気がする。

661:デフォルトの名無しさん
21/02/08 23:13:28.50 BwguerZK.net
まあcコードを全く使わないってのならいいんでないの。
ただc++のポータビリティーは君が思ってるより低いけどね。

662:デフォルトの名無しさん
21/02/08 23:23:15.47 cR8ppl+C.net
露骨すぎるマウント取りたがりダッセーwww

663:デフォルトの名無しさん
21/02/09 01:58:29.04 qUmf+U4D.net
マウントじゃなくてポインタでは?

664:デフォルトの名無しさん
21/02/09 02:46:23.52 jPnyP+Vp.net
C++に特化したAPIなんてどこのOSでも提供されないから、結局、Cの配列と互換性のあるstd::vectorやstd::arrayを使わざるを得なくなる。

665:デフォルトの名無しさん
21/02/09 04:01:45.22 qUmf+U4D.net
>>644
木もコンテナで良いですよね。
所有権がハッキリしてて。

666:デフォルトの名無しさん
21/02/09 07:34:27.86 nSJhwzEU.net
>>651
data()を必ず使う手合いか?

667:デフォルトの名無しさん
21/02/09 07:39:10.06 s3p3GZ7R.net
木は木全体を収める領域ごと一気に解放する場合もあるから別に

668:デフォルトの名無しさん
21/02/09 17:49:12.66 KrtnTLUi.net
>Cの配列と互換性のある
doubt

669:デフォルトの名無しさん
21/02/09 17:53:30.91 LEWRJrN2.net
ダウトとデビューって似てるよね

670:デフォルトの名無しさん
21/02/09 18:35:55.16 qUmf+U4D.net
親が子のポインタを所有する木は、親を消すとネストして子孫のデストラクタを呼ぶので、スタックが枯渇します。
したがって、子から順番に消さなくてはなりません。

671:デフォルトの名無しさん
21/02/09 18:56:53.48 qUmf+U4D.net
その様はまるで摩天楼がドミノ倒しのように連鎖倒壊するようでもあり、DOMINOというピザにもなっています・

672:デフォルトの名無しさん
21/02/09 19:07:16.84 IPYpL0sA.net
なんと後味の悪い話

673:デフォルトの名無しさん
21/02/09 20:39:36.84 zHOwdh/n.net
意味が分からない

674:デフォルトの名無しさん
21/02/09 21:07:48.14 Rh87rJZX.net
>>657
それで枯渇するようじゃ木の探索すらできない。

675:デフォルトの名無しさん
21/02/09 21:13:02.23 5Ac7csWH.net
探索はループでもできるんで、たとえば数万個の要素を持つツリーを子から消せというのは真理なのかも

676:デフォルトの名無しさん
21/02/09 21:27:40.55 AojZLEiV.net
消すのは独立して実行できるので別スレッドに送れば実質コスト0

677:デフォルトの名無しさん
21/02/09 21:38:09.75 s3p3GZ7R.net
>>662
DFAとPDAではやれることの範囲の違いがちげう
つかこの場合は安易にスマポとかコンテナを使うから破棄ごときにトラバースの手間がかかるんである

678:デフォルトの名無しさん
21/02/09 21:44:42.72 5Ac7csWH.net
それもそうであるな

679:デフォルトの名無しさん
21/02/09 21:50:17.60 s3p3GZ7R.net
ちゅか垂直探索なら木をメモリに持っておく必要が無い
水平探索ならメモリ上に世代1、世代2、....と木を育てていく(らしい)が
兄弟ノードを全部見終えたのでいざ従妹ノードに移ろうとするときに
親ノードへの参照は欲しい木がするがするとshared_ptrなら即循環参照になり、
子の情報で親(子孫がいっぱいぶら下がっている)を生成できるわけもないから、
ウィークポインタの出番でもない

680:デフォルトの名無しさん
21/02/10 01:37:49.58 XIZePh+h.net
子から消さなかったばかりに。
2000人を乗せた航空機が洋上で消えた。
ってなるかも?

681:デフォルトの名無しさん
21/02/10 01:48:13.89 ZYaksnCf.net
A380でさえ853席だが2000人なんてどうやって載せるんだろう

682:デフォルトの名無しさん
21/02/10 01:51:41.17 2ozOIzIF.net
く、空中で衝突するとか…

683:デフォルトの名無しさん
21/02/10 01:53:08.99 XIZePh+h.net
インドでは屋根の上にも乗ります。

684:デフォルトの名無しさん
21/02/10 01:55:11.55 XIZePh+h.net
URLリンク(trafficnews.jp)
証拠写真みつけてきた。

685:デフォルトの名無しさん
21/02/10 01:55:17.84 uF0JvJPV.net
GTA5のMOD作成者みたいな会話だな

686:デフォルトの名無しさん
21/02/10 02:01:19.54 uF0JvJPV.net
>>653
昔はdata()がなかった。(遠い目)

687:デフォルトの名無しさん
21/02/10 06:40:17.61 ZYaksnCf.net
アントノフの貨物室にすし詰めでどんくらい乗れるかな

688:デフォルトの名無しさん
21/02/10 06:40:27.16 XIZePh+h.net
東京: TK
京都: KT
大阪: OSK
淡路: AWG

689:デフォルトの名無しさん
21/02/10 07:59:22.76 FGGGEnfF.net
航空機や原発みたいなクリティカルなシステムでは
全部固定長の配列で書いてあるんじゃないの

690:デフォルトの名無しさん
21/02/10 08:06:21.27 uF0JvJPV.net
釣れますか。
ヒープのほうが少し安全です。

691:デフォルトの名無しさん
21/02/10 10:25:11.13 4XPmMtZj.net
>>671
どこが証拠やねん!
せいぜり100人やないかヽ(`Д´)ノ

692:デフォルトの名無しさん
21/02/10 14:32:04.65 TFzLuCg0.net
すみません、std::for_each を使っていて continue したくなりましたが、サポートしてないです
よね? これって:
1. for_each は continue する必要がないような処理に限ってに使うべき。
2. ループの中で大きい if ブロックを作って空の処理にすればよい。
3. その他

693:デフォルトの名無しさん
21/02/10 15:13:45.18 ZYaksnCf.net
returnすれば?
for_each(begin(foo), end(foo), []{ if(bar) return; });

694:デフォルトの名無しさん
21/02/10 16:06:00.49 HSfvjOUE.net
return は continue ではなく break じゃないの?
質問者の2.大きなif分で実質何もしないでいいと思う

695:デフォルトの名無しさん
21/02/10 16:20:11.24 ZYaksnCf.net
for_eachをbreakするにはthrowかlongjmpがいるぞ

696:デフォルトの名無しさん
21/02/10 16:35:39.62 S47HOUGT.net
きったねぇジャンプだ

697:デフォルトの名無しさん
21/02/10 16:51:31.94 HSfvjOUE.net
あ、ラムダ式になってたのか

698:はちみつ餃子
21/02/10 17:51:08.81 tNqysU9n.net
>>679
for 文で書いた方が短く書けそうだけど、
あえて for_each を使いたい理由が何かあったりするの?

699:デフォルトの名無しさん
21/02/10 18:41:41.17 FGGGEnfF.net
Perlなら問題無くできる(continue→next、だが
C++規格委員会がfor_eachのcontinueを許可しないのは最後の一線なのかもしれん…

700:デフォルトの名無しさん
21/02/10 19:51:57.06 teDb7k99.net
何の一線よ

701:デフォルトの名無しさん
21/02/10 20:18:41.39 ln/pLvjf.net
いやreturnでいいだろ…
許可しないってなんのことだよ

702:デフォルトの名無しさん
21/02/10 21:21:18.68 +e+FbMSY.net
vectorで一億件ほどで、飛ばしたいのが100~1000件程度なんだろう

703:デフォルトの名無しさん
21/02/10 21:51:25.56 QYfnOwKH.net
>>679
for_eachをrange based forに変更は出来ないの?

704:デフォルトの名無しさん
21/02/10 21:59:01.21 ZYaksnCf.net
>>690
おまえのスキルのためにか?

705:デフォルトの名無しさん
21/02/10 22:17:23.69 qtVJ0qYe.net
range based forなら普通にcontinueできるぞ

706:デフォルトの名無しさん
21/02/10 22:18:26.21 ln/pLvjf.net
>>689
飛ばす手段があったとして、飛ばすかどうかどこでどう判断するの?

707:デフォルトの名無しさん
21/02/11 04:16:42.30 nrDdTgaQ.net
early returnは正義

708:デフォルトの名無しさん
21/02/11 11:22:44.35 n0GRjtoR.net
>>685
テンプレのときとか

709:デフォルトの名無しさん
21/02/11 17:53:02.68 Iq2aKjep.net
679がなぜfor_eachを使うのかを無視するのは
他人の領分を侵すお節介だ
for_eachの使い方をアドバイスできんやつは
しゃしゃり出てくるな

710:デフォルトの名無しさん
21/02/11 18:00:13.22 hRfccug1.net
よくよく話を聞いてみたらまるで異なる解決策が見つかるなんてよくあることじゃん。そんな経験ないの?
何をしたかったか確認するのは重要

711:デフォルトの名無しさん
21/02/11 18:15:41.21 Iq2aKjep.net
流れをよく読んでみろよ
for_eachをロクに使ってないやつなのモロバレだろ
質問者が尋ねていないことを答えたいから協力しろなんてぬかすのは
回答者の資格ねえんだよ

712:デフォルトの名無しさん
21/02/11 18:18:25.32 Iq2aKjep.net
自分が何か尋ねているときに
質問内容に付き合ってやれる懐のねえやつは
うぜえだけだろが

713:デフォルトの名無しさん
21/02/11 18:23:57.31 Iq2aKjep.net
質問内容において自分より下なやつに教えを請いたいかよ

714:デフォルトの名無しさん
21/02/11 18:34:11.92 hRfccug1.net
for_eachを使う場合の答えはとっくに出てるのに何言ってんの?

715:デフォルトの名無しさん
21/02/11 19:17:08.97 15xoUz1R.net
3のその他で答えただけ。

716:デフォルトの名無しさん
21/02/11 20:01:29.92 veopzNW6.net
他人の領分なんて侵してナンボ

717:デフォルトの名無しさん
21/02/11 20:03:18.37 qccRsQET.net
>>702
はあ?returnではいけない理由は?

718:デフォルトの名無しさん
21/02/11 20:19:00.69 a/CQbB/Z.net
>>679はループしたいだけだろ
std::for_eachを何が何でも使わなければならない特殊な事情があるなら仕方ないけどそんなこと言ってないし

719:デフォルトの名無しさん
21/02/11 20:23:31.36 nDjPJyoP.net
>>704
returnで良いと思うよ。

720:デフォルトの名無しさん
21/02/11 20:50:06.93 Iq2aKjep.net
>>701
680は俺だが何言ってんの?

721:デフォルトの名無しさん
21/02/11 21:58:36.08 bviF/sLG.net
Visual Studio 2010(MSVC2010)で
 template<class T>
 void foo(T x) {
  printf("%d: %d\n", targetEntity, x);
 }
という関数テンプレートが定義されているときに、
 namespace bar { const int targetEntity = 1; }
 using bar::targetEntity;
 void baz() { foo(100); }
はコンパイルが通るのに、
 namespace bar { const int targetEntity = 1; }
 void baz() {
  using bar::targetEntity;
  foo(100);
 }
だと
 error C2065: 'targetEntity': 定義されていない識別子です。
と言われるorz

722:デフォルトの名無しさん
21/02/11 22:06:56.76 bviF/sLG.net
>>688
for_eachを勘違いいてたわサーセン、
確かにfor_each<bgn, end, Function>のFunction(*it)からならreturnするで良さげ

723:デフォルトの名無しさん
21/02/11 23:28:48.49 Ooe4jkn9.net
>>707
アンパンマンはキミだ。

724:はちみつ餃子
21/02/12 01:36:02.90 2OOQ6m86.net
>>708
宣言の有効範囲は宣言された場所からその宣言を含むブロックの終わりまでというのが原則
(クラススコープなどの例外はあるのでその他にも関連するルールはあるかもしれんけど)
なのでどちらもエラーになるのが筋だと思うし、 gcc や clang で試したらどっちもエラーだった。
逆にどういう理屈で前者が通るのかは気になる。

725:デフォルトの名無しさん
21/02/12 06:02:20.64 45Tu3B4L.net
>>708
当たり前だね
最初の例ではtargetEntryをグローバル空間に導入しているからbaz()とfoo()の両方から見える
2番目の例ではtargetEntryをbaz()のブロック内に導入しているから、そこに包含されないfoo()のブロックからは見えない
ただし、これはfoo()を関数原型と関数定義に分けて関数定義をbarよりも後方に置いた場合の話だ
原文のままでは>>711が言うとおり通るわけがない

726:デフォルトの名無しさん
21/02/12 06:03:16.30 45Tu3B4L.net
- barよりも後方
+ usingよりも後方

727:デフォルトの名無しさん
21/02/12 07:01:12.63 3x5iWh5q.net
確かにideoneでもVS2019でも両方エラーになるのですだが、
1番目の例はVS2010ではビルドも通って動くもーん
ソース:
URLリンク(ideone.com)
実行結果(※ VS2010限定):
1: 100
続行するには何かキーを押してください . . .

728:デフォルトの名無しさん
21/02/12 07:04:11.00 3x5iWh5q.net
ちな関数テンプレートfoo()の定義をusingよりも後方にしたら全てでビルドが通って動く
まそりゃーそうならないとおかしいが

729:デフォルトの名無しさん
21/02/12 07:12:42.48 45Tu3B4L.net
>>714
通ってねえじゃん
何が言いたいんだ?

730:デフォルトの名無しさん
21/02/12 07:17:08.75 3x5iWh5q.net
>>716
> >>714
> 通ってねえじゃん
> 何が言いたいんだ?
※ VS2010限定

731:デフォルトの名無しさん
21/02/12 07:24:49


732:.77 ID:45Tu3B4L.net



733:デフォルトの名無しさん
21/02/12 07:27:26.57 3x5iWh5q.net
全員の主張を再検証しただけでつよ?
>原文のままでは>>711が言うとおり通るわけがない (>>712)
が覆されてご機嫌ななめ??

734:デフォルトの名無しさん
21/02/12 07:32:07.63 45Tu3B4L.net
覆った?
おまえVS2010限定で逃げただろ
ill-formedはill-formed
これを覆せたら出直して来な

735:デフォルトの名無しさん
21/02/12 07:34:53.80 45Tu3B4L.net
俺も昔のバージョンのコンパイラは使うがバグ技は使わないし
そういうことをする厨二病とは組みたくない

736:デフォルトの名無しさん
21/02/12 07:38:38.54 3x5iWh5q.net
>おまえVS2010限定で逃げただろ
VS2010ではビルドが通るというのが話の発端なので…
1番目の例がill-formedであろう点は同意

737:デフォルトの名無しさん
21/02/12 07:51:23.22 45Tu3B4L.net
orzなんだろ
何が誰が悪いのかわかったら素直になれよ
居直る態度が気に入らねえ

738:デフォルトの名無しさん
21/02/12 08:12:22.74 3x5iWh5q.net
何が悪いのか、はともかく
誰が悪いのかとは一体…
つか現象(事実)の提示に対してそれを反発と解釈して勝手に炎上しないでいただきたい;;;
個人的にはVS2010のバグである可能性でほぼ確定とは思いつつ、
例1と例2で動きが違うことから、MSVC2010は、グローバルなシンボルについて
template foo()や関数baz()の中の解釈に入る前に名前空間を確定させる実装なのだと感じる
(template foo()の解釈ロジック自体にバグがあるなら例1、2とも同じ結果になるのが自然
再発防止のためには、C++規格のどこをどう読めば良いんじゃorz

739:デフォルトの名無しさん
21/02/12 08:57:55.62 45Tu3B4L.net
>>719は明らかに煽り口調だろうが
和解したいなら、あの態度を撤回しろ
俺は和解なんかできなくて構わんが

740:デフォルトの名無しさん
21/02/12 10:26:37.15 1W1GlA05.net
匿名掲示板で誰が何を言ったのどうのとみっともないぞデフォルトの名無しさんよ

741:デフォルトの名無しさん
21/02/12 11:29:35.12 jxDcSv/l.net
どう見ても>>716がイミフな言いがかりつけてるだけにしか見えんが…
> 確かにideoneでもVS2019でも両方エラーになるのですだが、
> 1番目の例はVS2010ではビルドも通って動くもーん

742:デフォルトの名無しさん
21/02/12 13:22:44.45 x9NfpsA7.net
匿名でも江副とかQZとか片山やはちみつが糞なのは伝わってくるω

743:デフォルトの名無しさん
21/02/12 18:24:14.30 45Tu3B4L.net
単発IDになりやがった
どこまでも腐ってやがるな

744:蟻人間
21/02/12 19:12:56.39 fTOQtm+W.net
どこでも動くように標準化しましょうねって話だよね。

745:蟻人間
21/02/12 19:29:19.43 WC9JZZt5.net
G++とかclang++などの複数のコンパイラで警告最大にして自動ビルドすれば再発防止できると思われます。

746:デフォルトの名無しさん
21/02/12 19:37:54.63 3abO7oQ0.net
流れをぶった切って質問です。
あるクラスで生成、削除を一切合切プライベートにしたい(ファクトリメソッドでスマートポインタを渡す)んだけど、
::deleteを対象クラスだけプライベート、あるいはコンパイルエラーにする
ことって可能かしらん?

747:蟻人間
21/02/12 19:46:11.11 WC9JZZt5.net
>>732
private dtor使え、だとよ。
URLリンク(stackoverflow.com)

748:蟻人間
21/02/12 19:55:37.68 fTOQtm+W.net
dtorはデストラクターの略ね。
死のトラクターじゃないよ。

749:デフォルトの名無しさん
21/02/13 02:57:21.77 ZCgeuP6g.net
映画化決定。

750:
21/02/15 00:20:32.87 M7Hs01/T.net
>>728
私が馬鹿なのは私自身が認めていることですが、片山さんはすごいと思いますよ、何よりも片山さんは多産ですし、私は片山さんを尊敬しています‥‥

751:デフォルトの名無しさん
21/02/15 12:30:59.56 tZ1nblID.net
>>733
ありがとう。参考になりました。
流石にグローバルdtorの直接呼び出しを気にしている人は居なさそうですね。
通常の使い方じゃないから気にするな、が正解かしらん。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch