C++相談室 part148

■ このスレッドは過去ログ倉庫に格納されています
2020/01/31(金) 20:54:06.26ID:Nt0XFA2s
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】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/ (日本語)
2020/01/31(金) 21:35:23.06ID:yrj+fbAX
前スレ999だけと循環してないよ
仮想アドレス使ったら必ずページフォルトするわけじゃない
MMUの仕組みわかってる?
2020/01/31(金) 21:47:35.65ID:aVH6lH01
こらこら、前スレ999は俺だぞ
なりすましすんなカス
8デフォルトの名無しさん
垢版 |
2020/01/31(金) 21:48:10.26ID:88e+X9K2
https://ja.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
これ使うとだいぶ早くなるらしいですよ。
9デフォルトの名無しさん
垢版 |
2020/01/31(金) 21:48:37.69ID:88e+X9K2
じゃあ俺も前スレ999です。
2020/01/31(金) 21:59:36.62ID:yrj+fbAX
>>7
999へのレスって意味ね
文脈で理解してほしいところだが
で循環論法でないことわかった?
2020/01/31(金) 22:13:11.58ID:HzrC4w9c
環境を限定しないならこれ以上続けても無駄
全ての環境を知ってるヤツでない限り
12デフォルトの名無しさん
垢版 |
2020/01/31(金) 22:16:13.72ID:88e+X9K2
すべての環境を知っている。
2020/01/31(金) 22:50:18.80ID:aVH6lH01
>>10
全然わかんねえ! 何言ってんの?
14デフォルトの名無しさん
垢版 |
2020/01/31(金) 22:56:57.70ID:88e+X9K2
>>13
俺はわかった。
2020/01/31(金) 22:58:17.72ID:yrj+fbAX
>>13
どこが循環してるか言ってみなよ
2020/01/31(金) 23:38:50.35ID:r/XM8LG1
struct AutoDeleteFile {
const WCHAR *m_file;
AutoDeleteFile(const WCHAR *file) : m_file(file) { }
~AutoDeleteFile()
{ DeleteFileW(m_file); }
};
2020/01/31(金) 23:42:29.75ID:wt6xD5wE
それではおじいちゃんのaddress談義
続きをどうぞ
2020/01/31(金) 23:56:13.21ID:v4E0eL1J
ともかく最初に思ってることがあって
要は荒らしてやろうと
今回は結構うまくいった方かな
この前は
「std::deque には begin() end() clear() があるのに
 std::queue と std::stack にそれらが無いのは何故?
 有ったほうが便利なのでは?」
って質問で大分いい感じにスレを流した
そら、有ったほうが便利に違いないし、無いことに合理的な理由など無いわけだから荒れる
そういう、荒れそうなネタ考えるのに毎回結構頭使う
ただ、ちょっと前の goto のやつ、あれはダメ
初心者がワーワー騒いでるだけで、ほとんどのベテラン連中は静観してたと思う
俺の狙いはそれじゃない
あと、妹大好きです
2020/01/31(金) 23:56:45.81ID:v4E0eL1J
まぁ、もうすぐID変わるからね
2020/02/01(土) 00:02:42.91ID:9soosqUN
ネタばらし興醒めだな
C++erそうゆうとこだぞ
21デフォルトの名無しさん
垢版 |
2020/02/01(土) 00:03:19.42ID:K9hiSYW1
なんだと!
2020/02/01(土) 00:05:22.38ID:l1s2tvQy
何か難しそうなC++コード、ここに貼ってくれよ。
2020/02/01(土) 00:37:10.49ID:pUJoLXPw
はいはい狙った通りになった宣言ねw
2020/02/01(土) 00:41:09.21ID:P+PaZ5tD
全然荒れずにコテンパンにのされてたじゃん
25デフォルトの名無しさん
垢版 |
2020/02/01(土) 00:44:51.53ID:K9hiSYW1
でも、もともと主張がおかしかったから、釣りだったのはホントじゃないの。
2020/02/01(土) 00:49:11.46ID:pUJoLXPw
釣りっていうかただの構ってちゃんな。何か深い考えがあるというわけでもないし。
27デフォルトの名無しさん
垢版 |
2020/02/01(土) 00:49:56.15ID:K9hiSYW1
釣りじゃなかったら相当痛い人だし。
釣りならちょっと痛い人で済むよ。
28デフォルトの名無しさん
垢版 |
2020/02/01(土) 00:52:13.74ID:K9hiSYW1
ところで僕は自分の職業の板ってまったく見ないんだけど。
ここは職業プログラマが多いの?
29デフォルトの名無しさん
垢版 |
2020/02/01(土) 00:53:02.37ID:K9hiSYW1
なんで見ないかというと得るものが全くないから。
2020/02/01(土) 01:09:30.45ID:50MDw/OE
goto ふとん;
2020/02/01(土) 02:05:11.46ID:efnE+DyP
わしも見ない
あそこは仕事のグチを書きこむとこやん
こっちは言語仕様のグチを書きこむとこや
2020/02/01(土) 02:37:59.97ID:tav2AwxI
break break;
bresk break break;
break continue;

こんな書き方ができたら嬉しい?
2020/02/01(土) 09:17:35.95ID:9lmFlpKY
export importよりひどいw
2020/02/01(土) 10:06:12.21ID:+WgC03YT
途中friskみたいのも混じってるしな
2020/02/01(土) 10:09:42.57ID:fiLTG5Nb
break 3;
36デフォルトの名無しさん
垢版 |
2020/02/01(土) 10:19:22.01ID:Bc9LjLbW
ネアンデルタール人はホモサピエンスの基底クラスであったか。

ネアンデルタール人のDNA、アフリカの現生人類からも検出 新研究
https://www.cnn.co.jp/fringe/35148770.html
2020.01.31 Fri posted at 13:15 JST
2020/02/01(土) 11:58:10.08ID:YFAnTUnh
多重ループを抜ける方法

ループに名前は名前を考えるのがイヤ
break [数字] は数えるのがイヤ
関数を分けてreturn はもっとイヤ
変数を使ってbreakで抜けるのは論外
でもgotoはなんとなくイヤ

全ての要望に答えたのが >>32
2020/02/01(土) 12:17:12.69ID:pUJoLXPw
バカの要望を聞いてさらにロクでもない方向に行ってしまうっていう
わかりやすい例を提供してくれてありがとう。
2020/02/01(土) 12:30:47.94ID:+WgC03YT
多重ループにする設計が悪い
2020/02/01(土) 12:31:58.09ID:YFAnTUnh
ん?
皮肉のつもりで書いたんだけど
真面目な書き込みととらえられるとは思わなかった
2020/02/01(土) 12:34:39.38ID:YFAnTUnh
主に>>39みたいなアホに対する皮肉
2020/02/01(土) 12:40:18.47ID:+WgC03YT
は?オメェだろアホ
2020/02/01(土) 12:41:53.34ID:pUJoLXPw
あえて説明してるところで恥ずかしいことになってる奴w
2020/02/01(土) 13:00:03.90ID:TULylXcw
>>37
おれはおもしろいアイデアと思う
他に考えるとしたら
やはり名前があった方が変更に強いと思うのでその線でいくと
大抵ループにはイテレータやカウンタが紐づいてるから
それを使って
for (auto& x : なんとか) {
 for (auto& y : なんとか) {
  .break x;
 }
}
とかどうだろ?
for以外で使えないしforでも宣言空だとだめだけど
頻繁に使うわけじゃないだろうから妥協できるかなと
2020/02/01(土) 13:02:13.36ID:YFAnTUnh
BASIC
2020/02/01(土) 13:03:32.19ID:+WgC03YT
なにそのセンスの欠片もない気持ち悪いコード
47デフォルトの名無しさん
垢版 |
2020/02/01(土) 13:19:23.65ID:fiLTG5Nb
while(){} や do{}while(); で使えないので却下
2020/02/01(土) 15:04:44.31ID:7G0Z2VlM
for(int x = 0; i < ... )
{
 int y = 0;
LOOP:
 a[x][y]...
 ++y;
 if(...){ break; /*多重ループ脱出*/ }
 goto LOOP;
}
2020/02/01(土) 16:42:25.84ID:hd+by06W
>>37
何個の break を書くのか、と break の後に書く数字は? で
結局のところ同じように数えなきゃならないでしょ。
2020/02/01(土) 17:21:08.52ID:9BMLg08w
>>32はcontinueを混ぜられるのが面白いけど、やるならこうだな。
break n;
continue n;
2020/02/01(土) 17:34:30.73ID:pUJoLXPw
こういうしょーもないシンタックスの話って馬鹿でもしやすいのが盛り上がる理由なんだろうな。
2020/02/01(土) 17:48:52.85ID:YFAnTUnh
特定の言語のスレ
シンタックスを語らずに何を語る?
2020/02/01(土) 17:51:10.61ID:YFAnTUnh
>>50
じゃあそれで
2020/02/01(土) 17:55:08.95ID:YFAnTUnh
break 9;
を数えたく無いとか言ってたヤツがいたけど
そういう時は素直にgotoを使えば良い
2020/02/01(土) 17:55:47.26ID:rsRLlL5x
てか継続が欲しい
2020/02/01(土) 18:08:11.40ID:6nnXKMBq
>>55
C++ ではオブジェクトの寿命の管理と辻褄を合わせなきゃならないんだから full continuation は無理だぞ。
2020/02/01(土) 18:09:32.76ID:YFAnTUnh
継続とは?
2020/02/01(土) 18:12:05.70ID:YFAnTUnh
setjmp のことか
59デフォルトの名無しさん
垢版 |
2020/02/01(土) 18:12:34.25ID:Bc9LjLbW
ループに名前を付け、その名前で離脱や継続を行う。

ループA {
60デフォルトの名無しさん
垢版 |
2020/02/01(土) 18:16:20.88ID:Bc9LjLbW
途中で送信してしまった。面倒だから書き直さないが、
breakやcontinueはキーワードが紛らわしいのでPerlのlastとnextを拝借する。
last ループA; とか next ループA; みたいな感じ。
2020/02/01(土) 18:16:45.14ID:YFAnTUnh
わざわざ名前を付けるならgotoで良いんでは?
2020/02/01(土) 18:18:49.32ID:vKrtBnhX
gcc5ぐらいから一気にgcc10にしたらエラー表示とかデフォルトの警告とか色々変わっててわろた
63デフォルトの名無しさん
垢版 |
2020/02/01(土) 18:19:46.95ID:Bc9LjLbW
>>61
まあね。だけどgotoはフリーダムすぎて良くないでしょ。
2020/02/01(土) 18:34:11.57ID:YFAnTUnh
いや全然そう思わない
gotoで何か不都合がある?
2020/02/01(土) 18:52:41.69ID:pUJoLXPw
>>52
コンパイラ毎の最適化における癖とか、例外の実装についての差異なんかも語ってもいいんだぞ。
2020/02/01(土) 18:56:33.52ID:6nnXKMBq
>>63
goto は自由すぎるけども、ループを何段階も一気に抜けたいとかいう状況がすでにだいぶん自由だと思うぞ。
そういう状況が生まれたらもう駄目なんだよ。
ごちゃごちゃとした使い分けを考えるよりおとなしく goto した方が「そこが悪い」ってのが目立って良い。
2020/02/01(土) 19:01:47.00ID:YFAnTUnh
一番使いたいのは2段break
行列や画像など2次元構造では当たり前のように2重ループになる

2重ループを抜けたい状況は設計が悪い
と思う感覚が全く理解できない
2020/02/01(土) 19:01:49.68ID:TULylXcw
構造化を壊さないことを保証した仕組みで脱出したいってことでしょ
2020/02/01(土) 19:04:12.92ID:YFAnTUnh
2次元構造の2個のループを抜ける為に
非常に関連のある2個のループを別関数に分ける

この方が設計が悪い
というのがおれの感覚
2020/02/01(土) 19:07:14.52ID:JWECbGc7
>>67
gotoは悪、多重ループは悪、みたいなどこかで聞いたルールを杓子定規に常に遵守すべき絶対ルールのように考える人が少なからずいるんだろうね。声が大きいだけかもしれないけど。
2020/02/01(土) 19:09:12.42ID:PjJtYhAX
gotoの利用にコンパイラの補佐があればよかったのに
2020/02/01(土) 19:10:50.63ID:PjJtYhAX
中カッコ、変数の有効範囲含め
スコープ内に飛び込むジャンプを一切禁止、前方のみと決めれば
なかなか直観的でわかりやすいキーワード
だとおもうのに
2020/02/01(土) 19:19:24.65ID:YFAnTUnh
一切禁止とか言うから
それが絶対だと初心者が思って思考停止する
この典型がgoto

使った方が良い時は使う
再帰も生ポもグローバル変数も多重継承も多重ループも
2020/02/01(土) 19:25:00.72ID:6nnXKMBq
>>67
ここでワイが「悪い」って言ってるのは使うなとか別の方法がとれるとかいうほどの強い意味じゃなくてさ、
気を付けなきゃならないポイントとして目立ってもらわなきゃ困るって程度の意味。

だけど、日常的にそこら中でそういうポイントがあるのならやっぱり悪いとは思うけど……。
2020/02/01(土) 19:26:16.45ID:j/qpVk5O
二重ループの脱出は
[&]{
for(){
 for(){
  return;
 }
}}();
で結論出たはずだが
2020/02/01(土) 19:29:49.61ID:YFAnTUnh
これはひどい
2020/02/01(土) 19:44:49.47ID:PjJtYhAX
それオーバーヘッドかからんの?
2020/02/01(土) 19:47:58.86ID:j/qpVk5O
関数オブジェクトはまともなコンパイラならインライン展開される
2020/02/01(土) 19:48:45.53ID:7G0Z2VlM
贅沢言いすぎだね
素のPascalなんてreturnすら無いからね
もはやどうやってプログラムを書いたらいいか分からないレベル
2020/02/01(土) 19:53:54.21ID:7G0Z2VlM
Pascalは完璧な構造化言語を目指したから
入口と出口を常に一つずつにするというポリシーがあって
それゆえreturnが無いんだよね
returnがあると出口があちこちに散らばるので
構造化じゃない、汚い、という考え

なお、breakは有るもよう
2020/02/01(土) 19:58:58.33ID:+WgC03YT
[&]{
try{
for(){
 for(){
  throw 0;
 }
}catch(...){}
}}();
2020/02/01(土) 20:02:08.79ID:6nnXKMBq
抽象的なレベルで考えたら break は
「残りの文が if 式で囲まれていると見なして暗黙のフラグを設定する (そのフラグは暗黙にループの終了条件でもある)」
とも考えられるから、構文糖だといえば構造化は壊れていない。

だけどなぁ、プログラムは人が書くものだし、人にとってどう見えるかも大事なんだよな。
そこらへんは見方によってどうとでも理屈を付けられてしまう。
2020/02/01(土) 20:04:46.46ID:+WgC03YT
[&]{
try{
for(){
 for(){
  throw 2;
 }
}
}catch(int d)
{printf("%d段階ジャンプしたお¥n",d);}
}();
2020/02/01(土) 20:10:07.66ID:tav2AwxI
>>82
break 2 も gotoでループを抜けるのも同じ
2020/02/01(土) 20:24:42.41ID:iBA7Xa3w
>>83
それは最悪
throw 3; って書いてもチェックされないし
2020/02/01(土) 20:47:35.89ID:BhmlSyWc
>>67
3重ループは? 4重ループは? なんで2だけなの?
2020/02/01(土) 20:52:34.51ID:TULylXcw
たまに国語力が心配になるやつがいるよな
2020/02/01(土) 20:53:59.21ID:+WgC03YT
[&]{
try{
for(){
 for(){
  throw "リレミト";
 }
}
}catch(const char*s)
{printf("%sの呪文を唱えた¥n",s);}
}();
2020/02/01(土) 20:56:56.11ID:BhmlSyWc
>>87
答えられないならレスしないで下さい
ウザいだけです
2020/02/01(土) 21:07:19.54ID:vKrtBnhX
for () {
for () {
goto done;
}
}
done:

どう考えてもこちらのほうが綺麗
2020/02/01(土) 21:09:23.19ID:BhmlSyWc
>>90
だな
必要になったことを変に偽装する悪癖を治すべき病人多すぎ
2020/02/01(土) 21:14:53.51ID:6nnXKMBq
ほんまになぁ。
そんな簡単なことをラベル付き break だのなんだのって面倒なだけとしか思えぬ。
もう構造化は破綻してるんだからおとなしく goto しとけよな!
2020/02/01(土) 21:19:44.00ID:dP/tym/A
>>89
日本語が不得意みたいなので英語で説明しますね
Double loop frequently appears to treat a two dimension structure such as matrix or image data,
so "break from double loop"is used by programmers related mathematical or visual product.
>>67 states that is good reason and s not always bad design.
2020/02/01(土) 21:22:30.66ID:BhmlSyWc
>>93
意味わかんね
なんでそんなことするの?
アホだから? それともバカだから?
2020/02/01(土) 21:25:42.92ID:dP/tym/A
>>94
It's purely kindness for non-Japanese speaker. Did you not like it?
2020/02/01(土) 21:26:06.76ID:tav2AwxI
>>92
構造化的には
breakも途中でreturnもgotoでループを抜けるのも同じだよ
2020/02/01(土) 21:26:27.45ID:BhmlSyWc
Пожалуйста, говорите по-японски.
2020/02/01(土) 21:29:34.25ID:dP/tym/A
なんだロシア人か
Я не понимаю >>67, потому что я не понимаю японский?
2020/02/01(土) 21:32:56.91ID:tav2AwxI
2020/02/01(土) 21:34:56.10ID:6nnXKMBq
>>96
同じだからそれ以上に新しい文法を持ち込んでもそれほど綺麗にならんって! ということを言いたい。
2020/02/01(土) 21:36:54.68ID:BhmlSyWc
>>98
Mimi ni Kijapani.
2020/02/01(土) 21:38:38.94ID:TULylXcw
>>96
gotoは正しく使えばという但し書きがつくでしょ
そこをなんとかしたいという話だと思ってる
それが論点だとするとgoto使えというのは解にならない
2020/02/01(土) 21:40:19.97ID:BhmlSyWc
>>96
ほんこれ
2020/02/01(土) 21:42:54.84ID:tav2AwxI
>>102
正しく使う前提なのは当たり前
なんでgotoだと正しく使わない前提になるのか不思議
2020/02/01(土) 21:43:54.40ID:BhmlSyWc
>>104
ほんこれ
2020/02/01(土) 21:48:36.93ID:7G0Z2VlM
危ない操作はできないようにしようってのが言語の進化だからな
それ無視して、安全に使うのが前提とか、正しく使うのが前提とか、それ言っちゃね
なんかおかしな方向へ行くよね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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