■ このスレッドは過去ログ倉庫に格納されています
C++相談室 part162
- 1 :sage :2022/10/31(月) 14:29:35.57 ID:J5sgTSch0.net
- !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
- 952 :天災 :2022/12/27(火) 13:27:30.62 ID:QO3hLMTW0.net
- >>950
俺も昨日から規格をあたってるけど見つからんのだよ
Cの規格を見れば良いのかな?
- 953 :天災 :2022/12/27(火) 13:35:30.55 ID:QO3hLMTW0.net
- >>951
初めて聞いたよ
- 954 :デフォルトの名無しさん :2022/12/27(火) 13:35:53.60 ID:8Y7pY2Mbd.net
- >>951
通らない部分は未定義動作のまま残して良いわけだけど
コンパイルが通らないとなると問題だ
- 955 :デフォルトの名無しさん :2022/12/27(火) 13:43:49.52 ID:WVVp8u06d.net
- >>954
何が問題なの?何だろうと問題にしないのが未定義という事だぞ
それ以上言うなら「未定義といえどもコンパイルとリンクは必ず通らなければならない」って規格書に書いてある場所提示してね
- 956 :天災 :2022/12/27(火) 13:44:55.47 ID:QO3hLMTW0.net
- ソースがWikipediaで申し訳ないが
未定義動作とはコンパイルやリンクを通るものを言う
https://ja.wikipedia.org/wiki/%E6%9C%AA%E5%AE%9A%E7%BE%A9%E5%8B%95%E4%BD%9C
名前空間stdにビルドできるコードを追加しても
動作が意図通りになるか分からんよ
動作は未定義だよってのが>>820の指摘だよ
- 957 :デフォルトの名無しさん :2022/12/27(火) 13:46:12.79 ID:8Y7pY2Mbd.net
- 未定義じゃなくても「必ず通らなきゃならない」なんて記述はないと思うけど
- 958 :デフォルトの名無しさん :2022/12/27(火) 13:56:51.44 ID:fnhKiHjQ0.net
- >>956 ちがうんだよなぁ。
> CやC++の場合、コンパイラはコンパイル時に未定義動作のチェックを行うことができる
よりC++規格に即した>921のリンク先も見てね。
- 959 :デフォルトの名無しさん :2022/12/27(火) 13:57:29.46 ID:XYKyOOkrd.net
- >>952
普通にdeclaration and definitionの項でも読んでれば良いんじゃないの
前方宣言特有の動作があるのにここにないなら別である可能性も考えて良い
- 960 :デフォルトの名無しさん :2022/12/27(火) 13:59:01.95 ID:WVVp8u06d.net
- >>956
ゴミ持って来んな
しかもそのゴミにもコンパイル前にチェックしてもいい(しなくてもいい)って書いてあるやんけ
>>957
コンパイル出来なかったら問題だとかいう寝言言い出したのはお前の方だろうが
- 961 :デフォルトの名無しさん :2022/12/27(火) 13:59:36.79 ID:fnhKiHjQ0.net
- >>957 あるよ。 https://timsong-cpp.github.io/cppwp/n4861/intro.compliance#2.1
- 962 :はちみつ餃子 :2022/12/27(火) 14:01:35.95 ID:G9AKlNLO0.net
- >>956
仕様上の定義では未定義の挙動は翻訳中にも生じる。
> https://timsong-cpp.github.io/cppwp/n4861/defns.undefined
> during translation or program execution
- 963 :天災 :2022/12/27(火) 14:23:44.32 ID:QO3hLMTW0.net
- >>962
ホントだねw
Wikipediaにあるようにコンパイルもリンクも通って
実行はできるときに使うことが多いと思ってたけども
- 964 :デフォルトの名無しさん :2022/12/27(火) 14:42:36.98 ID:kLAEuBfs0.net
- >>956
未定義動作はc++標準の規定外というだけで、エラーになるかどうかは全く関係無い。エラーにしてもエラーにしなくてもc++標準には違反しない。
www.open-std.org/jtc1/sc22/wg21/docs/standards
N4849.
3.28 未定義の動作
この文書が要求していない動作
[項目への注記 1: 未定義の動作は,この文書が動作の明示的な定義を省略したとき,又はプログラムが誤った構成又は誤ったデータを使用したときに予想されるかもしれない。
未定義動作は,この文書が動作の明示的な定義を省略した場合又はプログラムが誤った構成若しくは誤ったデータを使用した場合に想定される。許容される未定義の動作
予測できない結果をもたらす状況の完全な無視から、翻訳中またはプログラム実行中に特徴的な文書化された方法で動作することまで、許容される未定義動作の範囲があります。
環境に応じて文書化された方法でプログラムの実行を行う(診断メッセージの発行の有無は問わない)。
また、翻訳や実行を終了する(診断メッセージを発行する)こともあります。)
多くの誤ったプログラム構成は、未定義の動作を発生させるものではなく、診断が必要なものである。
定数式の評価は、本書第 4 条から第 15 条で明示的に未定義と指定された動作にはならない。
から第15項(7.7)までに明示的に未定義と指定された動作を示すことはない。- エンディングノート]
- 965 :天災 :2022/12/27(火) 14:53:01.92 ID:QO3hLMTW0.net
- >>964
有難う
用語は注意して使わないとね
>>865の質問を正確にすると
前方宣言を自分のソースに追加すると
ビルドはできるが動作が未定義となる設計は本当にあるの?
(もちろんstdは懸案事項なので保留するとしてそれ以外でね)
- 966 :デフォルトの名無しさん :2022/12/27(火) 15:32:40.76 ID:XYKyOOkrd.net
- stdだと未定義とするって仕様なのにstd保留してどうするんだ
未定義にならずにコンパイラが仕様通りの解釈して動作するだけだろ
- 967 :はちみつ餃子 :2022/12/27(火) 15:37:36.05 ID:G9AKlNLO0.net
- 言語的には仕様通りの解釈をするがそれがそのライブラリにとって想定外であるような、
つまり本来の動作と異なる結果を引きおこすような形での前方宣言がありうるかという意味だろ。
- 968 :はちみつ餃子 :2022/12/27(火) 15:58:07.39 ID:G9AKlNLO0.net
- それっぽい例を作れた!
https://wandbox.org/permlink/6utNhLox1WhOaBV8
とはいっても適切な前方宣言になっていないから起こっていることではあるので、
「ヘッダを見て間違いなく前方宣言としては適切になるように書いたけど挙動には影響ある」という例にはなってない。
- 969 :天災 :2022/12/27(火) 16:01:30.79 ID:QO3hLMTW0.net
- >>966
話が通じんなw
その仕様を俺は疑っているから保留
正確に言うとdeclarationsに前方宣言は含まないかもしれんと思っている
- 970 :デフォルトの名無しさん (ワッチョイ 73f0-4Ar3):2022/12/27(火) 19:17:57.55 ID:7IKxcRBS0.net
- じゃ小学生の自由研究の時期が終わったら呼んでください
- 971 :デフォルトの名無しさん :2022/12/27(火) 20:34:13.81 ID:AOBUz6/T0.net
- ボクちゃんの痛い自由研究
「stdネームスペースに落書き」
- 972 :デフォルトの名無しさん :2022/12/27(火) 21:38:26.75 ID:Q5qxYeje0.net
- じゃあ、ISOで未定義の時は、コンパイラの仕様を調べて使えば良いのでは?
- 973 :デフォルトの名無しさん :2022/12/27(火) 21:40:51.41 ID:FdHzEXmap.net
- 移植とかでコンパイラ変わったら意図しない実行するとか平気ならな
- 974 :天災 :2022/12/27(火) 22:06:21.35 ID:QO3hLMTW0.net
- >>968
確かに前方宣言で挙動変わるね
しかしこのトリッキーな例をもって
前方宣言を自分の管理外の名前空間(std以外でも)に
追加するのが危険と言って良いものかは正直悩む
- 975 :天災 :2022/12/27(火) 22:15:15.29 ID:QO3hLMTW0.net
- >>972,973
俺は絶対にstdはいじらないね
- 976 :デフォルトの名無しさん :2022/12/27(火) 22:17:12.44 ID:Q5qxYeje0.net
- じゃあ俺もそうする。
- 977 :デフォルトの名無しさん :2022/12/27(火) 22:18:07.71 ID:xkGd3ITG0.net
- 自作クラスでendlなどのマニピュレータをオーバーライドするにはstd名前空間に入れるしかないじゃない?
- 978 :デフォルトの名無しさん :2022/12/27(火) 22:19:58.45 ID:Kk7zAeAV0.net
- つうかstdが「標準である」と言う設計上前方宣言を禁止したから仕様上未定義動作となっただけの話で
危険だから前方宣言すべきじゃないって話じゃないと思うよ
結果的にコンパイラ側がそれを逆手にとって最適化とか推し進めた形になったとしてもね
前方宣言許さない仕様のライブラリって言うのは危険だからじゃなく
勝手に拡張すること許さないと決めたライブラリであるというだけの話で
- 979 :デフォルトの名無しさん :2022/12/27(火) 22:24:30.48 ID:Q5qxYeje0.net
- >>977
ストリームはホント腹立つよな。
ぶっ飛ばしたくなってきた。
30年くらい怒りが収まらん。
- 980 :天災 :2022/12/27(火) 22:55:56.41 ID:QO3hLMTW0.net
- 随分と古参なんですね
- 981 :デフォルトの名無しさん (ワッチョイ 95da-Axul):2022/12/27(火) 23:15:16.94 ID:AOBUz6/T0.net
- >>977
バカが設計したからなアレ
- 982 :デフォルトの名無しさん (ワッチョイ 9fea-ij7E):2022/12/27(火) 23:26:06.87 ID:VvvSD8wK0.net
- ostream と istream の別の建てつけなので、ファイルポインタもこの二つのクラスで別なんだろうと思っていたら、土壇場で、実はファイルポインタは共有していましたぁ
とか勘弁してほしいと痛切におもいましたねえ
- 983 :デフォルトの名無しさん (ブーイモ MM21-5fcg):2022/12/27(火) 23:28:14.07 ID:2qRZfHzrM.net
- >>968
これ面白いな
- 984 :天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG):2022/12/28(水) 00:50:07.21 ID:YU/L8pIp0.net
- 無名namespaceで囲ってるとこが変態
- 985 :デフォルトの名無しさん :2022/12/28(水) 08:09:55.49 ID:jVoOqLVQM.net
- >>978
そういうのは「改造c++」とでも言うべきもので、個々の具体的な実装を挙げて話すべき話題。
具体的な実装の無い「改造c++」なんて「オレ言語」でしかないから、話題にしても相手にするヤツは居ないよ。興味無い。
- 986 :デフォルトの名無しさん :2022/12/28(水) 16:02:37.97 ID:wx2BQ76Ga.net
- >>981
まさかプロトタイプが30年後も使い続けてるとは思わなかったんだよ
- 987 :はちみつ餃子 :2022/12/29(木) 22:47:04.14 ID:J2+EgPHK0.net
- >>974
「わからない」という状態が最大のリスクだ。 精査して事情を把握してからやる分にはいいよ。
だけど少なくとも私はいちいちライブラリの細かいことなんて調べたくないし、
細部の事情まで読み解ける自信はないから製作者の意図 (仕様として明示されている範囲) を超える
ような使い方をあえてすることはないだろうという話。 要するに割に合わない。
しなくていいことはせずに済ませられたらそのほうがいいだろ。
割に合うと考えている人がいたとしたら
「んなわけねーだろ。 お前が調べるのに労力をかけてないだけ」
と思うから安易にやっちゃうやつはちょっとナメてるように感じる。
そりゃあ他に打てる手がなければ割に合わなくてもやらざるを得ないことだってあるだろうけどさぁ。
- 988 :デフォルトの名無しさん :2022/12/30(金) 07:37:06.73 ID:zn+Ud9N00.net
- 本当に余計なお世話だけど、はちみつさんのような実力がある人は
むしろライブラリやコンパイラのソースを読んだ方がいいよ
- 989 :デフォルトの名無しさん :2022/12/30(金) 10:24:58.07 ID:O3GOnLRpa.net
- >>988
おまえは仕事した方がいい
- 990 :デフォルトの名無しさん :2022/12/30(金) 11:11:02.33 ID:l10vdbnHr.net
- 火の玉ストレートやめたれ
- 991 :デフォルトの名無しさん :2022/12/30(金) 13:31:38.92 ID:p0azBXIn0.net
- std名前空間への勝手要素追加は未定義動作と書かれているのに
std名前空間内のクラスへのメンバ追加についてはなんで言及が無いのやろうな……
名前空間もクラスもPGの責任分担範囲の区切りみたいなもんで、
第三者に後から勝手に弄られたら設計したPGが困るのは同じだと思うのだけど、
- 992 :デフォルトの名無しさん :2022/12/30(金) 13:33:22.64 ID:DPUEZfMS0.net
- 後々の事考えて設計出来ない奴はPGに向いてない
- 993 :デフォルトの名無しさん :2022/12/30(金) 14:02:10.34 ID:p0azBXIn0.net
- 自分はできるPGですと自己申告する>>992……
その自身がどこから来るのかは誰も知らない……
- 994 :デフォルトの名無しさん :2022/12/30(金) 14:11:57.62 ID:DPUEZfMS0.net
- そんなこと思ってない
いままで見てきた汚いソース書いている連中の総意点を述べているだけのこと
- 995 :デフォルトの名無しさん :2022/12/30(金) 14:28:22.93 ID:p0azBXIn0.net
- つまりstd名前空間のソースは汚いから
予防のためにstd名前空間への勝手要素追加は未定義動作とするのがstdを設計したPGの立場では当然だと、
- 996 :デフォルトの名無しさん :2022/12/30(金) 14:33:46.74 ID:DPUEZfMS0.net
- バカなの?
なんのための名前空間なのかよく考えろよ
設計を区分するためだろ
そこにお前みたいなワケワケな奴が落書きしたらめちゃくちゃになるだろ
- 997 :デフォルトの名無しさん :2022/12/30(金) 15:06:36.37 ID:uGEPy//I0.net
- stackoverflow 辺りで
皆さんの御意見を聞いて来いよw
- 998 :デフォルトの名無しさん :2022/12/30(金) 17:36:57.79 ID:oiKCiiXa0.net
- 後のこと考えて設計するよりも先に手が動くような人じゃないとプログラミングは上達しないよ
- 999 :デフォルトの名無しさん :2022/12/30(金) 17:55:02.39 ID:12nE7t5Ga.net
- >>998
もうお前の尻拭いするの嫌だよ
たのむから手動かす前に3分くらい考えてくれ
- 1000 :デフォルトの名無しさん :2022/12/30(金) 18:20:10.37 ID:2kXrfTwwd.net
- 昔はさ、ウォーターフォールといって
完璧な設計ができるまでコードに手を出すな
設計が決まったら黙ってそれに従うコードを書け
なんてのがあったけど
前例のないものの完璧な設計なんてほいっとできるのか
現場からのフィードバックを無視なんてできるのか
って反省から今時の方法論ができているわけで
ただし、それを悪用するだけの寄生虫を擁護はしない
- 1001 :2ch.net投稿限界:Over 1000 Thread
- 2ch.netからのレス数が1000に到達しました。
総レス数 1001
307 KB
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★