1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part118 peace.2ch.net/test/read.cgi/tech/1435970316/ このスレもよろしくね。 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net peace.2ch.net/test/read.cgi/tech/1439849418/ 次期規格C++1zはこちら C++14/C++1z 20 peace.2ch.net/test/read.cgi/tech/1410382924/ ■長いソースを貼るときはここへ。■ codepad.org/ ideone.com/
445 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:33:20.20 ID:FVa42+rI.net] >>435 存在価値の話は関係無いと思うんだ。引用箇所は >>> あくまでも原理上の話ではあるので、現状がそうなっているわけではないのですが という話だからね。 C や C++ でも同じことでしょ、と言っている。
446 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:34:46.81 ID:PT+IC+/U.net] >>432 ちなみに禁止されていないのは確かだが、C言語では実現出来ないだろ。 C++で演算子のオーバーロードを基本型にも全部やってラップすれば達成可能な気もするが、 ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)
447 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:36:47.03 ID:ThaQ2i1X.net] >>439 Emscriptenでググれ 生ポインタの扱えないC言語(に限らないけど)だぞ
448 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:42:18.38 ID:PT+IC+/U.net] >>437 いやちょっと待て。実はEmscriptenは使用を検討しようとしていた。 理由は生JavaScriptが色々糞だからで、TypeScriptも検討中だ。 それはEmscripten用の書き方だということか? ならば確かにその記述方法は妥当だろう。 LLVMからの変換だと思っていたが、それ以前にLLVMに生ポインタコードが出ないようにラップするわけだな。
449 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:44:12.61 ID:FVa42+rI.net] >>439 >385 で言ってた↓の根拠は不明で「ポインタのところに若干制限があった気がする。(ただこの辺は余り詳しくない)」ということでいいかな? > C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能) > だから4GBの壁が直接見える。 なんかはっきりした根拠を思い出したら教えて欲しい。
450 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:58:38.83 ID:39XjsZ/s.net] いやもう、彼の頭をデバッグするのバカらしいし、やめようよ
451 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:58:39.53 ID:PT+IC+/U.net] >>438 それは繰り返しにしかならないが、以下の通り。 原理的な話なら、抽象化された変数領域しか持たない言語(C#,Java)では、アドレスというものがそもそも見えない。 だから、4GBの壁がそもそもユーザーに見えない。 これに対して、C/C++では4GBの壁がユーザーに丸見えだ。 >>432 のように、ポインタをユーザーがラップして全てint**とかにした場合、それは「ユーザーがそう記述した」という。---(A) そうではなくて、ユーザーが通常通り int* のまま使っていて、 それをコンパイラだけで int* のネイティブにするのか、int** のJava的参照ポインタにするのかをコンパイルオプションで切り換えられるのなら、 ---(B) それは「コンパイラで4GBの壁を越えた」という。 いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。 ところで、Emscriptenは(B)のどちらなのか、知っていたら教えてくれ。 (ユーザ側で int** と意識して書く必要があるのか、 もしかしてユーザーは int* のままで書いてもEmscriptenが int** に完全に変換できるのか)
452 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 19:59:56.93 ID:39XjsZ/s.net] この感じ、知っている人は知っている、毛の壁臭
453 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:06:26.45 ID:PT+IC+/U.net] >>442 違う。 > ポインタのところに若干制限があった気がする。 演算子のオーバーライドは俺は使ってないので詳しくないのだが、 最近読み直した「プログラミング言語C++」には11.2.3に(第3版ならP317) > 特に、ポインタだけを操作する演算子関数は定義できないことに注意して頂きたい。 とあって、この件について本の中で別に説明されていたのだが、今見ても該当部分がすぐには出てこないということ。 たしかC言語との互換性を保つために、ポインタ演算子については自由に上書きできない部分があったはず。 > C/C++はメモリモデルがフラットで、リニアにアクセスできる前提だ。(ポインタは常にアクセス可能) > だから4GBの壁が直接見える。 根拠も何も、そのまんまだ。 逆に聞いてみよう。 君はC#が使えるみたいだが、C#のマネージドコードだけの世界で、4GBの壁を意識することはあったかい? 無いだろ。そういうことだよ。
454 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:14:07.69 ID:FVa42+rI.net] >>444 > これに対して、C/C++では4GBの壁がユーザーに丸見えだ。 これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。 > いずれにしても、C/C++言語自体で4GBの壁を越えたというのは言い過ぎだ。 だれもそんなことは言ってないと思うんだ。 「C/C++では4GBの壁がユーザーに丸見えだ」などという人が一人いるので、それは 言い過ぎだと言っている。 >>446 「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。 ループ気味になってきたし、ここまでの書き込みをちゃんと読んで理解しようとしてくれていれば この流れでそんなこと言えるわけが無いと思うんで、僕もそろそろ降りさせてもらうよ。
455 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:21:17.81 ID:PT+IC+/U.net] >>447 > これも「気がする」かな。断言するなら根拠をはっきり示せることを確認してね。 いや見えてるだろ明らかに。 void*が32bit環境では4GBまでしか表せない。だから4GBの壁が見える。 C#やJavaにはこれがない。それだけの話だよ。 > 「演算子が上書きできない」→「4GBの壁」っていうつながりがあると思ってるのか。 あるだろ。というか言い出したのはそちらだが。 4GBの壁は変数領域が抽象化されていないから見える。 だから、int**にして抽象化すれば直接は見えなくなる。 これがC#やJavaで4GBの壁が見えない理由そのものだ。ブログ主もこの観点で言っている。 まあいいよ。完全にループだし、君の論法もループしている。 降りで了解だ。こちらもその方が助かる。 それはそうとEmscriptenの情報があればよろしく。
456 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 20:30:45.91 ID:39XjsZ/s.net] 何かっこつけてんだよ、初心者の癖に
457 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 21:15:01.03 ID:ozShReaP.net] クサカベは知ってるけど 毛の何とかは知らないなあ
458 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 21:58:18.19 ID:PT+IC+/U.net] >>444 ,448 スレチだが自己解決した。 生ポインタはTypedArrayにマッピングされるようだ。 まあ、冷静に考えれば当然だった。
459 名前:デフォルトの名無しさん [2015/09/22(火) 22:12:42.50 ID:hQ0EouVl.net] 4GBの壁か。 配列を使う場合など、データサイズの上限なんかは 何言語であろうと普通に何らかの了解のもとに使っているよなあ。 C++ みたいにsizeof(void*)がはっきりしてれば自明の理として納得いくが、 そうでない言語では怪しげなご託宣に従うしかないという 理詰めな性格の人には優しくない話だよね。
460 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:39:14.16 ID:PT+IC+/U.net] むしろ俺は話の通じなさにびっくりだったわ。 32bit環境でのC言語で4GBの壁が見えるのは自明でしかない。 それを見えないと言われても頭おかしいとしか思えない。 >>447 マジでお前らは他言語少しでも触った方がいい。 完全に盲目になっている。
461 名前:412 mailto:sage [2015/09/22(火) 23:51:24.00 ID:7b9YUjXM.net] むしろ わざわざ>>412 で『"sequence"は複数形だぞ』 って書いてやったのに目に入らない盲目にびっくりだわ
462 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:55:40.08 ID:PT+IC+/U.net] >>454 いやそこは関係ないんだよ。 ちなみに君もC/C++しかできないのか? ちょっとマジで他言語、何でもいいからやってみた方がいい。
463 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 23:57:25.78 ID:LojobDxZ.net] 特定の処理系でvoid*が32bitという話でしかない まあ、それで99.9%困らないからcpuの機能に薄い皮被せて見せているだけのはなし 16bit時代にhugeやfarでそれ以上にアクセス出来るようにしてあったのは、それですまないほど不便だったから cやc++はの扱うcpuはハーバードだったり1ワード16bitがアドレスの指し示す最小単位だったりとなんでもあり
464 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:02:54.19 ID:M/UFFhhb.net] 32bitで表現できるポインタが4GBまでだが、仮に1アドレスが4バイトでも良いんじゃないかとも思った。 文字列は2文字ないし4文字でワンセットになるけど
465 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:07:22.49 ID:Q8fOJWKp.net] >>453 「32bit環境でのC言語で4GBの壁が見える」が言えるのと同じように 「参照を32bitアドレスで表現しているJava/C#処理系では4GBの壁が見える」とも言える ・・・んじゃないの?
466 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:15:57.36 ID:qfkgp73Y.net] バカに物事を理解させるのって本当に大変だね 教師には頭が下がるよ 俺にこんなバカで尊大な生徒が居たら無視していじめ問題とかになってるわ
467 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:24:11.18 ID:MwhyHk4V.net] >>458 それはその通り。 ただ、参照自体のサイズをユーザーが関知する必要がない。(ソースコードに現れない) そこが決定的に違う。 だから、処理系が勝手に64bit参照にしていたとしても、同じソースコードがそのまま動くことになる。 ただ悪いが、この件に関して俺がいちいち回答する必要はマジでない。 俺が言っているのは本当に自明なことばかりであるし、君達も少し他言語をかじるだけで分かる話だ。
468 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:28:22.82 ID:nPFFi/Oi.net] ほうほう、C++だとポインターのサイズがソースコード上に現れて同じソースが使えないのですか もちろんポインターのビットイメージを操作する場合を除いてですが
469 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:33:24.68 ID:qfkgp73Y.net] >>461 わざわざコードを書くときにポインタのサイズを意識して同じソースコードで動くように書かないんだろうよ 無能な働き者ってやつだ
470 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:51:40.95 ID:KSDSHGp7.net] staticの意味すら知らなかったんだからC/C++をろくに知らないんだろう。 JavaやC#ですら思い込みによる間違った認識に囚われていた。 ISO/IEC 14882:2014と言われてどのNxxxxかと尋ねるあたりは勘違いのしやすさを象徴していたな。 それでこの態度だから、まわりもろくに間違いを指摘してくれないんだろう。かわいそうに。
471 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:52:34.21 ID:MwhyHk4V.net] 悪いがいちいち面倒なので、アホレスしたIDはそれ以降無視することにするよ。 とりあえず現在の無視対象は ID:nPFFi/Oi, ID:qfkgp73Y マジでお前ら他言語触った方がいい。 そもそも他言語ではアドレス自体を取れないことが多い。 次に、取れたとしてもキャストできなかったりする。 だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。 C言語において無理なキャストをしなければ void* のサイズはコンパイラが自動的に判断して確保してくれる。 結果、32bitと64bitで同じコードが動く。 これはID:nPFFi/Oi, ID:qfkgp73Yみたいな馬鹿でも知っている、当たり前の話だ。 ただこれはユーザーがちゃんとそう記述したことを保証しなければならない。つまり、ユーザー依存だ。 上記のように、そもそもアドレスを取れない言語では、ユーザーがどうやっても sizeof(void*) 依存のコードを記述できない。 だからそもそも 32bit とか 64bit とか気にする必要もない。ここが決定的に違う。 何度も言うけど、お前ら本当に他言語を少しでも触った方がいい。
472 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 00:58:25.97 ID:nPFFi/Oi.net] そういやVisual Basic 6.0って文字列のアドレス取れたし ビット数依存の糞コードが散乱していたな
473 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:04:51.91 ID:qfkgp73Y.net] >>463 思い込みの塊みたいなやつだから周りが指摘しても意味が無いんだろ それはここで証明されてるじゃないか 指摘すると思い込み一つ増えたみたいだしね。 ここの住人が他の言語を触ったことがないって
474 名前:デフォルトの名無しさん [2015/09/23(水) 01:05:07.72 ID:AnQ6XBDy.net] アドレスを扱えるのは機能性の一つであって欠点ではないよ?
475 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:06:11.71 ID:i5QbssGO.net] なんか時々現れるよな 新手のキチガイが
476 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:08:10.92 ID:qfkgp73Y.net] >>467 場合によっては欠点になるよ 上にも書いたけど無能な働き者によって他の環境で動かなくなる
477 名前:デフォルトの名無しさん [2015/09/23(水) 01:13:44.76 ID:AnQ6XBDy.net] そりゃ書いたとおりにしか動かないでしょ。
478 名前:デフォルトの名無しさん [2015/09/23(水) 01:16:15.46 ID:AnQ6XBDy.net] 1+1を間違えて1+2と書く恐れがあるから+演算子を無くすべき!とか言ったって仕方ないよ。
479 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:21:28.78 ID:MwhyHk4V.net] >>467 もちろんその通り。 生ポインタを扱えることこそがCの最大の特徴であり、それをやらないのならCを使う意味はほぼ無い。 ただ生ポインタってのは実際は両刃の剣で、生ポインタさえなければ色々なことが単純になるんだよ。 そこは元のブログにも書かれているし、もっと他にも色々ある。 結果、Java作者はない方がいいと思ったから廃止したし、 C#作者は無いと困るがふんだんに使われても困るということで例外的使用に留めている。 ただまあ、本当にここら辺は一般論で、別に俺がわざわざここで言い直す必要もなく、 他でもさんざん言われていることだ。あのブログの中でも然り。 そしてそう思う奴も覆いから他言語も賑わっているわけで。 てゆうかもういいっすかね。特に俺である必要ないはずだし。
480 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:23:01.21 ID:0mJKXhs3.net] いや、皆がお前だけ消えてくれることをのぞんでるぞ
481 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:23:53.95 ID:v0Nc4YZQ.net] >>472 うん、もういいよ お前の代わりは居ないけど要らないから
482 名前:デフォルトの名無しさん [2015/09/23(水) 01:28:45.41 ID:AnQ6XBDy.net] 今はどの環境でもリークをチェックできるし困ることは何もないけどなあ。 後始末の必要なリソースはメモリーに限らないので、メモリー管理によって鍛えられた C++戦士は凄腕プログラマへの近道。
483 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:31:43.38 ID:nPFFi/Oi.net] >メモリー管理によって鍛えられた >C++戦士は凄腕プログラマへの近道 もうC++を使わないで下さいね他人がきっと迷惑してます
484 名前:デフォルトの名無しさん [2015/09/23(水) 01:32:57.44 ID:AnQ6XBDy.net] >>476 なるほど、キミはバトルプログラマーを知らないんだね?
485 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:38:23.42 ID:M/UFFhhb.net] 最近はスキルが有効かどうかが環境より言語に左右されるような気がする。
486 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:45:30.10 ID:iC4K+Xaq.net] >>472 >結果、Java作者はない方がいいと思ったから廃止したし、 Java8で復活した部分がある,C++ では ->*, ::* で扱うポインタ Java での呼び名:メソッド参照 peace.2ch.net/test/read.cgi/tech/1434079972/12
487 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:49:55.57 ID:nPFFi/Oi.net] 危険を伴う有用な機能を具備することのリスクが 説明を受けても理解できない低能はどうしようもないな だから>>479 みたいなとんちんかんなレスをするんだろう
488 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 01:55:54.98 ID:IndlIx5T.net] 散々論破されてるのに悪いと思わない時点でただのキチガイだろ
489 名前:デフォルトの名無しさん [2015/09/23(水) 01:58:32.17 ID:AnQ6XBDy.net] はあ、また論破してしまった。 やはりC++は最強だな。
490 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:02:23.55 ID:IndlIx5T.net] >>464 >そもそも他言語ではアドレス自体を取れないことが多い。 >次に、取れたとしてもキャストできなかったりする。 >だから、どうやっても sizeof(void*) 依存のコードを記述できない言語の方が多い。 君の大好きなC#はポインタもsizeofも取れるよ 君は他言語を触る前にC#について勉強しなさい
491 名前:デフォルトの名無しさん [2015/09/23(水) 02:04:33.69 ID:AnQ6XBDy.net] しかし今日の敵は弱かったな。 今までで最弱じゃないか?
492 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:12:08.91 ID:MwhyHk4V.net] >>479 これか? qiita.com/pepepe/items/3d810e1bbed25768caa0 これは危険なタイプの生ポインタではないんだ。だから問題ない。
493 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:12:34.07 ID:qfkgp73Y.net] 最初は32bit環境で4GB越えのバイナリを実行できる CやC++は出来ない だったはずなのに、指摘されても誤りを認めず最後の方には 参照が32bitであることを関知する必要がない に変わってた。
494 名前:デフォルトの名無しさん [2015/09/23(水) 02:18:39.97 ID:AnQ6XBDy.net] C/C++で出来ないことはレジスタをいじること。 他は何でもできるから。 わかったらもうケンカ売ってくるなよw
495 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 02:51:39.64 ID:iC4K+Xaq.net] キャリーフラグは触れてほしかったね‥ キャリーの読み込み,書き出しをしたいんだ インラインだと後で最適化という介入があって心配だ
496 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 05:09:46.93 ID:DOrhv1Zg.net] >>448 > void*が32bit環境では4GBまでしか表せない。 この時点でなにもわかってないことがバレバレじゃん w
497 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 05:12:56.52 ID:sl1FEDPC.net] >>487 インラインアセンブラはダメか
498 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 06:12:19.83 ID:kDaXs3BE.net] メモリマップドレジスタみたいに環境によっては弄れるよね
499 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 11:53:18.53 ID:dAcDykGY.net] >>490 ありゃ規格の範囲外だからな。 gcc に慣れすぎて、他の使うとつらい。 >>491 I/Oレジスタじゃなくて、CPU のレジスタの話じゃないかな?
500 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 13:59:22.37 ID:DOrhv1Zg.net] >>491 レジスタは読むだけでフラグリセットしたり複数回読むと違う値になったりする奴があるから高級言語で読み書きするのはちょっと怖い >>492 どこまでを CPU レジスタって言うかによる
501 名前:デフォルトの名無しさん [2015/09/23(水) 20:23:32.33 ID:VRhTdQAB.net] メモリマップドI/Oではなく、 メモリマップドレジスタね 制御記憶が主記憶空間にマッピングされているという
502 名前:デフォルトの名無しさん mailto:sagete [2015/09/23(水) 20:32:04.80 ID:1jqGrEyR.net] 2Dゲーム当たり判定総合 [転載禁止]c2ch.net peace.2ch.net/test/read.cgi/tech/1442990347/
503 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 20:43:11.41 ID:3ci5dXPK.net] 0ページレジスタもね
504 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/23(水) 20:54:04.93 ID:KfupEJ55.net] △ マップド D マップト
505 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 21:07:34.84 ID:D/ibv0yF.net] クソコテは日本語もマトモに書けないのか
506 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/23(水) 21:15:35.76 ID:KfupEJ55.net] >>498 添削の時間は限られている。まる、ばつ、さんかくだけで採点できる。
507 名前:デフォルトの名無しさん mailto:sage [2015/09/23(水) 22:20:05.97 ID:lyPqrQHB.net] >>499 添削?採点? 突然何を言い出すのですか。頭は大丈夫ですか。 それにまるばつさんかく以外の記号が書かれているようです。
508 名前:デフォルトの名無しさん mailto:sage [2015/09/24(木) 01:42:54.1
] [ここ壊れてます]
509 名前:3 ID:/TjFSMYs.net mailto: 基地外が新たな基地外を呼び寄せるカオスなスレ [] [ここ壊れてます]
510 名前:デフォルトの名無しさん [2015/09/24(木) 22:11:32.00 ID:O8aOI61G.net] 初期化子でthisを渡すと警告が出ていたと思うんだけど、いつの日からか出なくなった。 どこかの時点で規格が変わったの?
511 名前:デフォルトの名無しさん mailto:sage [2015/09/24(木) 23:09:55.66 ID:y5NlXAUf.net] >>502 普通のコンパイラーでは 警告と規格は関係ありません
512 名前:デフォルトの名無しさん [2015/09/25(金) 00:05:04.36 ID:WA9ffgJV.net] もしかしてthisへの代入があった ごく初期のC++のことか?
513 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 01:39:59.76 ID:hOC+hAXG.net] >>502 これ? https://msdn.microsoft.com/en-us/library/3c594ae3.aspx > 'this' : used in base member initializer list ... > This warning is off by default. ...
514 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 23:34:43.11 ID:IdnO5CBH.net] STLのコンテナcで*(c.begin())とやるのとc.front()とやるのは何か違うの? 同じだとしたらどっちがどっちの糖衣構文?
515 名前:デフォルトの名無しさん mailto:sage [2015/09/25(金) 23:55:05.37 ID:Ku6iuwWR.net] >>506 糖衣構文では無いよ。 先頭要素にアクセスすると言う目的に対して、同じ結果が得られる別の手段があったというだけの事。 より目的に合っているのは後者だと思うけど。
516 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 00:00:24.18 ID:9hL7F3GQ.net] かなり長いことC++触って無いけど もうboostは、標準仕様になってるんですか? まぁ、コンパイラによるから、何とも言えないかも しれないけどさ
517 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 00:06:37.49 ID:cPpGYmLk.net] >>508 boostのどのライブラリ? 全てなら永遠にその時は来ないよ
518 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 08:10:46.09 ID:OajUOnCA.net] boostの社内における認識が、「誰が作ったか分からないハイリスクなライブラリ」から 「実績があり安心して使える準標準ライブラリ」になるのはいつですかね…
519 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 08:23:46.53 ID:ySVgmYih.net] boostに重大なバグがあって会社に損害を与えたとき誰も責任を取れないでしょ? 永遠にその時は来ないよ。
520 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 09:17:56.96 ID:teqXcjFQ.net] boostは、その全てが必ず標準化されるわけでは無いよ。
521 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 09:21:36.35 ID:T1LoOiMi.net] ↑ごらんください! これがアスペです!!
522 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 09:37:29.93 ID:cPpGYmLk.net] >>511 OSS全く使えない会社か 勤めたくないね
523 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 11:02:45.10 ID:xWCYZ6+4.net] そういう会社はboostよりも先に自分が作り込んだ重大バグで潰れるから心配ない
524 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 11:30:42.93 ID:FH4mU5/4.net] そう言えば、バグがあった時直せないからって理由で、C++開発なのにC++標準ライブラリ禁止って職場があったわ
525 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 12:50:25.19 ID:9hL7F3GQ.net] >>516 スゴイ会社だな 会社で使ってるコンパイラが信用出来ないのか…… もしかしてVectorとかのSTLが禁止? まぁ、VC++6.0ではVectorで醜いバグあったらしいが って事は、コンパイラ作ってる様なもんだな (コンパイラは言い過ぎかも知んないけど)
526 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:00:09.30 ID:FH4mU5/4.net] >>517 コンテナはOKだった と、言ってもstring、vector、mapくらいしか使ってなかった気がする algorithmは全面禁止だった なので、ループ文とそのコピペの嵐で読むのも辛かったしバグも多かった記憶
527 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:05:49.06 ID:FH4mU5/4.net] 書いてて思い出し笑いしちゃったよ 「バクがあった時直せない」って理由で標準ライブラリ使わずに、自作コードでバクだらけとか、草生えまくりだなwww
528 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:19:28.92 ID:uKQbY5Ux.net] A a = A(); ってやったとき ・単にaが構築される ・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる ・左辺と右辺がそれぞれ構築されてから左辺のコピー(ムーブ)代入演算子が呼ばれる どれ? デバッガで追ってみるとコピー(ムーブ)コンストラクタ/代入演算子は呼ばれてないから ・単にaが構築される のはずなんだけど コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると なぜかエラーが出るんだよね A &a = A(); ってやるとコンパイル通るけどMSVCの独自拡張みたい? 素直に A a(); ってやればいいんだけど A *a = new A(); ってやったときとシンタックスの一貫性がなくて微妙。 (常に 変数 = コンストラクタ の形にしたい) あと関数宣言として解釈されることがあってイライラ。 標準規格とかでどう定義されているのかとか、説明できる方がいたら教えて下さい。
529 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:34:13.70 ID:GN/a0FjA.net] >コピー(ムーブ)コンストラクタ/代入演算子がないクラスでこれやると >なぜかエラーが出るんだよね マジ? ここがおかしいような気がする
530 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:34:31.65 ID:8isGWqIv.net] 普通にコピコンだろう
531 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 13:37:52.70 ID:xWCYZ6+4.net] コピペをしない自作なら、自分で理解できるだろう、直せるだろう。 なのかな? そういえば、GCC使って開発してたとき、GPSに触れないよう 使うライブラリを全部自社開発したことはあったな
532 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 14:33:54.80 ID:NFyEOKoE.net] 規格上はコピーコンストラクタが走るけど、 コピコンに副作用が無さそうと判断されたら、 最適化の際にただのコンストラクタによる構築に勝手に変更されている と我が脳内コンパイラは申しております 実際のところどうなんだろう
533 名前:デフォルトの名無しさん [2015/09/26(土) 15:45:53.15 ID:b1WQaLX+.net] 設定ファイル(1行には設定項目名と値が1つずつ書いてある)を読み込んで、 設定項目ごとに対応する変数に値を格納する関数があります。 設定項目は200個くらいあって、それに応じてif文が200個くらいあります。 静的検査で、「循環的複雑度」とかいう指標が200とかになって、 これをもっと小さくしなければならないことになりました。(40以下くらい) どういう風に作るのがスマートだと思いますか?
534 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 15:50:09.12 ID:snRIqmgr.net] そんな変な書き方は今すぐ止めればいいと思います >A a(); >ってやればいいんだけど >A *a = new A(); >ってやったときとシンタックスの一貫性がなくて微妙。 やってること、やりたいこと、が別なのに 一貫性を求める必要は無いと思います タイプ量が増えるだけでしょう
535 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 15:53:15.68 ID:snRIqmgr.net] >>525 mapを使うか もしくは設定項目文字列とenumのテーブルを用意して配列に突っ込む
536 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 16:49:06.14 ID:mVMjJSEh.net] >>520 >・単にaが構築される >・右辺が構築されてから左辺のコピー(ムーブ)コンストラクタが呼ばれる のいずれか。規格ではどちらも許される ただし仮に後者を採用したとしてコンパイルエラーになるコードは 許されていない(コピーコンストラクターがprivateなど) 呼ばないことによる副作用の有無は関係無い
537 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 18:22:01.93 ID:9hL7F3GQ.net] C++でコード書くの嫌い 最適化云々で、クラスを.hで書いてメンバ関数は.cppに 書くべきだから、正直メンドクセ。 でもテンプレートはヘッダー内に全部書くべきだし…… 全部volatileつければ、問題無いのか? でも、それもメンドクセ。 最近はAndoroidアプリ作ってるから、クラス内に全部書けるけど javaだから、unsignedがなんてcharだけなのか そんで、オペレーター無いし あと、いくらGCでも、「ちゃんとこっちで始末しますから」 って思ったりもする。 それと、C++みたいにprivateのラベルの様に 「こっからここまでprivate」みたいに……… 愚痴は、いくらでも出るのに、ロクなコード書けない俺が 一番やっかい。
538 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 19:00:14.27 ID:1RpaQohZ.net] >>525 使えるのならリフレクション。 キーワードが共通の時にテーブルを書く手間をケチれる。 一応C++でもモドキがあるようだからいけるはず。 taichino.com/programming/1945
539 名前:デフォルトの名無しさん [2015/09/26(土) 23:32:48.30 ID:5mMoR0BV.net] >>525 自分の上司に訊きなさい。
540 名前:デフォルトの名無しさん mailto:sage [2015/09/26(土) 23:47:31.13 ID:G4HmjC7J.net] 上司にきくことじゃないな >>531 みたいなバカは脳がスカスカなので 次にタイプする文字も上司に訊いてるんだろう
541 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 00:28:15.57 ID:Aie1F5/k.net] >>525 辞書(HashMap)、関数ポインタなどで、 vTableのように、文字列と処理を結びつける
542 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 00:57:34.05 ID:IK6WV2UC.net] 関数内で関数の宣言したらコンパイル通って驚いた void Func() {
543 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 00:58:05.23 ID:IK6WV2UC.net] void A(); } みたいな感じでね
544 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 01:06:55.56 ID:YOaTuDE7.net] >>520 A && a = A{}; これでOK
545 名前:デフォルトの名無しさん mailto:sage [2015/09/27(日) 01:21:55.60 ID:7JlNsb+t.net] Cから受け継いだクソ仕様だな