X

C++相談室 part162

レス数が1000を超えています。これ以上書き込みはできません。
1sage (ワッチョイ fbf0-ofdD)
垢版 |
2022/10/31(月) 14:29:35.57ID:J5sgTSch0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part161
https://mevius.5ch.net/test/read.cgi/tech/1653135809/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/12/27(火) 00:58:30.57ID:9ztV+U0x0
>>911
前方宣言て何? JIS X3014の規格票を検索してもヒットしないんだが
2022/12/27(火) 00:59:25.89ID:QO3hLMTW0
forward declarationじゃないかな? ない?
2022/12/27(火) 01:03:39.45ID:9ztV+U0x0
さあ知らんね
おまえの曖昧さを俺が処理してやる義理はない
2022/12/27(火) 01:06:05.88ID:9ztV+U0x0
技術板で煽りネタが英語力とかくだらんな
英語圏在住のバカと同類だってアピールしたら格好いいんかよw
2022/12/27(火) 01:08:38.87ID:QO3hLMTW0
>>915
規格が英語で書かれてるんだから仕方ないじゃないか

>>914
威勢が良い割には逃亡か
根性がねーな
2022/12/27(火) 01:12:56.49ID:9ztV+U0x0
煽っても無駄だよ
義理のないことの特別サービスをさせたいようだが
世の中そう甘くはない

暇人と違って明日も朝から仕事なんだよ
バイバイ
2022/12/27(火) 01:14:43.51ID:QO3hLMTW0
>>916
おまいさんは威勢よく俺を煽ってたけども
規格も読んでなかったということだ
根拠としたのは恐らく>>820の書き込みのみ
俺は純真なので痛く傷ついたんだよ
他人の言説を無批判に信じて自らは確かめることなく
人を攻撃することはやめてくれ
2022/12/27(火) 01:34:54.20ID:G9AKlNLO0
前方宣言が宣言でない可能性なんて考えたこともなかったが
たとえば単にポインタと書いてあるときにメンバ関数ポインタを含んでなかったりすることを
思い出せば変な用語になってる可能性は考慮にいれるという姿勢は必要かもしれない。

あらためて検討してみたところ、前方宣言という用語の直接的な定義はないが仕様中で
前方宣言 (forward declaration) と呼ばれているものは宣言に該当するし、
単に宣言の位置が前方である宣言のことを前方宣言と呼んでいると解しても良いと思う。
2022/12/27(火) 02:38:42.00ID:Kk7zAeAV0
未定義動作だから宣言禁止してるんじゃない
宣言禁止してるから未定義動作になったんだ
2022/12/27(火) 02:48:53.38ID:fnhKiHjQ0
>>892
>865の質問は>866,868で答えが出てて、その前の話に影響無いし・・・と読み進めると
>872で「前方宣言は規格で合法」とかいう当たり前に見える意味不明な話につづいており・・・

どうも>859以降の「合法」が↓のようなよくある解釈とは違うようであることに気付いた。
https://cpprefjp.github.io/implementation-compliance.html
> 合法 (legal)・違法 (illegal): これらの語はプログラムに対しても慣用されるが、具体的な意味は明確でない。 プログラムの正しさには複数の水準があるためである。 適格、またはすべての規則を満たす、または未定義の動作を含まないなどが考えられる。
明確な言葉で言い換えられるまで下手に考えても不毛そう。

「前方宣言は」というのも「ユーザー側コードに~な前方宣言を加えて利用していた場合にライブラリ更新があっても~」
とかいう意味になりそうだけど端折りすぎて意味不明になってる。

「鼻から悪魔」は未定義動作と同じ意味のつもりで使ってそうだけどコンパイルエラーやリンクエラーは除くようでもあり
これも未定義動作とは違う何か。

さっきキレちらかしてた人もこんな感じで我慢できなくなったんだろう。
明確な用語を使うように気を付けて主張を整理しないと、君とまともに会話してくれる人居なくなると思うよ。
2022/12/27(火) 07:37:18.96ID:GSvWJ+1+0
「天才のぼくちんの完璧なレスを理解できない無能なお前らが悪い!」って暴れ出すいつもの奴だからもう放っとけよ
2022/12/27(火) 07:46:03.70ID:nX/ozHbV0
事実と挙動だけ書けばいい
2022/12/27(火) 08:04:36.52ID:l/ni+ylad
ハッシュ小僧か
2022/12/27(火) 11:12:03.63ID:QO3hLMTW0
>>921
鼻から悪魔はコンパイルエラーやリンカーエラーは当然含まない
何人か知らないようだけどもひょっとして自演してるの?
2022/12/27(火) 11:18:29.54ID:QO3hLMTW0
>>921
したがって>>865の答えは出ていない
名前空間stdは>>820のdeclarationsに
前方宣言が入るとは限らないので
答えにはならない

それと俺は天才くんとは別人
横からちゃちゃ入れてる人だよ
2022/12/27(火) 11:39:33.69ID:2fUOYjFgd
はいはい、別人なんでちゅね~
ニヤニヤ
2022/12/27(火) 11:43:36.77ID:QO3hLMTW0
>>927
例えば>>654が俺だよ
2022/12/27(火) 11:44:56.74ID:2fUOYjFgd
それでそれで?
2022/12/27(火) 11:45:14.64ID:QO3hLMTW0
おんなじワッチョイ検索してね
2022/12/27(火) 11:45:28.77ID:fnhKiHjQ0
「いつもの奴」が一人ということも無いからな。悲しいことに。

コテハン付けてくれない?
2022/12/27(火) 11:46:04.33ID:QO3hLMTW0
天才くんほどの実力はないです
2022/12/27(火) 11:46:30.13ID:QO3hLMTW0
>>931
どうやってつけるの?
2022/12/27(火) 11:58:22.17ID:fnhKiHjQ0
>>933 https://www.google.com/search?q=5ch+%E3%83%88%E3%83%AA%E3%83%83%E3%83%97
2022/12/27(火) 12:02:33.04ID:QO3hLMTW0
>>934
Thanks!
2022/12/27(火) 12:03:58.07ID:ifNnQS7gM
>>837
本題と関係ないけどこれって CTAD 関連含めて挙動完全に大丈夫なんか?少なくとも C++17 ではダメだが
2022/12/27(火) 12:04:16.27ID:QO3hLMTW0
俺は天才なんて呼ばれたことはないが
天才と呼ばれた人だこのスレで呼ばれたw
2022/12/27(火) 12:04:54.10ID:QO3hLMTW0
天才と呼ばれた人だ<と>このスレで呼ばれたw
2022/12/27(火) 12:12:33.94ID:fnhKiHjQ0
ありがとうございます。助かります。
2022/12/27(火) 12:13:50.33ID:QO3hLMTW0
いえこちらこそ
2022/12/27(火) 12:17:08.49ID:XYKyOOkrd
>>865の結論て>>866で終わってると思うんだけど
前方宣言がdeclarationじゃないとか曲解だろ
たまたま先に同じ型で宣言するという技法がテクニックとして成立するだけ
2022/12/27(火) 12:29:08.28ID:QO3hLMTW0
前方宣言が確かに>>820の`declarations'に含まれる根拠があれば示して下さい
前方宣言で鼻から悪魔が出ることは
懸案事項の名前空間stdの場合は保留として他にないと思う
>>837はコンパイルエラーで弾かれるので鼻から悪魔は出ない
あれば教えて下さい
2022/12/27(火) 12:55:07.85ID:XYKyOOkrd
まずあなたがどっちもdeclarationなのにただのテクニックである前方宣言が含まれない理由を示すべきだろう
2022/12/27(火) 13:01:14.48ID:QO3hLMTW0
>>943
俺は入るとも入らないとも根拠がないので保留だよ
どちらかの根拠があれば解決だね
2022/12/27(火) 13:09:43.62ID:WVVp8u06d
>>925
コンパイルエラーやリンクエラーも未定義動作で起こりうる事の一つなんだけど
どういう理屈で鼻から悪魔から除外されるの?
2022/12/27(火) 13:10:56.66ID:8Y7pY2Mbd
それは違うだろ
2022/12/27(火) 13:18:26.61ID:WVVp8u06d
違わないよ
何でも起こりうるのが未定義動作だ
お前はコンパイルエラーの方が鼻悪魔出現よりも非現実度が高いと思ってるの?
2022/12/27(火) 13:19:13.33ID:QO3hLMTW0
>>945
コンパイルエラーやリンクエラー -> 動作しない
未定義動作 -> 動作する
2022/12/27(火) 13:22:50.11ID:WVVp8u06d
現実的な話としては、未定義動作静的解析で見つけ出してillーformed扱いしてコンパイル拒否するコンパイラがあったとして、それは規格違反ではない
当たり前だろ、だって未定義なんだから
2022/12/27(火) 13:23:40.85ID:XYKyOOkrd
>>944
まず前方宣言がdeclarationという仕様のそとにある可能性を示してくれないと
前方宣言ってdeclarationの言語仕様外の動作してるの?
2022/12/27(火) 13:24:42.77ID:WVVp8u06d
>>948
未定義動作の「動作」(undefined behaviourのbehaviour)は実行時動作だけ意味してるわけじゃない
2022/12/27(火) 13:27:30.62ID:QO3hLMTW0
>>950
俺も昨日から規格をあたってるけど見つからんのだよ
Cの規格を見れば良いのかな?
953天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG)
垢版 |
2022/12/27(火) 13:35:30.55ID:QO3hLMTW0
>>951
初めて聞いたよ
2022/12/27(火) 13:35:53.60ID:8Y7pY2Mbd
>>951
通らない部分は未定義動作のまま残して良いわけだけど
コンパイルが通らないとなると問題だ
2022/12/27(火) 13:43:49.52ID:WVVp8u06d
>>954
何が問題なの?何だろうと問題にしないのが未定義という事だぞ
それ以上言うなら「未定義といえどもコンパイルとリンクは必ず通らなければならない」って規格書に書いてある場所提示してね
2022/12/27(火) 13:44:55.47ID:QO3hLMTW0
ソースがWikipediaで申し訳ないが
未定義動作とはコンパイルやリンクを通るものを言う
https://ja.wikipedia.org/wiki/%E6%9C%AA%E5%AE%9A%E7%BE%A9%E5%8B%95%E4%BD%9C

名前空間stdにビルドできるコードを追加しても
動作が意図通りになるか分からんよ
動作は未定義だよってのが>>820の指摘だよ
2022/12/27(火) 13:46:12.79ID:8Y7pY2Mbd
未定義じゃなくても「必ず通らなきゃならない」なんて記述はないと思うけど
2022/12/27(火) 13:56:51.44ID:fnhKiHjQ0
>>956 ちがうんだよなぁ。
> CやC++の場合、コンパイラはコンパイル時に未定義動作のチェックを行うことができる

よりC++規格に即した>921のリンク先も見てね。
2022/12/27(火) 13:57:29.46ID:XYKyOOkrd
>>952
普通にdeclaration and definitionの項でも読んでれば良いんじゃないの

前方宣言特有の動作があるのにここにないなら別である可能性も考えて良い
2022/12/27(火) 13:59:01.95ID:WVVp8u06d
>>956
ゴミ持って来んな
しかもそのゴミにもコンパイル前にチェックしてもいい(しなくてもいい)って書いてあるやんけ
>>957
コンパイル出来なかったら問題だとかいう寝言言い出したのはお前の方だろうが
2022/12/27(火) 13:59:36.79ID:fnhKiHjQ0
>>957 あるよ。 https://timsong-cpp.github.io/cppwp/n4861/intro.compliance#2.1
2022/12/27(火) 14:01:35.95ID:G9AKlNLO0
>>956
仕様上の定義では未定義の挙動は翻訳中にも生じる。

> https://timsong-cpp.github.io/cppwp/n4861/defns.undefined
> during translation or program execution
2022/12/27(火) 14:23:44.32ID:QO3hLMTW0
>>962
ホントだねw

Wikipediaにあるようにコンパイルもリンクも通って
実行はできるときに使うことが多いと思ってたけども
2022/12/27(火) 14:42:36.98ID:kLAEuBfs0
>>956
未定義動作はc++標準の規定外というだけで、エラーになるかどうかは全く関係無い。エラーにしてもエラーにしなくてもc++標準には違反しない。

www.open-std.org/jtc1/sc22/wg21/docs/standards
N4849.
3.28 未定義の動作
この文書が要求していない動作
[項目への注記 1: 未定義の動作は,この文書が動作の明示的な定義を省略したとき,又はプログラムが誤った構成又は誤ったデータを使用したときに予想されるかもしれない。
未定義動作は,この文書が動作の明示的な定義を省略した場合又はプログラムが誤った構成若しくは誤ったデータを使用した場合に想定される。許容される未定義の動作
予測できない結果をもたらす状況の完全な無視から、翻訳中またはプログラム実行中に特徴的な文書化された方法で動作することまで、許容される未定義動作の範囲があります。
環境に応じて文書化された方法でプログラムの実行を行う(診断メッセージの発行の有無は問わない)。
また、翻訳や実行を終了する(診断メッセージを発行する)こともあります。)
多くの誤ったプログラム構成は、未定義の動作を発生させるものではなく、診断が必要なものである。
定数式の評価は、本書第 4 条から第 15 条で明示的に未定義と指定された動作にはならない。
から第15項(7.7)までに明示的に未定義と指定された動作を示すことはない。- エンディングノート]
2022/12/27(火) 14:53:01.92ID:QO3hLMTW0
>>964
有難う
用語は注意して使わないとね

>>865の質問を正確にすると
前方宣言を自分のソースに追加すると
ビルドはできるが動作が未定義となる設計は本当にあるの?
(もちろんstdは懸案事項なので保留するとしてそれ以外でね)
2022/12/27(火) 15:32:40.76ID:XYKyOOkrd
stdだと未定義とするって仕様なのにstd保留してどうするんだ
未定義にならずにコンパイラが仕様通りの解釈して動作するだけだろ
2022/12/27(火) 15:37:36.05ID:G9AKlNLO0
言語的には仕様通りの解釈をするがそれがそのライブラリにとって想定外であるような、
つまり本来の動作と異なる結果を引きおこすような形での前方宣言がありうるかという意味だろ。
2022/12/27(火) 15:58:07.39ID:G9AKlNLO0
それっぽい例を作れた!
https://wandbox.org/permlink/6utNhLox1WhOaBV8

とはいっても適切な前方宣言になっていないから起こっていることではあるので、
「ヘッダを見て間違いなく前方宣言としては適切になるように書いたけど挙動には影響ある」という例にはなってない。
2022/12/27(火) 16:01:30.79ID:QO3hLMTW0
>>966
話が通じんなw
その仕様を俺は疑っているから保留
正確に言うとdeclarationsに前方宣言は含まないかもしれんと思っている
2022/12/27(火) 19:17:57.55ID:7IKxcRBS0
じゃ小学生の自由研究の時期が終わったら呼んでください
2022/12/27(火) 20:34:13.81ID:AOBUz6/T0
ボクちゃんの痛い自由研究
「stdネームスペースに落書き」
972デフォルトの名無しさん (ワッチョイ 8d01-s0Sd)
垢版 |
2022/12/27(火) 21:38:26.75ID:Q5qxYeje0
じゃあ、ISOで未定義の時は、コンパイラの仕様を調べて使えば良いのでは?
2022/12/27(火) 21:40:51.41ID:FdHzEXmap
移植とかでコンパイラ変わったら意図しない実行するとか平気ならな
2022/12/27(火) 22:06:21.35ID:QO3hLMTW0
>>968
確かに前方宣言で挙動変わるね
しかしこのトリッキーな例をもって
前方宣言を自分の管理外の名前空間(std以外でも)に
追加するのが危険と言って良いものかは正直悩む
975天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG)
垢版 |
2022/12/27(火) 22:15:15.29ID:QO3hLMTW0
>>972,973
俺は絶対にstdはいじらないね
976デフォルトの名無しさん (ワッチョイ 8d01-s0Sd)
垢版 |
2022/12/27(火) 22:17:12.44ID:Q5qxYeje0
じゃあ俺もそうする。
977デフォルトの名無しさん (ワッチョイ 97ad-dxp0)
垢版 |
2022/12/27(火) 22:18:07.71ID:xkGd3ITG0
自作クラスでendlなどのマニピュレータをオーバーライドするにはstd名前空間に入れるしかないじゃない?
2022/12/27(火) 22:19:58.45ID:Kk7zAeAV0
つうかstdが「標準である」と言う設計上前方宣言を禁止したから仕様上未定義動作となっただけの話で
危険だから前方宣言すべきじゃないって話じゃないと思うよ
結果的にコンパイラ側がそれを逆手にとって最適化とか推し進めた形になったとしてもね

前方宣言許さない仕様のライブラリって言うのは危険だからじゃなく
勝手に拡張すること許さないと決めたライブラリであるというだけの話で
979デフォルトの名無しさん (ワッチョイ 8d01-s0Sd)
垢版 |
2022/12/27(火) 22:24:30.48ID:Q5qxYeje0
>>977
ストリームはホント腹立つよな。
ぶっ飛ばしたくなってきた。
30年くらい怒りが収まらん。
2022/12/27(火) 22:55:56.41ID:QO3hLMTW0
随分と古参なんですね
2022/12/27(火) 23:15:16.94ID:AOBUz6/T0
>>977
バカが設計したからなアレ
2022/12/27(火) 23:26:06.87ID:VvvSD8wK0
ostream と istream の別の建てつけなので、ファイルポインタもこの二つのクラスで別なんだろうと思っていたら、土壇場で、実はファイルポインタは共有していましたぁ
とか勘弁してほしいと痛切におもいましたねえ
2022/12/27(火) 23:28:14.07ID:2qRZfHzrM
>>968
これ面白いな
2022/12/28(水) 00:50:07.21ID:YU/L8pIp0
無名namespaceで囲ってるとこが変態
2022/12/28(水) 08:09:55.49ID:jVoOqLVQM
>>978
そういうのは「改造c++」とでも言うべきもので、個々の具体的な実装を挙げて話すべき話題。
具体的な実装の無い「改造c++」なんて「オレ言語」でしかないから、話題にしても相手にするヤツは居ないよ。興味無い。
986デフォルトの名無しさん (アウアウウー Sa1f-SHOq)
垢版 |
2022/12/28(水) 16:02:37.97ID:wx2BQ76Ga
>>981
まさかプロトタイプが30年後も使い続けてるとは思わなかったんだよ
2022/12/29(木) 22:47:04.14ID:J2+EgPHK0
>>974
「わからない」という状態が最大のリスクだ。 精査して事情を把握してからやる分にはいいよ。
だけど少なくとも私はいちいちライブラリの細かいことなんて調べたくないし、
細部の事情まで読み解ける自信はないから製作者の意図 (仕様として明示されている範囲) を超える
ような使い方をあえてすることはないだろうという話。 要するに割に合わない。
しなくていいことはせずに済ませられたらそのほうがいいだろ。

割に合うと考えている人がいたとしたら
「んなわけねーだろ。 お前が調べるのに労力をかけてないだけ」
と思うから安易にやっちゃうやつはちょっとナメてるように感じる。

そりゃあ他に打てる手がなければ割に合わなくてもやらざるを得ないことだってあるだろうけどさぁ。
2022/12/30(金) 07:37:06.73ID:zn+Ud9N00
本当に余計なお世話だけど、はちみつさんのような実力がある人は
むしろライブラリやコンパイラのソースを読んだ方がいいよ
2022/12/30(金) 10:24:58.07ID:O3GOnLRpa
>>988
おまえは仕事した方がいい
2022/12/30(金) 11:11:02.33ID:l10vdbnHr
火の玉ストレートやめたれ
2022/12/30(金) 13:31:38.92ID:p0azBXIn0
std名前空間への勝手要素追加は未定義動作と書かれているのに
std名前空間内のクラスへのメンバ追加についてはなんで言及が無いのやろうな……
名前空間もクラスもPGの責任分担範囲の区切りみたいなもんで、
第三者に後から勝手に弄られたら設計したPGが困るのは同じだと思うのだけど、
2022/12/30(金) 13:33:22.64ID:DPUEZfMS0
後々の事考えて設計出来ない奴はPGに向いてない
2022/12/30(金) 14:02:10.34ID:p0azBXIn0
自分はできるPGですと自己申告する>>992……
その自身がどこから来るのかは誰も知らない……
2022/12/30(金) 14:11:57.62ID:DPUEZfMS0
そんなこと思ってない
いままで見てきた汚いソース書いている連中の総意点を述べているだけのこと
2022/12/30(金) 14:28:22.93ID:p0azBXIn0
つまりstd名前空間のソースは汚いから
予防のためにstd名前空間への勝手要素追加は未定義動作とするのがstdを設計したPGの立場では当然だと、
2022/12/30(金) 14:33:46.74ID:DPUEZfMS0
バカなの?
なんのための名前空間なのかよく考えろよ
設計を区分するためだろ
そこにお前みたいなワケワケな奴が落書きしたらめちゃくちゃになるだろ
2022/12/30(金) 15:06:36.37ID:uGEPy//I0
stackoverflow 辺りで
皆さんの御意見を聞いて来いよw
998デフォルトの名無しさん (ワッチョイ 97ad-dxp0)
垢版 |
2022/12/30(金) 17:36:57.79ID:oiKCiiXa0
後のこと考えて設計するよりも先に手が動くような人じゃないとプログラミングは上達しないよ
2022/12/30(金) 17:55:02.39ID:12nE7t5Ga
>>998
もうお前の尻拭いするの嫌だよ
たのむから手動かす前に3分くらい考えてくれ
2022/12/30(金) 18:20:10.37ID:2kXrfTwwd
昔はさ、ウォーターフォールといって
完璧な設計ができるまでコードに手を出すな
設計が決まったら黙ってそれに従うコードを書け
なんてのがあったけど
前例のないものの完璧な設計なんてほいっとできるのか
現場からのフィードバックを無視なんてできるのか
って反省から今時の方法論ができているわけで

ただし、それを悪用するだけの寄生虫を擁護はしない
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 60日 3時間 50分 35秒
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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