C++相談室 part146
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/11/07(木) 11:35:36.76ID:4wggfTwe
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part145
http://mevius.5ch.net/test/read.cgi/tech/1568362404/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
0474デフォルトの名無しさん
垢版 |
2019/12/02(月) 13:30:11.70ID:wB1a1keO
>>468
それは完全に理解不足
Javaや.NETのVMはC++で静的に確保した大きなメモリ領域をヒープと呼んでいる
でアプリ内でnewするとオブジェクトとしてその中の領域が割り当てられ、ハンドル(生ポではない!)をアプリがオブジェクト参照として受け取る
C++のオブジェクトとの大きな違いはオブジェクトを再配置できることであり、
GCが必要に応じてヒープ上のオブジェクトを移動して詰めるため断片化が生じにくい
C++でも生ポを使わなければ再配置できるんだけどね
0477デフォルトの名無しさん
垢版 |
2019/12/02(月) 13:49:06.39ID:az4xQt0G
やってることがさほど変わらず100MB確保から1GB確保にするだけで
断片化率が1/10になる

プログラミングの技量が全く変化しないのにも関わらず安全性が10倍になる
つまりマシンの搭載メモリが1GBから10GBになるだけで安全係数が10倍になる
これぞ大富豪プログラミング
0479デフォルトの名無しさん
垢版 |
2019/12/02(月) 15:20:31.50ID:Vo2mhncO
>>468
実はかなり古くから、C/C++ の malloc(), new のヒープメモリから確保したメモリの
断片化は、実際に問題になるようなことはとても少ないといわれています。
というのは、断片化というのは、確保したメモリを開放したときに出来た
「隙間にある空きメモリ」が再利用されにくい場合に起きるものなんですが、
実際には、再利用されることが多いためです。なぜなら、おなじサイズの
オブジェクトを new することが多いためです。この場合、完全に再利用されるので
断片化の問題と言うものは全く起きないと言っても過言では有りません。
それから、通常、1つのオブジェクトのサイズは小さく、それが多数集まって
データをなしていることが多いのです。このことから、異なるサイズのオブジェクト
であっても、1つ1つのオブジェクトのサイズが小さいため、断片化したとしても、
再利用される確率が高いのです。まず、同じサイズのオブジェクトであれば再利用されます。
異なるサイズであっても、昔開放されたオブジェクトよりも、小さいサイズのオブジェクトを
新しく確保する場合であれば再利用されます。
このようなことから現実の例では、断片化しても、使われないメモリの量はある程度の比率
に収まると言われており、それは GarbageCollection を行うためのオーバーヘッドの
メモリのサイズと比べても余り大きいものではないのです。

ゲームはメモリー効率も求められますが、それでも C/C++ が使われているのは、
メモリー断片化の量が一定比率より多くなら無い事が経験的に知られているためです。
0480デフォルトの名無しさん
垢版 |
2019/12/02(月) 15:28:19.20ID:/N45p/D+
フェイスブックがPHPのコードを翻訳機でC++コードに変換して配備してるそうですが。
そんなことするなら最初からC++で書けばいいのに。
0481デフォルトの名無しさん
垢版 |
2019/12/02(月) 15:33:38.42ID:Vo2mhncO
>>474
C/C++ では、配列ではなくリンクリストを積極的に使うようにすることに
よって、メモリーが断片化しても再利用される確率を高くすることができます。
というのは、データの基本となっている要素のオブジェクトのサイズが
小さいため、さまざまなサイズのデータを new しても、結果的に、
断片化された空きメモリも高い確率で再利用されるためです。
new、delete するオブジェクトのサイズがランダムな場合で、
断片化空きメモリが残っている場合、確率論的には、おおよそ 2回に1回は
断片化空きメモリが再利用されることになるでしょう。もちろん、
delete された回数が少な過ぎる場合、そもそも断片化空きメモリの個数が少なすぎる
ので、再利用できる確率は低くなります。それは、初期化時やファイルからデータ
読み込み時などにどんどんメモリを new していくよう場合ですので、そもそも
断片化が起きる余地も有りません。

なお、ポインタとリンクリストを組み合わせると、よくある場合には、他の
集合アルゴリズムよりも、効率が高くなりやすいことが知られています。
ただし、文字を集合させて文字列を作るような場合は例外です。
0482デフォルトの名無しさん
垢版 |
2019/12/02(月) 15:39:04.52ID:Vo2mhncO
>>481
配列の場合、delete するとメモリー上に大きな空き領域が出来ますが、
それより大きなサイズの配列を new しようとすると、そこが再利用できません。
なぜなら、配列の場合、連続したメモリ領域が固まって必要になるため、
要素の個数が N だとすると、N 個全てが一度にまとまって入りきる領域を探す
必要になるためです。

ところが、リンクリストの場合、要素数 N が大きくなっても、バラバラな
領域に分散して格納することが出来ます。すると、とても高い確率で、
分断化された空きメモリが再利用されることになります。
0483デフォルトの名無しさん
垢版 |
2019/12/02(月) 15:50:07.84ID:Vo2mhncO
>>481
「2回に1回」と書きましたが、実際にはもっと確率は高いです。
リンクリストを使っている場合、要素を全部 delete したような場合は、開放された
空きブロックは、余り断片化せずに、比較的高い確率で結合され、大きな空きブロックに
なるためです。空きメモリは、元の要素のサイズの複数個分以上になっている確率が
高くなります(複雑ですが、管理領域のサイズもこれに加わります。)。
この性質があるため、現実には、小さいサイズのオブジェクトを要素とする集合
が多種類有った場合、それを好きに new, delete した場合、50% よりずっと高い確率で
断片化空きメモリーは再利用されます。
0484デフォルトの名無しさん
垢版 |
2019/12/02(月) 16:10:33.93ID:Vo2mhncO
>>483
誤解無きように細くしておくと、「50% より大きい」というのは、
「断片化された空き領域が再利用される確率」
のことで、「断片化率」ではありません、。断片化率はもっと
小さな値になり、条件によりますが、例えば、数%〜10%程度
が目安になります。最悪のケースだともっと大きいのですが、
ケースバイケースで適切なデータ構造(集合アルゴリズム)を
使っているとこの程度に収まります。また、適切なデータ構造を
選択することはそんなに難しいわけではありません、。
0485デフォルトの名無しさん
垢版 |
2019/12/02(月) 16:15:53.26ID:Vo2mhncO
>>475
既に、Windows95くらいの時期のメモリ容量で、C/C++のメモリ断片化は
問題が無い程度になっていました。実際には、MS-DOSの時代でも既に
問題なかったのですが。

とにかく、今の若い人の目線で言えば、古代ともいえるくらい古い時代に
既に C/C++ のメモリー断片化問題は問題が無い程度にハードウェアが
発達済みなのです。PC-8801 の 8BIT 時代には問題があったので、
N88-BASIC を筆頭に、GarbageCollection 方式をとっていましたが、
それは、若い人には「超古代文明」時代でしょう。
0486デフォルトの名無しさん
垢版 |
2019/12/02(月) 16:34:28.08ID:Vo2mhncO
>>485
また誤解が入りそうなので細くしておきます。
N88-BASIC などが GarbageCollection を使っていたのは、本当に
マシンのメモリが少ないのでデータをぎゅーぎゅー詰めに隙間無く
入れることが重要だったためです。
一方、JavaやC#がGarbageCollection を使っているのは、どちらかと
いうと、「メモリー開放の自動化」のためです。参照カウンタだけで
は、循環参照問題が生じるため、時々、広い範囲のメモリブロックを
巡回して、循環参照していても本当に使って無い場合を厳密に見つけ出して、
徹底的に開放することを行います。
そのため、メモリーの断片化問題とはまた違う意味で、メモリー開放の
自動化には、GarbageCollection が必要となっています。

N88-BASIC 時代と、現在の Java, C# とでは、同じ GarbageCollection
でも主な役割が違うと考えられます。もちろん、断片化を防ぐ役割も同時に
果たしてくれますが。
0487デフォルトの名無しさん
垢版 |
2019/12/02(月) 16:40:43.00ID:Vo2mhncO
>>486
誤字訂正: 細く ---> 補足

・BASIC言語にはポインタが無かったので、循環参照問題は有りませんでした。
・BASIC言語における GarbageCollection は、主に文字列領域の開放のためです。
 A$="HELLO WORLD" と入れた後、A$="" とした時、元の文字列に使っていた
 領域は、しばらく経った後に GarbageCollection で開放される仕組みでした。
 ですので、文字列を余り使わなければ GarbageCollection も余りおきませんでした。
 なお、DIM A(100) のように確保した配列は、余り開放することは有りませんでしたが、
 開放した場合も、しばらく後に GarbageCollection の対象になっていたと思われます。
0488デフォルトの名無しさん
垢版 |
2019/12/02(月) 17:06:01.34ID:wB1a1keO
リンクリストってシーケンシャルアクセスで毎回キャッシュミスするから、
配列の代わりに全面的に使ったりしたら断片化とか最早どうでもいいレベルでパフォーマンス低下するぞ
0489デフォルトの名無しさん
垢版 |
2019/12/02(月) 17:15:40.51ID:Vo2mhncO
>>488
リンクリストでシーケンシャルアクセスする場合、キャッシュ以前に
ポインタをたどるようにアクセスしないといけないのですが、
最近、配列と同じような通し番号方式でアクセスしようとする人が
多くなっています。ライブラリなどは、以前にアクセスした番号が
k の場合、そのポインタを覚えておいて、プログラマが k + 1 の番号
をアクセスしようとした場合、後続のノードへのポインタをたどる
ことで高速化している場合があるので、特に問題が無い場合がありますが、
それを深く理解せずに、本当に先頭のノードからたどってしまった場合、
本来なら O(N)で済むところが、O(N^2) になってしまいます。
0490デフォルトの名無しさん
垢版 |
2019/12/02(月) 17:16:14.80ID:/N45p/D+
>>487
ヌルポ。
0491デフォルトの名無しさん
垢版 |
2019/12/02(月) 17:18:32.46ID:Vo2mhncO
>>489
C/C++ でのリンクリストは、場所を覚えるのは通し番号ではなく、ポインタ
で行うことが基本です。ところが、最近、通し番号で覚えてしまうプログラムを
書く人が増えているように感じます。それは、キャッシュのために遅くなっているの
ではなく、計算オーダーが完全に違ってくるために遅くなるため、ただごとではない
遅さを招きます。
0495デフォルトの名無しさん
垢版 |
2019/12/02(月) 22:59:36.28ID:OlcC/UBE
ハッシュテーブルで要素Xが既存要素Yと衝突した場合でもXを格納したい場合は
リハッシュかリストになる
キモス

リハッシュで容量をちゃんと使い切るには相当にハッシュ関数を考えねばならない上に
衝突データを取り出すのに何回リハッシュしたかを見ながら要素をたどっていく必要があり、
ハッシュの検索性を帳消しにしてしまいかねない

よってリストのが圧倒的に簡単で速い
0496デフォルトの名無しさん
垢版 |
2019/12/02(月) 23:15:49.08ID:OlcC/UBE
>>493
ある
ガベージコレクト対象データでもって他のガベージコレクト対象データを指し示すような
再帰構造が表現不可能なら循環参照は当然起きない
N88-BASICの文字列はキャラクターの集まりであって他の文字列を指し示したりできないから、
相当の無能か悪意を伴って設計しない限り、文字列メモリのガベージコレクションで
循環参照は起こしようが無い(やるべきことは素のmalloc/freeに他ならない
0497デフォルトの名無しさん
垢版 |
2019/12/02(月) 23:29:11.52ID:VdJ0qliF
>>496
>>487で自分で書いているように配列がガーベジコレクションの対象になっているなら、循環参照は起こり得るんでないの?
0499デフォルトの名無しさん
垢版 |
2019/12/03(火) 04:41:05.52ID:LCf1R81a
まだやってたのか
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
うんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんちうんち
0500デフォルトの名無しさん
垢版 |
2019/12/03(火) 06:45:35.36ID:Ocr+v9UU
C++20あたりになるともうついていけそうにないな。
0501デフォルトの名無しさん
垢版 |
2019/12/03(火) 07:20:16.39ID:k7viogN8
conceptの仕上がり次第だろうな
Cのrestrictもそうであるように
うるさすぎると嫌気がさすやつが続出する
0502デフォルトの名無しさん
垢版 |
2019/12/03(火) 14:10:18.28ID:LOAssVxZ
実際にコードを書いてないやつほど仕様を知っててアホみたいなこだわりを見せる
ってことが常態化してる。
そろそろロクでもない結末を迎える。
0505デフォルトの名無しさん
垢版 |
2019/12/03(火) 15:33:28.77ID:+wDBcAl/
コンパイラやパーサーを作っているか、本を書こうとしている人だとすれば
隅々まで仕様を知る必要があるから、単なる自己満足の言語ヲタクとは
限らない。
0506デフォルトの名無しさん
垢版 |
2019/12/03(火) 15:40:53.19ID:LOAssVxZ
コンパイラやパーサを作ってる人よりも
本やブログを書くだけの馬鹿のが変な仕様にこだわってるのが問題。
後者は単なる自己満足の言語ヲタクと変わらん。
端的にカスでいなくなった方がいい存在と思う。
0507デフォルトの名無しさん
垢版 |
2019/12/03(火) 15:46:11.44ID:+wDBcAl/
>>506
自慢するために言語ヲタクになっている人は困るけど、本やブログを書く人は
貴重なので、情報収集のため5chでもなんでも使ってもいいと思うんだよ。
0508デフォルトの名無しさん
垢版 |
2019/12/03(火) 16:08:25.07ID:fg+LqIKK
現場でガリガリ書いてる奴らが本を書かないのが悪いんだろ
えっ、ブラック労働環境で疲弊してて書く余裕がないって?w
0510デフォルトの名無しさん
垢版 |
2019/12/03(火) 16:52:53.84ID:lE3mHjqg
>>508
解説本みたいなのは読まんな

規格書、データシート、仕様書、リファレンスマニュアル
こんなのは5chを参考にするはずがない
0512デフォルトの名無しさん
垢版 |
2019/12/03(火) 17:42:58.95ID:PvjGA/Sr
>>508
現場でガリガリって、コンパイラ開発してるとこのか?
そうでなければ普通言語の仕様なんか気にしてねーんだよ
むしろ仕様というか規格に詳しくないと使えない言語とか実用性無いわ
0513デフォルトの名無しさん
垢版 |
2019/12/03(火) 17:45:16.73ID:PvjGA/Sr
>>508
あとお前が知らんだけで、各分野の経験豊富な人がいくらでもその分野のコードを書くための本出してる
言語オタクには気付かんだろうけど
0517デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:21:46.86ID:+wDBcAl/
Stroustrap の本とか高いし、cpprefemceは分かりにくいし、誰かに
聞いてみたくなる気持ちは分かるがな。
0519デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:22:10.56ID:k7viogN8
けっ 言語についていけねえうえに
ろくな業績も出せてねえ真性ゴミクズが
書いたコードの量が多いんだと
精一杯のブラフで自我を保とうと必死こく
究極にくだらねえ茶番だろうが
0521デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:26:01.05ID:cEtr/lck
禿4はわかりやすかったけど、もう少し突っ込んだ話が読みたかったな。
0522デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:26:43.98ID:cEtr/lck
禿4はキンドルのセールに出ることあるよ。
0523デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:43:50.04ID:LOAssVxZ
禿4は量が少ないわけではないがc++を今からやるとしたら最低限ああなるだろ。
あれ以下に減らすのは実際無理。
0524デフォルトの名無しさん
垢版 |
2019/12/03(火) 19:55:41.70ID:PvjGA/Sr
>>518
そういう意味で言ったんじゃないんだが

>>519
>けっ 言語についていけねえうえに
>ろくな業績も出せてねえ
こういう前提はどっから来てんのかね
>>502,506 ,512みたいなことを言われるとそういう過剰反応するやつよく見かけるけど
>精一杯のブラフで自我を保とうと必死こく
>究極にくだらねえ茶番だろうが
鏡見た方がいいよ
0525デフォルトの名無しさん
垢版 |
2019/12/03(火) 21:01:44.02ID:z2MNOJTT
>>524
違うんなら証拠出してみろよ
言ってることが薄っぺらくてゴミクズにしか見えねえが
そういう俺にお見それしましたと言わしめる内容がおまえにあるか?

身バレするようなことでなくて結構だ
話している内容に深みを感じるかどうかだ
もう一度言う、おまえの言葉にはそれがまるでない
0526デフォルトの名無しさん
垢版 |
2019/12/03(火) 21:24:21.32ID:qY14OTyg
>>524
> そういう意味で言ったんじゃないんだが
意味わからん
本を出してるって言うなら具体的に挙げられるよね?
0529デフォルトの名無しさん
垢版 |
2019/12/03(火) 21:58:21.97ID:c+vMaKjo
>>525
お前も感情的に攻撃的に相手を罵ってるだけで、中身空っぽに見えるぞ。
お前の自己評価はもっと高いのかもしれないけど端から見たらただのバカだよ。
0533デフォルトの名無しさん
垢版 |
2019/12/03(火) 23:39:54.64ID:l6CFXVtO
お前らがC++高等テクニックww持ってるのは分かったから
まずまともな設計上げてこいやww
0536デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:18:20.24ID:MnUOTj8y
>>535
多分、C++の仕様が異常なほど膨れ上がってること、JavaScriptやWebGL、
AjaxやC#なども勉強しなくてはならない事が多くなったことなどもあって、
プログラムを沢山しながら仕様にも詳しい人は壊滅状態であることは想像に難くない。
0537デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:23:07.75ID:MnUOTj8y
>>536
というか、普通にプログラムしていても、HTML、CSS、HTTP などの仕様はもちろん
のこと、Androidやるなら、Java、Kotlin、NDK、iOSやるならSwift、
それに加えて、C#なら、WinFoms、WPFなどもあり、さらに、WSL、
PowerShellにbashやApacheの設定方法、ライセンス各種の勉強などなど、
やることが多くなってきている。本当は、React、Blazor、Vue.js、node.js
Electron、flutter、wxWidget、Qt、GTK。別に全部やる必要はないが、
予備知識として知ってないと技術資料も理解しにくいことが多くなってきた。
0538デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:25:21.34ID:FhHmXOPx
自分の得意分野以外は浅く予習しておいて使うときになって覚えて使わなくなったら忘れてる
0539デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:26:04.91ID:MnUOTj8y
>>537
Python、Rust、Lua、curl、ant、gradle、git、github、wget なども知ってない
と話が理解できないことも多くなっている。
0540デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:31:31.51ID:gHx24DkE
今時コードだけでプログラミングするもんでもあるまい
C++使いならフロントはばっさり切り捨ててAWSとGCPにスキルを振ったほうが一貫性があり無駄の少ないスキルセットになる
0541デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:36:36.01ID:4dvDh/Ut
std::cout での出力フォーマット指定に関して教えてください。

cout.flag( ios::uppercase | ios::hex ) やら cout << setfill('0') とか
cout << scientific << setprecision(10) とかとか
大半の指定が 1回 数値 を出力した後も その状態が保持されたままなのに
cout << setw(24) による出力幅指定は その都度指定しないと忘れてしまう挙動になっています。

その都度指定する必要は他にもあるのか。それと、
http://www.cplusplus.com/reference/iomanip/setw/
みたいな仕様を見て、どう読み取ればそれが正しい挙動であると分かるのか教えてほしいです。
ある個人ブログには setfill も毎回出力する度に指定する必要があるのだと書かれていましたが、
自分の環境では setfill は状態が保持されました。
0542デフォルトの名無しさん
垢版 |
2019/12/04(水) 01:41:33.70ID:9acC9vOn
フロントエンドは本当に時間の無駄
ましてC++プログラマならほとんど領域が被らないから単なる二足のわらじ状態で非効率なだけ
0543デフォルトの名無しさん
垢版 |
2019/12/04(水) 04:32:29.80ID:mZNCV5xz
>>529
読解力が無いのか>>508と同じく言語オタクだから気づかないのかわからんが
>>508
>>512-513読み直してくれる?
C++の言語仕様を詳しく解説する本を、コンパイラ”以外の開発に携わってる”人間が書いてくれると
思ってる方がおかしいんだよ
>>508の目には純粋にC++関連の本しか映ってないんだろう
C++を前提としてるがC++そのものでなくその分野の専門的な知識を教えてる技術書がどれだけあると思ってんだ
0544デフォルトの名無しさん
垢版 |
2019/12/04(水) 04:32:49.61ID:mZNCV5xz
>>525
>えっ、ブラック労働環境で疲弊してて書く余裕がないって?w
こんな腐りきった発言する思い上がったゴミアマチュアに教えてやることなど何もない
お前が使ってるその箱で動いてるソフトは誰が書いてくれてると思ってんだ
0545543
垢版 |
2019/12/04(水) 06:39:12.18ID:mZNCV5xz
安価ミス
X >>529
>>526
0548デフォルトの名無しさん
垢版 |
2019/12/04(水) 07:54:48.53ID:Jd4YzzOQ
>>545
各分野にコンパイラ開発は入らんのか?
まあお前の好きな分野でいいから具体的な本の名前挙げてくれ
0549デフォルトの名無しさん
垢版 |
2019/12/04(水) 08:05:44.23ID:mZNCV5xz
>>548
挙げたらどうなんの?お前には興味ない内容だと思うけど
「ド素人が言ってんだろ」と思ってるんだろうけど、お前の誤解を晴らすためになんで自分の分野晒さなきゃいけないの?
本の名前挙げたら謝るの?
0550デフォルトの名無しさん
垢版 |
2019/12/04(水) 08:06:15.64ID:mZNCV5xz
>>546
実際そうだと思うよ
>>512にも書いたけど、仕事でやってる人もフリーソフト開発者も
規格読んだことある人なんか皆無だと思うよ
他に勉強しなきゃいけないこと山ほどあるし、仕様(新しいのも含め)は必要なときにググって確認するだけ(>>538も言ってるけど)、むしろそうであるべき

それを「言語についていけない」なんて貶せるやつの神経がわからん
>>519とか、ソフト開発もメタプログラミングも出来ないレベルのド素人だろ?
何調子乗ってんの?自分はついていけてんの?w

開発力も無いし言語を活かせてもないのに、実際にC++を実用してる人を貶すとか
頭おかしい真似してるから言語オタクって言われるんだよ
(C++専門のライターも最近そういう傾向あるけど)

>>547
それはそれでどうかと思うけど
0551デフォルトの名無しさん
垢版 |
2019/12/04(水) 08:07:22.17ID:uB21TJa6
>>541 直接的な回答でない上に長々しい文章で気が引けるけど…。

『プログラミング言語C++』第4版の38章「入出力ストリーム」で
「width(n)の呼出しは、その直後に行われる<<による出力だけに影響を与える」
と書いてあるね(p. 1094)。
setw() は「次の出力のフィールド幅をn文字とする」(p. 1096 の下の表)
表の説明で“次の出力の”と限定されてるのはsetw()だけ。

で、一般的に書式指定やマニピュレータのうち、
どれが「一度指定したら別の指定をするまで有効」で、
どれが「指定された次の出力だけ有効、その後デフォルト状態に戻る」なのか、
N3337 の 27.5.3.2 周辺を見ても分からなかった。
基本的には ttp://www.cplusplus.com/reference/iomanip/setw/ よりも
少ない記述内容だし、「この指定は直後の一回の出力に限り有効」みたいな
補足の説明も見当たらない。


ISOやJISの規格に詳しい人が「素人め、ここに載ってるんだよ」と
ズバリ指摘してくれるのを期待して、調べた限りを投稿してみた。
0552デフォルトの名無しさん
垢版 |
2019/12/04(水) 08:21:05.72ID:Jd4YzzOQ
>>549
他の分野の人にどういう説明してるのかを知りたかっただけなんだけどね
まあ>>525が言うように薄っぺらな知ったかが吠えてるだけってわかったからもういいやw
0553デフォルトの名無しさん
垢版 |
2019/12/04(水) 08:24:57.77ID:uB21TJa6
>>541
setfill() じゃなくて setw() の話だけど、古い本に
「setw()の幅指定は、永続的に有効な実装と、直後の出力1回だけ有効な実装との
両方が存在するので、移植性を考えれば毎回指定する方が安全」とか載ってた。
もしかすると過去には「setfill() は1回だけ有効」な実装が存在したのかも知れん。

その後、規格で挙動が厳密に定められたのか、
今でも実装によって動作が違っても構わない(規格に明記されていない)のか、
肝心なその点は分からん。
0554549
垢版 |
2019/12/04(水) 08:41:52.15ID:0MJ4ry5i
>>552
言ってる意味がわからんが
煽れば何か教えてもらえると思ってるアホだろ
今までお前に何度も言ったと思うが、邪魔だから出てってくれ
0555デフォルトの名無しさん
垢版 |
2019/12/04(水) 08:46:18.46ID:Z3kanSY4
>>550
他に勉強しなきゃいけないことって具体的に何だ?
インターフェースだの通信規約だの法務だのを
規格を避けて勉強なんかできるのか?
そういうおまえ自身は本当に勉強してるのか?
0557デフォルトの名無しさん
垢版 |
2019/12/04(水) 09:05:20.91ID:Z3kanSY4
>>556
おまえこそどーに目ぇつけとんのやあんだら
C++以外の規格なら読むんだって話じゃねえだろうがよ
0558デフォルトの名無しさん
垢版 |
2019/12/04(水) 09:08:12.84ID:d8r3fnrq
>>557
>C++以外の規格なら読む
誰がそんなこと言った?
他に勉強しなきゃいけないこと、に含まれてるだろうが
自分の勘違い棚に上げるなよ
0559デフォルトの名無しさん
垢版 |
2019/12/04(水) 09:15:53.35ID:Z3kanSY4
>>557
550は規格を読んだことがあるやつは皆無と言ったんだよ
それがC++だけにせよ規格全てにせよ
おかしい主張であることに変わりはない

自分の発言を読み返してみな
俺がわざわざ頓珍漢とか言ってやることもない
0561554=556=558
垢版 |
2019/12/04(水) 09:32:28.38ID:mZNCV5xz
お前はC++の標準ライブラリ等の仕様の確認に毎回規格書読んでんの?
0562デフォルトの名無しさん
垢版 |
2019/12/04(水) 09:53:35.71ID:4dvDh/Ut
>>551, >>553 ありがとうございます。
今「C++ポケットリファレンス」を見たら

ほかのマニピュレータと異なり、std:setw()は例外的に効果が持続しません。
一度std::setw を指定した出力が行われると効果は解除されます
(std::setw(0)を呼び出した状態になります)。

とありました (p.250)。
それと...
$ man std::setw

The width property of the stream will be reset to zero (meaning "unspecified") if 〜

ちゃんと書いてますね。何より先に man を見るべきでした。
とはいえ setw は "例外的" なのだとちゃんと教えてくれる本は助かるなあと思いました。
0564デフォルトの名無しさん
垢版 |
2019/12/04(水) 10:52:51.16ID:vhuKISsK
規格確認部とかあるんじゃないの。
知らんけど。
0567デフォルトの名無しさん
垢版 |
2019/12/04(水) 11:19:22.93ID:sb3P/SSe
1.禿でも判るC++入門
2.判ると禿げるC++入門
3.禿専用C++
0569デフォルトの名無しさん
垢版 |
2019/12/04(水) 12:29:09.42ID:Jd4YzzOQ
>>561
必要なら読むだろ
流石に毎回じゃないけど
そもそもお前は規格も読まないでテキトーにコード書いてるのか?
0570デフォルトの名無しさん
垢版 |
2019/12/04(水) 12:36:02.75ID:mZNCV5xz
>>569
>流石に毎回じゃないけど
なら黙ってろ

規格の原文読まない=テキトーにコード書く、なのかお前の中では
思い上がりすぎだろ
0572デフォルトの名無しさん
垢版 |
2019/12/04(水) 12:53:29.05ID:sb3P/SSe
実用コード書くより机上の空仕様書描くのが好きな人なんやろな
0573デフォルトの名無しさん
垢版 |
2019/12/04(水) 13:03:10.48ID:Jd4YzzOQ
>>570
> 規格読んだことある人なんか皆無だと思うよ
とか言うバカに言われてもなぁ
知識がペラッペラすぎるw
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況