[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 08/28 06:40 / Filesize : 306 KB / Number-of Response : 1032
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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

820 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 09:10:39.36 ID:wsa7u1K/d.net]
C++の話しようぜ

821 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 10:09:11.46 ID:zTEnSqew0.net]
c++20のコンセプトとかモジュールとか<=>とか誰か使ってる?

822 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 10:24:14.76 ID:8MYQQby5d.net]
<=> 使ってる

823 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 11:19:29.52 ID:rgyul2GY0.net]
>>796,797
へー 初めて知った

824 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 12:00:08.46 ID:8wSlC2cWa.net]
ウホッ演算子

825 名前:デフォルトの名無しさん mailto:sage [2022/12/16(金) 12:09:30.80 ID:3/NVi56ad.net]
<=>は便利だね
使い出すとやめられん

826 名前:デフォルトの名無しさん [2022/12/16(金) 12:26:19.15 ID:YwJTJAAR0.net]
<=>初めて知ったけどめちゃ便利だな
うちの環境じゃ使えないのが残念だけど

827 名前:デフォルトの名無しさん [2022/12/16(金) 15:18:01.45 ID:h3Zax2und.net]
operator==のdefaultは便利だわ

828 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 02:36:30.45 ID:ufrS8am+a.net]
a > b, a < b, a == b を一度に判定するだけの演算子の何がそんな便利やねん!
とおもったらこれ一つ定義するだけで各種比較演算子全部児童生成してくれるのね
なるほどこりゃ便利かも



829 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 05:21:21.32 ID:dncno9m70.net]
unorderedの比較の実装は相変わらず迷う

830 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 08:51:24.48 ID:SViislQC0.net]
ロリコンショタ歓喜じゃん

831 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 09:11:20.17 ID:rODQUlPF0.net]
using rel_ops だとスコープ全体に影響でるから使用控えてたけど、operator<=>で全部解決出来るようになったのはいいな

832 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 09:32:05.93 ID:XBBLmCjVd.net]
3方があると4方も欲しくなる

a < b
a = b
a > b
unordered

結局戻り値4値の関数を作ることになる

833 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 11:46:18.72 ID:QZoKK6jA0.net]
宇宙船演算子……!
ってオーバーロード……!
可能なの……?!

834 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 12:25:08.76 ID:dQNfWhWG0.net]
>>807
std::partial_ordering返すようにすれば<=>で4方出来るぞ

835 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 12:44:09.97 ID:rODQUlPF0.net]
>>808
いや、なにをいってるんだ
そのためのものだろ

836 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 14:06:58.32 ID:t4TbQFP40.net]
ストリーム入出力に使っていけ(※冗談です)

837 名前:デフォルトの名無しさん mailto:sage [2022/12/17(土) 14:23:32.76 ID:QZoKK6jA0.net]
>>810
それはそうか……orz
a-bのオーバーフロー対策なだけかと一瞬思った……

838 名前:デフォルトの名無しさん mailto:sage [2022/12/20(火) 07:42:37.51 ID:louNKIVjd.net]
NaN同士の比較とかあるからな



839 名前:デフォルトの名無しさん mailto:sage [2022/12/20(火) 14:22:24.61 ID:UPRI61by0.net]
このスレ見てるとわかるがC++が好きって言ってるやつって知能低いな

840 名前:デフォルトの名無しさん mailto:sage [2022/12/20(火) 15:05:44.24 ID:0942ga5D0.net]
このスレには周囲に天才と言われる人がいるからそれは違うな

841 名前:デフォルトの名無しさん [2022/12/20(火) 15:17:57.65 ID:/qMRbodsp.net]
自称だけどな

842 名前:デフォルトの名無しさん mailto:sage [2022/12/20(火) 15:21:56.61 ID:louNKIVjd.net]
あんなやつに褒められても嬉しかねえよってやつに
どう思われようが関係ねーなあ

843 名前:デフォルトの名無しさん (ワッチョイ 236f-s0Sd) mailto:sage [2022/12/25(日) 18:29:48.93 ID:Dw6urQXv0.net]
namespace std {
template <class T, std::size_t N>
struct array;
}

みたいに標準ライブラリの前方宣言を自作のヘッダに書くのってやっぱり未定義動作なんですかね?

844 名前:デフォルトの名無しさん (ワッチョイ cf7c-5mfr) mailto:sage [2022/12/25(日) 18:51:26.23 ID:PNih05NQ0.net]
stdに勝手に宣言加えていいのは既存テンプレートの特殊化だけ
他は未定義

845 名前:はちみつ餃子 mailto:sage [2022/12/25(日) 20:29:17.71 ID:8blj/qJt0.net]
>>818
原則としては std 名前空間になんらかの宣言や定義を追加したら未定義ということになってる。
https://timsong-cpp.github.io/cppwp/n4861/namespace.std
その事例も該当すると思う。

条件付きで許されている特殊化はあるが C++20 から制限が強化された。
(従来は条件付きで「テンプレートの特殊化を追加できる」だったのが「クラステンプレートの特殊化を追加できる」に改められている。)
ユーザー定義型ごとのカスタマイズを許したい場面では Customization Point Object (CPO) を
活用する方向性なので特殊化でどうにかする必要もないし制限が強くなることはあっても緩和されることはないんじゃないかな。

846 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 21:15:27.65 ID:BoLdymVdF.net]
そんな堅苦しい事なんて言わんでもええやん?
どんな弊害があるん?

847 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 22:24:02.06 ID:9/OfwQI/0.net]
>>821 標準ライブラリの変更にあたって、 std に宣言追加しているソースへの影響を考えないといけなくなる。

848 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 22:39:45.88 ID:8rnFU1jp0.net]
>>822
リンクで失敗するので修正すれば良いだけでは?



849 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 22:40:44.04 ID:8rnFU1jp0.net]
「未定義」ってほどには深刻な問題はないと思うんだよね

850 名前:デフォルトの名無しさん mailto:sage [2022/12/25(日) 23:02:22.44 ID:PNih05NQ0.net]
コンパイラがstdに勝手宣言がないことを前提にしたあらゆる最適化の結果を受け入れるなら別にいいと思うよ
俺は絶対に嫌だから関わらないでくれよ

851 名前:デフォルトの名無しさん [2022/12/25(日) 23:15:00.75 ID:8rnFU1jp0.net]
>>825
いやまぁ>>818は俺じゃないので俺も必要性を感じているわけではないけども
具体的に何を恐れているのか分からん

852 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 01:10:32.66 ID:OBkbHJZM0.net]
>>826
何が起きるか具体的にわからないから恐ろしいんだよ。

853 名前:デフォルトの名無しさん [2022/12/26(月) 01:18:22.88 ID:D/1vl6x80.net]
>>827
ワクワクしてこないか?

854 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 01:20:46.52 ID:YnLWxzzl0.net]
>>827
oresamaライブラリの中でoresama名前空間があって
arrayが定義されていたとして
oresamaライブラリとは別のプロジェクトで
oresama::array前方宣言したときに
起こりうることは予想がつくよね?
それがstd名前空間だと動作が未定義だとのことだけども
何が違うのか分かります?

855 名前:デフォルトの名無しさん (ワッチョイ cf7c-5mfr) mailto:sage [2022/12/26(月) 01:30:35.37 ID:2gdEMUwk0.net]
>>829
コンパイラ様はstd以下を思うままに特別扱いしてカオスでアドホックな最適化処理をいくらでも入れることが許されてる

856 名前:デフォルトの名無しさん (ワッチョイ b101-jXNG) mailto:sage [2022/12/26(月) 01:51:58.67 ID:YnLWxzzl0.net]
>>830
>>825も指摘してるけどoresamaとstdの違いはそれくらいだよね?
具体的にどういう最適化をして鼻から悪魔を出すのかな?
まぁそんなことを分かる人はおらんかな...

857 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 02:20:44.42 ID:OBkbHJZM0.net]
>>831
コンパイラの内部に興味を持って調べたいならどんどんやればいいよ。
詳しい人が増えるならそれはたいへん喜ばしい!

でも、リッチな C++ コンパイラのソースコードを読んで様々な最適化がどう組み合わさるかまで把握するのは
相当に高い技能を持った達人でないと無理なのでこのスレ程度ではなんもわからんと思う。
世の中にはこれを保守している人がいるんだからありがたい話だよな。

私がどこかで見たおぼろげな記憶では標準テンプレート関連の一部で
マングルのルールが異なる (名前が短くなるようにしてる?) というのがあるので
変なことをすると破綻することもあるのかもしれない。

858 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 02:29:01.84 ID:2Z6X9F6ZM.net]
なぜこうもわざわざ未定義動作を踏み抜きたいやつが多いのか



859 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 02:33:59.35 ID:OBkbHJZM0.net]
コンパイラをナメてるからだろ。
「未定義動作つってもどうせこうなるだろう」という予測が出来ると信じている。
無理なのに。

860 名前:デフォルトの名無しさん (ワッチョイ 1301-iijX) mailto:sage [2022/12/26(月) 05:51:34.26 ID:+xP92Jxa0.net]
まあ単なるテンプレートライブラリなのにstdだけを特別扱いして最適化を図るのはちょっとやりすぎな気がしなくもない

861 名前:デフォルトの名無しさん [2022/12/26(月) 07:41:41.79 ID:zTKHQ8850.net]
clangのソースコードはC++プログラムの書き方の勉強になりますね

862 名前:デフォルトの名無しさん [2022/12/26(月) 08:06:50.83 ID:FVIubv9sd.net]
std::arrayってなんらかのusingであることが(コンパイラ側への制限として)許されてたりするんか?

もしarrayの実体がこんな実装だったら
namespase std::__internal {
template<class T, size_t>class array{...};
}
namespase std:: {
template<class T, size_t>using array=__internal<T,size>;
}

勝手にこれ書いたらまずくならんか?
namespase std{
template<class T, size_t>class array;
}

863 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 09:12:05.09 ID:5S/2UDN2d.net]
なるね

864 名前:デフォルトの名無しさん [2022/12/26(月) 11:35:27.15 ID:v25C8vnQ0.net]
>>818
それやると特定のC++バージョン、特定のコンパイラでしか
コンパイルできないコードになりかねないし、
普通に #include <array> すればいいだろ。

それともそれが出来ない理由があるとか?

865 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 12:12:38.12 ID:YnLWxzzl0.net]
>>832
なるほどマングリング変えられるとリンカーエラーで
しばし悩むかもしれませんね

>>837
これはコンパイルで弾かれるので分かると思います

おふた方とも勉強になりました! 有り難うございます
しかし未定義動作ってほど酷いことにはならないのかなぁと思います
なめてますかね私?

866 名前:デフォルトの名無しさん [2022/12/26(月) 13:31:39.98 ID:6bMfB0bxa.net]
>未定義動作ってほど酷いこと

は?

867 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 13:38:20.67 ID:OBkbHJZM0.net]
>>840
未定義動作と定義されているんだから未定義動作としか言えんだろ。

868 名前:デフォルトの名無しさん [2022/12/26(月) 13:49:22.29 ID:YnLWxzzl0.net]
>>841
未定義動作とはコンパイルもリンクも通って実行できるけど
どんな動作をするか分からない(未定義)ので
事前に分かるコンパイルエラーやリンカーエラーに比べて
「酷い」と表現しました
いわゆる「鼻から悪魔」



869 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 13:51:12.76 ID:YnLWxzzl0.net]
>>842
まぁ規格に書かれちゃってるんだからそりゃそうですね

870 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 14:17:52.01 ID:OBkbHJZM0.net]
もしも「必ずエラーとして報告されるべき」みたいな仕様にしたら std の特別扱いが要るから
標準ヘッダのファイルに素朴に書くだけな実装はやりにくくなるし……。

871 名前:デフォルトの名無しさん [2022/12/26(月) 14:22:21.57 ID:uyDYkqVs0.net]
void InitBoard(void) // 盤を初期化
{
int x, y;

for (y = 0; y < YMAX; y++)
{
for (x = 0; x < XMAX; x++)
{
board[x][y] = 0;
}
for (x = 0; x < XMAX; x++)
{
num[x] = 0;
}
}
}

この処理の無駄を省くコードおしえてください

872 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:26:27.90 ID:A7MLr6bua.net]
>>843
酷いとわかっているのに
なんでこの未定義動作だけ酷くはならないと思えるの?

873 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:26:50.08 ID:9plh3gB/d.net]
memset(board, 0, sizeof board);
memset(num, 0, sizeof num);

874 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:33:45.39 ID:a6eE731v0.net]
>>846
つbzero,ZeroMemory

875 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:39:30.42 ID:EnLBjT8OM.net]
標準に <iosfwd> あるくらいだし動機はわかるけども

あんま詳しくないけどモジュールはよってことなんかね?

876 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:44:20.75 ID:2wvNEB42d.net]
禁止と言われて、そうですかと聞き分ける人と、ゴネる人がいるってことだ。

877 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:49:02.84 ID:YnLWxzzl0.net]
>>847
>>821からの流れは
実際に「酷い」鼻から悪魔が出る処理系はないんじゃないかな?って問い掛けです
少なくともここのスレではコンパイルエラーやリンカーエラーになる事例は
指摘がありましたが「酷い」ことになる事例は出ていません(誰かもしあれば?)

なぜそう考えるかは名前空間oresamaでは合法で
名前空間stdのみに規格において例外的な規定がなされているからって程度です
>>845のようにエラーが明示的に出ないのも
酷いことにならんのじゃないかなぁと
私が考えてしまうことに貢献しているかも

878 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 14:50:30.84 ID:OBkbHJZM0.net]
>>846
std::fill を使うのが妥当じゃないかな?

memset でも普通は問題は起きないと思うけど
メモリブロック (バイト列) に対する操作だから board の型によっては
問題が起こることはなくもない。



879 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 14:51:24.85 ID:YnLWxzzl0.net]
>>851
そういうことではない

文法的にダブルスタンダードになってるのが気持ち悪い
名前空間stdも

880 名前:oresamaも同じ取り扱いである方が
文法的に美しいって感じているから
実際には最適化のためにstdは特別扱いが規定されている
[]
[ここ壊れてます]

881 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:04:20.66 ID:rUBUe8yFa.net]
(自分の環境だと)酷いことにはなってないから
未定義踏んでてもOK派?
勘弁してください

882 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:10:52.71 ID:YnLWxzzl0.net]
>>855
煽ってものらないよw 誰もそんなことは書いていない

酷いことになる事例を教えてねってことを書いています
どういうこと(最適化?)を想定してダブルスタンダードにしたのか
動機を知りたくないですか?

883 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 15:12:35.95 ID:a6eE731v0.net]
fill_n(num,__countof(num),0)
上のboardは自分で考えるんだ

884 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 15:26:40.53 ID:OBkbHJZM0.net]
>>854
自分が作ったライブラリの名前空間に何を追加されても正しく動く (または必ずエラーになる) ように保証してんのか?
各ライブラリごとの挙動に保証していることと保証してないことがあるのは当たり前のことだろ。
お前のライブラリについての保証はお前がするから「言語では」関知しないってだけで、
oresama に何を追加してもよいことが保証されてるわけではない。

885 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:14:39.95 ID:YnLWxzzl0.net]
>>858
たぶん伝わってないな
以下をユーザが自分のソースに書くのは>>820の言うように規格で禁じられている
namespace std {
template <class T, std::size_t N>
struct array;
}
同じくoresama::ARRAYなるカスタムのクラステンプレートが定義されていたとして
以下をユーザがソースに書くのは合法
namespace oresama {
template <class T, std::size_t N>
struct ARRAY;
}
これをダブルスタンダードで気持ちが悪いと思っている
最適化との説だけども
具体的なことを知っている人がいたら聞きたいな

886 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:17:49.67 ID:+99B24rl0.net]
>>846
そのboard[x[][y]はゼロフィルしても良い配列?
盤外に飛び出す桂馬飛びの高速判定テクニックとして実はboard[-1][-2]が壁のコードになっている
とかありそう
※ 全くの想像です
※ 未定義動作と言われても知らそんこの場合アセンブリコードが正しくて速ければええんじゃ
※ この場合2次元配列はやめてカラム数が2のべきの1次元配列であるべき
※ ここまで全くの妄想です

887 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:19:44.55 ID:+99B24rl0.net]
説明が抜けた;;;
board[-1][-2]が壁のコードになるような思想の場合は
board[0..][0..]にも当然盤を取り囲むように壁のコードが配置される

888 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 16:26:57.23 ID:OBkbHJZM0.net]
>>859
お前のライブラリの仕様はお前が決める、
標準ライブラリの仕様は言語仕様で決める。
そこになんの違いもありゃしねぇだろうが



889 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:30:53.99 ID:/571GBxYM.net]
>>862
一行目は違う
oresama::ARRAYの前方宣言が合法なのは
文法で規定されている

890 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 16:34:00.09 ID:OBkbHJZM0.net]
>>863
No.
許されているのはそのライブラリの設計がそうなっているからで許さない仕様のライブラリはあり得る。

891 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:44:01.34 ID:/571GBxYM.net]
>>864
前方宣言を許さない設計なんて本当にあるの?

892 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:54:23.72 ID:QSsdq8qk0.net]
>>865 あるよ。標準ライブラリがそう。

893 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 16:55:15.06 ID:zTKHQ8850.net]
かまってちゃん

894 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 16:55:21.28 ID:OBkbHJZM0.net]
>>865
すでに >>837 で示されてる。 見かけ上の名前は別名であるかもしれない。
別名ではない実装で書かれていることがはっきりしていて将来も変更されないと oresama::ARRAY について
保証されているならそれをあてにしてもいいんじゃないの。
で、それを保証するかどうかはライブラリを作ったやつの裁量次第。

895 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:07:33.78 ID:/571GBxYM.net]
>>866
誰か突っ込んでくれると思ってた
有難う!

896 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:11:08.06 ID:+99B24rl0.net]
namespaceはシンボルの衝突を防ぐためのしくみなのに
後から要素を追加できる仕様の方がおかしいfinalizeできるべき

だいたいnamespace oresama にX=サンが "bar.h" にて void oresama:foo()を定義して、
C++の標準ライブラリ仕様しか見ていないY=サンが "baz.h" にて同じシグネチャで異なる実装の
void oresama:foo() が実装されてしまう危険性が避けられない
のだから第三者によるnamespace内への後付けは本来言われるまでも無く禁止されるべき事項、

同一シグネチャで異なる実装があったらリンク時にエラーになる、と気体することは場合に掘っては全くできない
0xcc.net/blog/archives/000060.html

ちなVS2010だともっと簡単に(スタティックリンクでも)起こせるorz

897 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:13:25.25 ID:+99B24rl0.net]
訂正orz
誤1: C++の標準ライブラリ仕様しか見ていないY=サン
正1: oresamaのオリジナルの仕様書しか見ていないY=サン

誤2: 場合に掘っては全く
正2: 場合によっては全く

898 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 17:15:26.88 ID:/571GBxYM.net]
>>868
話がズレている
前方宣言は規格で合法だよ
(ただし名前空間std内を除く)
鼻から悪魔は出ない...と思う



899 名前:はちみつ餃子 mailto:sage [2022/12/26(月) 17:58:37.42 ID:OBkbHJZM0.net]
>>872
前方宣言自体はいいよ。
そのライブラリ内でどう定義されているかわかっていて**妥当な前方宣言を出来るなら**。
将来のライブラリの更新があっても妥当でありつづける (または妥当でなくなったときに追従する) なら。

いちいちライブラリが保証していない内部仕様を調査して妥当かどうか確かめなきゃならない、どんな干渉が起きるかわからない
ってのは (ライブラリの仕様としては) 未定義じゃろ。

900 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 18:28:18.27 ID:gLGPMU9jd.net]
>>854
タブスタって何が?
stdに勝手に追加やってみた?
コンパイル通るぞ
文法的にどうのということと
できることとやっていいことは違うということを
区別しているか?

901 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 18:40:09.55 ID:+xP92Jxa0.net]
>>846
C言語はboard[x][y]のy側が連続に配置されるから for(x = ...){ for(y = ...){ ... } } の順にネストした方が効率的になる可能性が高いので俺なら
for (x = 0; x < XMAX; x++){
for (y = 0; y < YMAX; y++){
board[x][y] = 0;
}
num[x] = 0;
}
って書くと思う

902 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 21:17:05.02 ID:YnLWxzzl0.net]
>>873
前方宣言ってヘッダを見てやるから
逆に妥当でない前方宣言ってどんな場合のことを書いているのですか?
内部仕様を調査する必要もないと思うのですが?

903 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 21:18:30.60 ID:YnLWxzzl0.net]
>>874
>>859の通り

904 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 21:37:30.08 ID:2gdEMUwk0.net]
前方宣言のつもりがこういうので意味変わっても知らんぞ
d.hatena.ne.jp/DigitalGhost/20090216/1234793122

905 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 21:37:34.67 ID:Luv0983hM.net]
oresama 名前空間に前方宣言が追加されると未定義動作になるような例って実際作れる?
std についてはコンパイラマジックでも何でもありだが

906 名前:デフォルトの名無しさん [2022/12/26(月) 21:47:21.55 ID:6ywYYiev0.net]
未定義動作は未定義だよ

意図通り動いても、
デバッグするのに便利な例外が投げられても、
まともに動いてるように見えてメモリ壊してても、
コンパイルエラーになっても問題ない

コンパイラと実行環境は求められる動作が決まってないから

907 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 22:12:49.76 ID:NZGNd7w4d.net]
変な宣言が追加されるとSFINAEが狂うパターンとかあるかも。

908 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 23:28:38.90 ID:8d7AMOhX0.net]
>>877
できることとやっていいことは違うということを区別してるかとあんたに聞いているんだ
そこに他人の発言を持ち出す余地はない

答えに窮しているんなら駄レスしねえで黙ってろ



909 名前:デフォルトの名無しさん mailto:sage [2022/12/26(月) 23:47:11.05 ID:5EhwIIVK0.net]
はちみつはもう冬休みなのか。裏山

910 名前:デフォルトの名無しさん [2022/12/26(月) 23:57:12.44 ID:YnLWxzzl0.net]
>>882
>>859に書いてあるから読みたまえ

911 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:01:58. ]
[ここ壊れてます]

912 名前:89 ID:QO3hLMTW0.net mailto: >>820
思ったんだけどさ前方宣言は`declarations'に入ってないってことはないかな?
以下が原文なんだけども
>Unless otherwise specified, the behavior of a C++ program is undefined
>if it adds declarations or definitions to namespace std or to a
>namespace within namespace std.
文からは入ってるとも入ってないとも俺には判断がつかない
確かな見解がある人はいるかな?
[]
[ここ壊れてます]

913 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:11:56.45 ID:9ztV+U0x0.net]
>>884
答えに窮しているんなら駄レスしねえで黙ってろ
てめーの言葉で語れないフリーライダーが
生産性のないやつはプログラマのゴミの中のゴミだ

914 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:13:15.81 ID:fnhKiHjQ0.net]
>>884 >859の言う「ダブルスタンダード」は>862-864で否定されて終わってるだろ。

915 名前:デフォルトの名無しさん [2022/12/27(火) 00:14:08.27 ID:QO3hLMTW0.net]
>>886
>>859は俺の投稿だよw

916 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:16:20.11 ID:9ztV+U0x0.net]
>>888
ゴミめ

917 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:18:30.98 ID:9ztV+U0x0.net]
ヘッダファイルそのものを改造することだってできる
ISO/IEC14882のヘッダファイルだけ改造しちゃいけなくて
それ以外のヘッダファイルは改造していいことにしたいのかよ
ダブスタだからって? バカか

918 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:20:13.94 ID:9ztV+U0x0.net]
標準のヘッダファイルを書き換えるななんてバカ用の説明が規格票の中に書いてあるかどうか知らんが
そういうレベルの屁理屈ならべてんなボケが



919 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:21:11.64 ID:QO3hLMTW0.net]
>>887
>>865以降も読んでくれ給え
前方宣言で鼻から悪魔が出るケースは名前空間std以外ではない
コンパイルエラーやリンカーエラーで弾ける

名前空間stdでもないと思い始めている
規格の`declarations'は普通の宣言のことで
前方宣言はこれに入らない説に傾いてきた

920 名前:デフォルトの名無しさん [2022/12/27(火) 00:22:43.58 ID:QO3hLMTW0.net]
>>889
3行目に書いてあるから読みなよ

921 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:23:47.05 ID:QO3hLMTW0.net]
>>890,891
何で標準のヘッダファイルを書き換える話を始めてるの?

922 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:28:00.93 ID:QO3hLMTW0.net]
>>820
>>>818
>原則としては std 名前空間になんらかの宣言や定義を追加したら未定義ということになってる。
>https://timsong-cpp.github.io/cppwp/n4861/namespace.std
>その事例も該当すると思う。
これが正しいかもしれんし違うかもしれん

923 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:33:27.20 ID:9ztV+U0x0.net]
>>893
うるせえ命令すんな
読んで欲しければ読みたくなるようにお前が努力しろカス

924 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:34:29.25 ID:9ztV+U0x0.net]
>>894
一緒だろうがよ
stdの中に働きかけて動作を変えようって話だろ
stdだけそれをするなというのがダブスタなんだろ

925 名前:デフォルトの名無しさん [2022/12/27(火) 00:36:22.67 ID:QO3hLMTW0.net]
>>896
俺は優しいからね

>>859
>以下をユーザが自分のソースに書くのは>>820の言うように規格で禁じられている
>namespace std {
> template <class T, std::size_t N>
> struct array;
>}
規格で禁じられていると書いている人間が
「できることとやっていいことは違うということを区別して」いないわけなかろう

926 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:36:52.90 ID:9ztV+U0x0.net]
作者がするなということをなぜしたいんだよ
脱獄したきゃ勝手にやってろ
誰も止めやしねえよ
バカ一匹どうなろうが誰も知ったこっちゃねえ

927 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:37:18.87 ID:QO3hLMTW0.net]
>>897
>stdの中に働きかけて動作を変えようって話だろ
違います

928 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:41:27.03 ID:QO3hLMTW0.net]
>>899
規格の英文が曖昧だから読み間違えてんじゃないの?
って思い始めてる



929 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:42:11.81 ID:9ztV+U0x0.net]
ああそうかい
勝手に思ってな

930 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:43:47.73 ID:QO3hLMTW0.net]
>>902
規格は読んだのかな?

931 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:47:28.29 ID:R1/11RYB0.net]
>>879
>>870 ドヤア

932 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:49:39.31 ID:QO3hLMTW0.net]
>>904
定義を書いたらこの問題は起こるね
前方宣言では起こらない

933 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:50:13.48 ID:R1/11RYB0.net]
「勝手に」が抜けてたorz
X=サンが*勝手*に追加した "bar.h" にて void oresama:foo()を定義のを知らずに
Y=サンが "baz.h" にて同じシグネチャで異なる実装の void oresama:foo() が実装されてしまう
と言う場合は覿面に意図しない動きになる(ことがある

934 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:51:22.27 ID:R1/11RYB0.net]
>>905
定義の無い前方宣言とか何のためにするんじゃ……

935 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:53:18.15 ID:QO3hLMTW0.net]
>>870はリンカーがチェックすればこの問題は起こらないはずなんだけど
意図的にオーバライドできるようになってるとか
何かで読んだ気がする...

936 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:54:50.91 ID:QO3hLMTW0.net]
>>907
ヘッダをできるだけincludeしたくないから
ヘッダをincludeしたくないのは依存ヘッダを減らしたいから
みんなpimplとかで前方宣言してるやろ?

937 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:54:51.28 ID:9ztV+U0x0.net]
>>903
読んでるよ
どのくらいか指定がないからどうにでも言えるw

苦し紛れに何が言いたかったのかな

938 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:56:18.99 ID:QO3hLMTW0.net]
>>910
ではあなたは`declarations'に
前方宣言が含まれるとの見解でよろしいか?



939 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:58:30.57 ID:9ztV+U0x0.net]
>>911
前方宣言て何? JIS X3014の規格票を検索してもヒットしないんだが

940 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 00:59:25.89 ID:QO3hLMTW0.net]
forward declarationじゃないかな? ない?

941 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 01:03:39.45 ID:9ztV+U0x0.net]
さあ知らんね
おまえの曖昧さを俺が処理してやる義理はない

942 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 01:06:05.88 ID:9ztV+U0x0.net]
技術板で煽りネタが英語力とかくだらんな
英語圏在住のバカと同類だってアピールしたら格好いいんかよw

943 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 01:08:38.87 ID:QO3hLMTW0.net]
>>915
規格が英語で書かれてるんだから仕方ないじゃないか

>>914
威勢が良い割には逃亡か
根性がねーな

944 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 01:12:56.49 ID:9ztV+U0x0.net]
煽っても無駄だよ
義理のないことの特別サービスをさせたいようだが
世の中そう甘くはない

暇人と違って明日も朝から仕事なんだよ
バイバイ

945 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 01:14:43.51 ID:QO3hLMTW0.net]
>>916
おまいさんは威勢よく俺を煽ってたけども
規格も読んでなかったということだ
根拠としたのは恐らく>>820の書き込みのみ
俺は純真なので痛く傷ついたんだよ
他人の言説を無批判に信じて自らは確かめることなく
人を攻撃することはやめてくれ

946 名前:はちみつ餃子 mailto:sage [2022/12/27(火) 01:34:54.20 ID:G9AKlNLO0.net]
前方宣言が宣言でない可能性なんて考えたこともなかったが
たとえば単にポインタと書いてあるときにメンバ関数ポインタを含んでなかったりすることを
思い出せば変な用語になってる可能性は考慮にいれるという姿勢は必要かもしれない。

あらためて検討してみたところ、前方宣言という用語の直接的な定義はないが仕様中で
前方宣言 (forward declaration) と呼ばれているものは宣言に該当するし、
単に宣言の位置が前方である宣言のことを前方宣言と呼んでいると解しても良いと思う。

947 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 02:38:42.00 ID:Kk7zAeAV0.net]
未定義動作だから宣言禁止してるんじゃない
宣言禁止してるから未定義動作になったんだ

948 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 02:48:53.38 ID:fnhKiHjQ0.net]
>>892
>865の質問は>866,868で答えが出てて、その前の話に影響無いし・・・と読み進めると
>872で「前方宣言は規格で合法」とかいう当たり前に見える意味不明な話につづいており・・・

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





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

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

さっきキレちらかしてた人もこんな感じで我慢できなくなったんだろう。
明確な用語を使うように気を付けて主張を整理しないと、君とまともに会話してくれる人居なくなると思うよ。
[]
[ここ壊れてます]

950 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 07:37:18.96 ID:GSvWJ+1+0.net]
「天才のぼくちんの完璧なレスを理解できない無能なお前らが悪い!」って暴れ出すいつもの奴だからもう放っとけよ

951 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 07:46:03.70 ID:nX/ozHbV0.net]
事実と挙動だけ書けばいい

952 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 08:04:36.52 ID:l/ni+ylad.net]
ハッシュ小僧か

953 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:12:03.63 ID:QO3hLMTW0.net]
>>921
鼻から悪魔はコンパイルエラーやリンカーエラーは当然含まない
何人か知らないようだけどもひょっとして自演してるの?

954 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:18:29.54 ID:QO3hLMTW0.net]
>>921
したがって>>865の答えは出ていない
名前空間stdは>>820のdeclarationsに
前方宣言が入るとは限らないので
答えにはならない

それと俺は天才くんとは別人
横からちゃちゃ入れてる人だよ

955 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:39:33.69 ID:2fUOYjFgd.net]
はいはい、別人なんでちゅね~
ニヤニヤ

956 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:43:36.77 ID:QO3hLMTW0.net]
>>927
例えば>>654が俺だよ

957 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:44:56.74 ID:2fUOYjFgd.net]
それでそれで?

958 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:45:14.64 ID:QO3hLMTW0.net]
おんなじワッチョイ検索してね



959 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:45:28.77 ID:fnhKiHjQ0.net]
「いつもの奴」が一人ということも無いからな。悲しいことに。

コテハン付けてくれない?

960 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:46:04.33 ID:QO3hLMTW0.net]
天才くんほどの実力はないです

961 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:46:30.13 ID:QO3hLMTW0.net]
>>931
どうやってつけるの?

962 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 11:58:22.17 ID:fnhKiHjQ0.net]
>>933 https://www.google.com/search?q=5ch+%E3%83%88%E3%83%AA%E3%83%83%E3%83%97

963 名前:天災 mailto:sage [2022/12/27(火) 12:02:33.04 ID:QO3hLMTW0.net]
>>934
Thanks!

964 名前:デフォルトの名無しさん (ブーイモ MM21-5fcg) mailto:sage [2022/12/27(火) 12:03:58.07 ID:ifNnQS7gM.net]
>>837
本題と関係ないけどこれって CTAD 関連含めて挙動完全に大丈夫なんか?少なくとも C++17 ではダメだが

965 名前:天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG) mailto:sage [2022/12/27(火) 12:04:16.27 ID:QO3hLMTW0.net]
俺は天才なんて呼ばれたことはないが
天才と呼ばれた人だこのスレで呼ばれたw

966 名前:天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG) mailto:sage [2022/12/27(火) 12:04:54.10 ID:QO3hLMTW0.net]
天才と呼ばれた人だ<と>このスレで呼ばれたw

967 名前:デフォルトの名無しさん (ワッチョイ 6d5f-aH43) mailto:sage [2022/12/27(火) 12:12:33.94 ID:fnhKiHjQ0.net]
ありがとうございます。助かります。

968 名前:天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG) mailto:sage [2022/12/27(火) 12:13:50.33 ID:QO3hLMTW0.net]
いえこちらこそ



969 名前:デフォルトの名無しさん (スッップ Sd57-Xl/E) mailto:sage [2022/12/27(火) 12:17:08.49 ID:XYKyOOkrd.net]
>>865の結論て>>866で終わってると思うんだけど
前方宣言がdeclarationじゃないとか曲解だろ
たまたま先に同じ型で宣言するという技法がテクニックとして成立するだけ

970 名前:天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG) mailto:sage [2022/12/27(火) 12:29:08.28 ID:QO3hLMTW0.net]
前方宣言が確かに>>820の`declarations'に含まれる根拠があれば示して下さい
前方宣言で鼻から悪魔が出ることは
懸案事項の名前空間stdの場合は保留として他にないと思う
>>837はコンパイルエラーで弾かれるので鼻から悪魔は出ない
あれば教えて下さい

971 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 12:55:07.85 ID:XYKyOOkrd.net]
まずあなたがどっちもdeclarationなのにただのテクニックである前方宣言が含まれない理由を

972 名前:示すべきだろう []
[ここ壊れてます]

973 名前:天災 mailto:sage [2022/12/27(火) 13:01:14.48 ID:QO3hLMTW0.net]
>>943
俺は入るとも入らないとも根拠がないので保留だよ
どちらかの根拠があれば解決だね

974 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:09:43.62 ID:WVVp8u06d.net]
>>925
コンパイルエラーやリンクエラーも未定義動作で起こりうる事の一つなんだけど
どういう理屈で鼻から悪魔から除外されるの?

975 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:10:56.66 ID:8Y7pY2Mbd.net]
それは違うだろ

976 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:18:26.61 ID:WVVp8u06d.net]
違わないよ
何でも起こりうるのが未定義動作だ
お前はコンパイルエラーの方が鼻悪魔出現よりも非現実度が高いと思ってるの?

977 名前:天災 mailto:sage [2022/12/27(火) 13:19:13.33 ID:QO3hLMTW0.net]
>>945
コンパイルエラーやリンクエラー -> 動作しない
未定義動作 -> 動作する

978 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:22:50.11 ID:WVVp8u06d.net]
現実的な話としては、未定義動作静的解析で見つけ出してillーformed扱いしてコンパイル拒否するコンパイラがあったとして、それは規格違反ではない
当たり前だろ、だって未定義なんだから



979 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:23:40.85 ID:XYKyOOkrd.net]
>>944
まず前方宣言がdeclarationという仕様のそとにある可能性を示してくれないと
前方宣言ってdeclarationの言語仕様外の動作してるの?

980 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:24:42.77 ID:WVVp8u06d.net]
>>948
未定義動作の「動作」(undefined behaviourのbehaviour)は実行時動作だけ意味してるわけじゃない

981 名前:天災 mailto:sage [2022/12/27(火) 13:27:30.62 ID:QO3hLMTW0.net]
>>950
俺も昨日から規格をあたってるけど見つからんのだよ
Cの規格を見れば良いのかな?

982 名前:天災 [2022/12/27(火) 13:35:30.55 ID:QO3hLMTW0.net]
>>951
初めて聞いたよ

983 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:35:53.60 ID:8Y7pY2Mbd.net]
>>951
通らない部分は未定義動作のまま残して良いわけだけど
コンパイルが通らないとなると問題だ

984 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:43:49.52 ID:WVVp8u06d.net]
>>954
何が問題なの?何だろうと問題にしないのが未定義という事だぞ
それ以上言うなら「未定義といえどもコンパイルとリンクは必ず通らなければならない」って規格書に書いてある場所提示してね

985 名前:天災 mailto:sage [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の指摘だよ

986 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:46:12.79 ID:8Y7pY2Mbd.net]
未定義じゃなくても「必ず通らなきゃならない」なんて記述はないと思うけど

987 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:56:51.44 ID:fnhKiHjQ0.net]
>>956 ちがうんだよなぁ。
> CやC++の場合、コンパイラはコンパイル時に未定義動作のチェックを行うことができる

よりC++規格に即した>921のリンク先も見てね。

988 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:57:29.46 ID:XYKyOOkrd.net]
>>952
普通にdeclaration and definitionの項でも読んでれば良いんじゃないの

前方宣言特有の動作があるのにここにないなら別である可能性も考えて良い



989 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:59:01.95 ID:WVVp8u06d.net]
>>956
ゴミ持って来んな
しかもそのゴミにもコンパイル前にチェックしてもいい(しなくてもいい)って書いてあるやんけ
>>957
コンパイル出来なかったら問題だとかいう寝言言い出したのはお前の方だろうが

990 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 13:59:36.79 ID:fnhKiHjQ0.net]
>>957 あるよ。 https://timsong-cpp.github.io/cppwp/n4861/intro.compliance#2.1

991 名前:はちみつ餃子 mailto:sage [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

992 名前:天災 mailto:sage [2022/12/27(火) 14:23:44.32 ID:QO3hLMTW0.net]
>>962
ホントだねw

Wikipediaにあるようにコンパイルもリンクも通って
実行はできるときに使うことが多いと思ってたけども

993 名前:デフォルトの名無しさん mailto:sage [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)までに明示的に未定義と指定された動作を示すことはない。- エンディングノート]

994 名前:天災 mailto:sage [2022/12/27(火) 14:53:01.92 ID:QO3hLMTW0.net]
>>964
有難う
用語は注意して使わないとね

>>865の質問を正確にすると
前方宣言を自分のソースに追加すると
ビルドはできるが動作が未定義となる設計は本当にあるの?
(もちろんstdは懸案事項なので保留するとしてそれ以外でね)

995 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 15:32:40.76 ID:XYKyOOkrd.net]
stdだと未定義とするって仕様なのにstd保留してどうするんだ
未定義にならずにコンパイラが仕様通りの解釈して動作するだけだろ

996 名前:はちみつ餃子 mailto:sage [2022/12/27(火) 15:37:36.05 ID:G9AKlNLO0.net]
言語的には仕様通りの解釈をするがそれがそのライブラリにとって想定外であるような、
つまり本来の動作と異なる結果を引きおこすような形での前方宣言がありうるかという意味だろ。

997 名前:はちみつ餃子 mailto:sage [2022/12/27(火) 15:58:07.39 ID:G9AKlNLO0.net]
それっぽい例を作れた!
https://wandbox.org/permlink/6utNhLox1WhOaBV8

とはいっても適切な前方宣言になっていないから起こっていることではあるので、
「ヘッダを見て間違いなく前方宣言としては適切になるように書いたけど挙動には影響ある」という例にはなってない。

998 名前:天災 mailto:sage [2022/12/27(火) 16:01:30.79 ID:QO3hLMTW0.net]
>>966
話が通じんなw
その仕様を俺は疑っているから保留
正確に言うとdeclarationsに前方宣言は含まないかもしれんと思っている



999 名前:デフォルトの名無しさん (ワッチョイ 73f0-4Ar3) mailto:sage [2022/12/27(火) 19:17:57.55 ID:7IKxcRBS0.net]
じゃ小学生の自由研究の時期が終わったら呼んでください

1000 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 20:34:13.81 ID:AOBUz6/T0.net]
ボクちゃんの痛い自由研究
「stdネームスペースに落書き」

1001 名前:デフォルトの名無しさん [2022/12/27(火) 21:38:26.75 ID:Q5qxYeje0.net]
じゃあ、ISOで未定義の時は、コンパイラの仕様を調べて使えば良いのでは?

1002 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 21:40:51.41 ID:FdHzEXmap.net]
移植とかでコンパイラ変わったら意図しない実行するとか平気ならな

1003 名前:天災 mailto:sage [2022/12/27(火) 22:06:21.35 ID:QO3hLMTW0.net]
>>968
確かに前方宣言で挙動変わるね
しかしこのトリッキーな例をもって
前方宣言を自分の管理外の名前空間(std以外でも)に
追加するのが危険と言って良いものかは正直悩む

1004 名前:天災 [2022/12/27(火) 22:15:15.29 ID:QO3hLMTW0.net]
>>972,973
俺は絶対にstdはいじらないね

1005 名前:デフォルトの名無しさん [2022/12/27(火) 22:17:12.44 ID:Q5qxYeje0.net]
じゃあ俺もそうする。

1006 名前:デフォルトの名無しさん [2022/12/27(火) 22:18:07.71 ID:xkGd3ITG0.net]
自作クラスでendlなどのマニピュレータをオーバーライドするにはstd名前空間に入れるしかないじゃない?

1007 名前:デフォルトの名無しさん mailto:sage [2022/12/27(火) 22:19:58.45 ID:Kk7zAeAV0.net]
つうかstdが「標準である」と言う設計上前方宣言を禁止したから仕様上未定義動作となっただけの話で
危険だから前方宣言すべきじゃないって話じゃないと思うよ
結果的にコンパイラ側がそれを逆手にとって最適化とか推し進めた形になったとしてもね

前方宣言許さない仕様のライブラリって言うのは危険だからじゃなく
勝手に拡張すること許さないと決めたライブラリであるというだけの話で

1008 名前:デフォルトの名無しさん [2022/12/27(火) 22:24:30.48 ID:Q5qxYeje0.net]
>>977
ストリームはホント腹立つよな。
ぶっ飛ばしたくなってきた。
30年くらい怒りが収まらん。



1009 名前:天災 mailto:sage [2022/12/27(火) 22:55:56.41 ID:QO3hLMTW0.net]
随分と古参なんですね

1010 名前:デフォルトの名無しさん (ワッチョイ 95da-Axul) mailto:sage [2022/12/27(火) 23:15:16.94 ID:AOBUz6/T0.net]
>>977
バカが設計したからなアレ

1011 名前:デフォルトの名無しさん (ワッチョイ 9fea-ij7E) mailto:sage [2022/12/27(火) 23:26:06.87 ID:VvvSD8wK0.net]
ostream と istream の別の建てつけなので、ファイルポインタもこの二つのクラスで別なんだろうと思っていたら、土壇場で、実はファイルポインタは共有していましたぁ
とか勘弁してほしいと痛切におもいましたねえ

1012 名前:デフォルトの名無しさん (ブーイモ MM21-5fcg) mailto:sage [2022/12/27(火) 23:28:14.07 ID:2qRZfHzrM.net]
>>968
これ面白いな

1013 名前:天災 ◆41t0I.PYBW0z (ワッチョイ b101-jXNG) mailto:sage [2022/12/28(水) 00:50:07.21 ID:YU/L8pIp0.net]
無名namespaceで囲ってるとこが変態

1014 名前:デフォルトの名無しさん mailto:sage [2022/12/28(水) 08:09:55.49 ID:jVoOqLVQM.net]
>>978
そういうのは「改造c++」とでも言うべきもので、個々の具体的な実装を挙げて話すべき話題。
具体的な実装の無い「改造c++」なんて「オレ言語」でしかないから、話題にしても相手にするヤツは居ないよ。興味無い。

1015 名前:デフォルトの名無しさん [2022/12/28(水) 16:02:37.97 ID:wx2BQ76Ga.net]
>>981
まさかプロトタイプが30年後も使い続けてるとは思わなかったんだよ

1016 名前:はちみつ餃子 mailto:sage [2022/12/29(木) 22:47:04.14 ID:J2+EgPHK0.net]
>>974
「わからない」という状態が最大のリスクだ。 精査して事情を把握してからやる分にはいいよ。
だけど少なくとも私はいちいちライブラリの細かいことなんて調べたくないし、
細部の事情まで読み解ける自信はないから製作者の意図 (仕様として明示されている範囲) を超える
ような使い方をあえてすることはないだろうという話。 要するに割に合わない。
しなくていいことはせずに済ませられたらそのほうがいいだろ。

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

そりゃあ他に打てる手がなければ割に合わなくてもやらざるを得ないことだってあるだろうけどさぁ。

1017 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 07:37:06.73 ID:zn+Ud9N00.net]
本当に余計なお世話だけど、はちみつさんのような実力がある人は
むしろライブラリやコンパイラのソースを読んだ方がいいよ

1018 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 10:24:58.07 ID:O3GOnLRpa.net]
>>988
おまえは仕事した方がいい



1019 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 11:11:02.33 ID:l10vdbnHr.net]
火の玉ストレートやめたれ

1020 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 13:31:38.92 ID:p0azBXIn0.net]
std名前空間への勝手要素追加は未定義動作と書かれているのに
std名前空間内のクラスへのメンバ追加についてはなんで言及が無いのやろうな……
名前空間もクラスもPGの責任分担範囲の区切りみたいなもんで、
第三者に後から勝手に弄られたら設計したPGが困るのは同じだと思うのだけど、

1021 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 13:33:22.64 ID:DPUEZfMS0.net]
後々の事考えて設計出来ない奴はPGに向いてない

1022 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 14:02:10.34 ID:p0azBXIn0.net]
自分はできるPGですと自己申告する>>992……
その自身がどこから来るのかは誰も知らない……

1023 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 14:11:57.62 ID:DPUEZfMS0.net]
そんなこと思ってない
いままで見てきた汚いソース書いている連中の総意点を述べているだけのこと

1024 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 14:28:22.93 ID:p0azBXIn0.net]
つまりstd名前空間のソースは汚いから
予防のためにstd名前空間への勝手要素追加は未定義動作とするのがstdを設計したPGの立場では当然だと、

1025 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 14:33:46.74 ID:DPUEZfMS0.net]
バカなの?
なんのための名前空間なのかよく考えろよ
設計を区分するためだろ
そこにお前みたいなワケワケな奴が落書きしたらめちゃくちゃになるだろ

1026 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 15:06:36.37 ID:uGEPy//I0.net]
stackoverflow 辺りで
皆さんの御意見を聞いて来いよw

1027 名前:デフォルトの名無しさん [2022/12/30(金) 17:36:57.79 ID:oiKCiiXa0.net]
後のこと考えて設計するよりも先に手が動くような人じゃないとプログラミングは上達しないよ

1028 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 17:55:02.39 ID:12nE7t5Ga.net]
>>998
もうお前の尻拭いするの嫌だよ
たのむから手動かす前に3分くらい考えてくれ



1029 名前:デフォルトの名無しさん mailto:sage [2022/12/30(金) 18:20:10.37 ID:2kXrfTwwd.net]
昔はさ、ウォーターフォールといって
完璧な設計ができるまでコードに手を出すな
設計が決まったら黙ってそれに従うコードを書け
なんてのがあったけど
前例のないものの完璧な設計なんてほいっとできるのか
現場からのフィードバックを無視なんてできるのか
って反省から今時の方法論ができているわけで

ただし、それを悪用するだけの寄生虫を擁護はしない

1030 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 60日 3時間 50分 35秒

1031 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<306KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef