C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part146
https://mevius.5ch.net/test/read.cgi/tech/1573094136/
このスレもよろしくね。
【初心者歓迎】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/ (日本語)
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
↑え?だってお前、普通ダイナミックリンクするだろ?
"ダイナミックリンク"す・れ・ば、ファイルサイズ**増えないです**
C++相談室 part147
レス数が1000を超えています。これ以上書き込みはできません。
2019/12/18(水) 17:56:53.03ID:uFDqtnkl
2019/12/18(水) 17:59:08.02ID:3w1BRoQv
なんやこのキモい天ぷら
2019/12/18(水) 23:12:34.99ID:EE58WPKP
>>1
死ね
死ね
2019/12/19(木) 00:03:12.14ID:zX6m0cqE
藻前らにクリスマスプレゼント貼る、
ttps://cpprefjp.github.io/international-standard.html
もっともっと争いにはげむと良い
ttps://cpprefjp.github.io/international-standard.html
もっともっと争いにはげむと良い
2019/12/19(木) 00:18:27.33ID:usOsPCZf
ワロタ
6蟻人間 ◆T6xkBnTXz7B0
2019/12/19(木) 00:23:05.50ID:r6T/W91o 1001レス書けたのはなんで? 5chのバグ?
2019/12/19(木) 01:07:12.70ID:5BDnhVE2
このままいくとそのうち C++20 → C++40 → C++80 ...
などとなり、そのうち C++98 とどっちが古いかわからなくなる
時がやってくるわけだが、その点をちゃんと考えているのか
標準化委員会に問い詰めたい
などとなり、そのうち C++98 とどっちが古いかわからなくなる
時がやってくるわけだが、その点をちゃんと考えているのか
標準化委員会に問い詰めたい
2019/12/19(木) 06:07:09.87ID:+fuR4pm1
こんなだからC++敬遠されるんだよ
組み込みエンジニアとしては嘆かわしい限り
組み込みエンジニアとしては嘆かわしい限り
2019/12/19(木) 06:48:20.41ID:rFEDNRgX
10デフォルトの名無しさん
2019/12/19(木) 13:50:56.27ID:e6wF5QYj は!const付けると書き込めないから
コンパイラが最適化してくれるんじゃないだろか!!
コンパイラが最適化してくれるんじゃないだろか!!
2019/12/19(木) 14:53:15.34ID:CIL8E3K9
俺は悪い奴だからconst_castしてしまうぜ
12デフォルトの名無しさん
2019/12/19(木) 15:58:03.38ID:e6wF5QYj 一つのクラスの単体テストって何個くらい作りますか?
2019/12/19(木) 16:01:43.72ID:hJvSxET/
1000個
14デフォルトの名無しさん
2019/12/19(木) 16:03:30.00ID:e6wF5QYj 100個くらいじゃ少なすぎるんだ。
2019/12/19(木) 23:10:04.38ID:Y/zGUZTk
何個ぐらいって一般化できると思うか?
16デフォルトの名無しさん
2019/12/20(金) 08:56:23.47ID:jk7l00+3 メンバ*10とか指標が出てくるかなあって。
2019/12/20(金) 11:48:52.93ID:N4kH8rcM
数じゃなくてカバレッジで考えるんだよ
18デフォルトの名無しさん
2019/12/20(金) 12:49:40.01ID:jk7l00+3 そうですか。
でも測定ツールが高そう。
でも測定ツールが高そう。
2019/12/20(金) 20:29:58.76ID:jjn2sxGn
メンバ・メイ・コボルスミ11
2019/12/20(金) 23:43:02.47ID:i1Ytyme8
■ windows.hのmin/maxマクロ回避策4パターン
ttps://yohhoy.h a t e n a d i a r y.jp/entry/20120115/p1
↑
こんな具合に記号定数マクロ展開を抑止する方法って無いですかね…
ttps://yohhoy.h a t e n a d i a r y.jp/entry/20120115/p1
↑
こんな具合に記号定数マクロ展開を抑止する方法って無いですかね…
2019/12/20(金) 23:47:16.50ID:i1Ytyme8
単に展開を抑止するだけなら#undefで良いんですが
#include <Windows.h>
namespace w32w {
const w32wMOVEFILE_REPLACE_EXISTING = MOVEFILE_REPLACE_EXISTING;
#undef MOVEFILE_REPLACE_EXISTING;
const MOVEFILE_REPLACE_EXISTING = w32wMOVEFILE_REPLACE_EXISTING;
/*...*/
} // namespace w2w
みたいなのをもっと簡単にやれないものか…
#include <Windows.h>
namespace w32w {
const w32wMOVEFILE_REPLACE_EXISTING = MOVEFILE_REPLACE_EXISTING;
#undef MOVEFILE_REPLACE_EXISTING;
const MOVEFILE_REPLACE_EXISTING = w32wMOVEFILE_REPLACE_EXISTING;
/*...*/
} // namespace w2w
みたいなのをもっと簡単にやれないものか…
2019/12/21(土) 00:06:23.25ID:gJjydDaN
ちょっと何言ってるかわかりませんね
FOOという定義済みマクロとnamespace barがあるとして、
const int bar::FOO
を定義済みマクロFOOの値で初期化したい
とゆーことです\(^o^)/
FOOという定義済みマクロとnamespace barがあるとして、
const int bar::FOO
を定義済みマクロFOOの値で初期化したい
とゆーことです\(^o^)/
2019/12/21(土) 00:55:27.57ID:FSMLpyuy
簡単にできたとして一個一個手で書くつもりか?
2019/12/21(土) 07:55:32.45ID:gJjydDaN
2019/12/21(土) 08:00:42.78ID:/C2Zxfa9
windows.hのsmallに引っ掛かって30分悩んだ
2019/12/21(土) 16:01:06.10ID:41M/xbUn
2019/12/21(土) 16:09:49.97ID:FSMLpyuy
>>24
頃せる?
できるって意味か?
手でやるのは馬鹿げてる作業だと思うぞ
でツールでやるなら別に簡単に書ける必要もなし
正直そんなとこがんばってもと言う気はするけどね
小文字のマクロだけは滅んでほしい
頃せる?
できるって意味か?
手でやるのは馬鹿げてる作業だと思うぞ
でツールでやるなら別に簡単に書ける必要もなし
正直そんなとこがんばってもと言う気はするけどね
小文字のマクロだけは滅んでほしい
28デフォルトの名無しさん
2019/12/21(土) 21:55:00.70ID:7S/5Xmi8 背中に手が届く痒いソフトないかな。
2019/12/22(日) 09:20:26.05ID:PdpWotrS
お前が自作して配布するんだよぉ
2019/12/22(日) 14:56:43.90ID:qJChSMJU
窓の手。
31デフォルトの名無しさん
2019/12/23(月) 14:58:26.67ID:sEnpgkKc namespace w32w {
#include <Windows.h>
} // namespace w2w
const MOVEFILE_REPLACE_EXISTING = w32w::MOVEFILE_REPLACE_EXISTING;
#include <Windows.h>
} // namespace w2w
const MOVEFILE_REPLACE_EXISTING = w32w::MOVEFILE_REPLACE_EXISTING;
32デフォルトの名無しさん
2019/12/23(月) 16:57:11.44ID:f3nq+WHN constはスレッドセーフじゃないとダメなんだな。
2019/12/23(月) 18:18:55.23
痒いソフト
2019/12/23(月) 20:10:00.49ID:X1aPCWn8
>>31
マクロだったらどうするんだ
マクロだったらどうするんだ
35デフォルトの名無しさん
2019/12/23(月) 20:11:03.19ID:f3nq+WHN キャッシュやメモ化してるだけのメンバはconst付けたいところだけど、ミューテックス使うとマイクロ秒の単位で時間がかかるとなると、付けないほうが良いのかな。
2019/12/23(月) 20:11:47.02ID:yUC4LEa+
というかマクロが問題なわけだが
37デフォルトの名無しさん
2019/12/23(月) 20:35:01.08ID:f3nq+WHN そういえばマクロって使う必要なくなったよね。
なんでだろ。
なんでだろ。
2019/12/23(月) 20:39:32.58ID:z7fGiGkq
ヘッダとかでたくさん使われてる
39デフォルトの名無しさん
2019/12/23(月) 20:46:52.21ID:f3nq+WHN そういえばBoostがマクロまみれだった。
2019/12/23(月) 21:01:02.33ID:wextYSDX
c++11以降の目的の一つがマクロつぶしだからな。
2019/12/23(月) 21:24:59.81ID:kZpvALBe
>>39
boostはまだ言語仕様で標準化されていない機能を標準化された機能で実現しようとしている部分が多いから、自然とマクロでどうにかしなきゃならない箇所が多いんだろう
boostはまだ言語仕様で標準化されていない機能を標準化された機能で実現しようとしている部分が多いから、自然とマクロでどうにかしなきゃならない箇所が多いんだろう
2019/12/24(火) 03:50:11.29ID:1TojzXfm
>>40
捨てるためにゴテゴテとよけいな機能をつけなくても、
スコープ内だけで有効なローカルマクロ的なものを導入すればそれで良かったような気がしなくもないが、
#includeが絡むとやっぱだめかなw
捨てるためにゴテゴテとよけいな機能をつけなくても、
スコープ内だけで有効なローカルマクロ的なものを導入すればそれで良かったような気がしなくもないが、
#includeが絡むとやっぱだめかなw
2019/12/24(火) 05:03:51.44ID:ZHC84Kgk
今さらEmscripten使ってwasm化してみたけどそこそこ使えそう
2019/12/24(火) 06:19:47.03ID:Dtupe+iE
いまさらかよ!
2019/12/24(火) 07:00:24.75ID:Zba7/+kU
マクロというかプリプロセスの一部を言語規格内に取り込まないと無理なんだろ
2019/12/24(火) 07:02:33.85ID:cUFUrp77
C++が進化してもマクロは無くならない
2019/12/24(火) 14:34:27.28
せめてなくそうとはしろ
2019/12/24(火) 15:28:29.91ID:mUUuTbFd
マクロは正義
今日もいくつも生やした
今日もいくつも生やした
2019/12/24(火) 15:40:51.62
マクロについて、江添はなんて言ってる?
2019/12/24(火) 15:46:02.23ID:VueyJ5PW
自分で読めば
51デフォルトの名無しさん
2019/12/24(火) 16:14:08.15ID:qpZ25SUC 逆にマクロが進化する可能性は。
2019/12/24(火) 16:15:20.38ID:Uve8u0PJ
それはやだねえ
2019/12/24(火) 17:12:20.17ID:iCGyxCxX
マクロの進化を考えてみた
マクロは型に対応していないのが問題なので、まず型を導入する
しかし完全に常に型を必要としてしまうと普通の関数や変数と違いがなくなるので
コンパイル時に決定できる場合に限り、ジェネリックに何でも受けいれるようにする
・・あ、そうだ同じ名前で複数の宣言を可にして、それのうち一つでもコンパイルエラーで
ないなら他は無視して、コンパイルできるもののみ有効とかにすると色々つかえるかもしれないな
たとえばある構造体に特定のメンバがあるかどうかでコンパイル時に処理を分岐するとか
マクロは型に対応していないのが問題なので、まず型を導入する
しかし完全に常に型を必要としてしまうと普通の関数や変数と違いがなくなるので
コンパイル時に決定できる場合に限り、ジェネリックに何でも受けいれるようにする
・・あ、そうだ同じ名前で複数の宣言を可にして、それのうち一つでもコンパイルエラーで
ないなら他は無視して、コンパイルできるもののみ有効とかにすると色々つかえるかもしれないな
たとえばある構造体に特定のメンバがあるかどうかでコンパイル時に処理を分岐するとか
2019/12/24(火) 17:42:03.17ID:OCcxjFNd
テンプレートですか?
2019/12/24(火) 17:44:14.13ID:vOfEkls8
マクロと言えばマクロアセンブラ
C/C++のマクロより高機能なので見てみると良い
C/C++のマクロより高機能なので見てみると良い
2019/12/24(火) 18:10:27.35ID:Uve8u0PJ
MASMのマクロと比べるべきはテンプレートだろ
2019/12/24(火) 18:17:05.63
C++コードをプリプロセスする専用の新規言語を発明すれば!
58デフォルトの名無しさん
2019/12/24(火) 18:31:34.23ID:IBUEMR4t >>53
それどこのtemplate
それどこのtemplate
59デフォルトの名無しさん
2019/12/24(火) 18:33:07.30ID:IBUEMR4t >>57
それどこのQt
それどこのQt
2019/12/24(火) 18:44:21.54ID:Uve8u0PJ
>>57
それはcfrontといって世界最古のC++だ
それはcfrontといって世界最古のC++だ
2019/12/24(火) 19:43:07.15ID:cUFUrp77
>>56
テンプレートとは違う
テンプレートとは違う
2019/12/24(火) 19:53:54.69ID:SdQqxQDy
>>60
そうか、C++11 or later を食らうをプリプロセッサーがウけるのか…
そうか、C++11 or later を食らうをプリプロセッサーがウけるのか…
2019/12/24(火) 20:06:18.60ID:ed+tLMlR
rustのようなマッチングでやるとか
他にはASTのAPI提供するとか
あとはlispみたいにやるとか
c/c++よりまともなやり方はあるけど正直どれもややこしいし上に
めんどくさいんだよね
他にはASTのAPI提供するとか
あとはlispみたいにやるとか
c/c++よりまともなやり方はあるけど正直どれもややこしいし上に
めんどくさいんだよね
2019/12/24(火) 20:10:21.58ID:ed+tLMlR
メタプログラミングにおいてあえてチューリング不完全にしちゃうってのは
悪くないデザインチョイスだと思うんだよね
すがすがしい
悪くないデザインチョイスだと思うんだよね
すがすがしい
2019/12/24(火) 21:38:38.95ID:4c9jV6+e
てかその手の糞みたいな発想はlispでやりつくされてる。
バカが知らないだけで。
バカが知らないだけで。
2019/12/24(火) 22:07:05.33ID:E1PNjCWX
includeでテキストファイルを文字列literalとして読み込んだり、CSVファイルを行毎に指定の変換で読み込んだりしたい
外部プログラムで変換するのがめんどい
外部プログラムで変換するのがめんどい
2019/12/24(火) 22:10:34.81ID:UL4fNRBx
なんとかいうプログラミングの偉いひとがいってたんだけど
「凡人が斬新な発想と思っている事の5割は既に誰かがやっており
残り5割は斬新ではなくそもそも機能しない」らしい
「凡人が斬新な発想と思っている事の5割は既に誰かがやっており
残り5割は斬新ではなくそもそも機能しない」らしい
2019/12/24(火) 22:34:55.01
よい子のみんな!のAAにもあるとおり
70デフォルトの名無しさん
2019/12/25(水) 12:25:41.21ID:2ymVLaRc 最強のC++はC++の道から外れないこと
2019/12/25(水) 13:27:29.92
C++のタオとは?
72デフォルトの名無しさん
2019/12/25(水) 14:04:21.60ID:VS52OTGY 振り返るとそこに道が出来ているってことでは。
2019/12/25(水) 15:20:11.91ID:R5R0tFog
c++ natureを極めるためにはc++公案で鍛えるしかない
2019/12/28(土) 19:48:57.63ID:8w0fwfLC
主要コンパイラはすべてサポートしているにも関わらずいまだに#pragma onceを使わない人が少なくないのはなぜ?
2019/12/28(土) 20:16:53.24ID:CXPtawUE
onceはclang-clにしたら文句言われた。
>>74
#if defined() / #ifdef で十分ですから
#progma once が規格に取り込まれでもしないかぎり状況はかわらないでしょうね
#progma once の優位性はなんでしょうか
#if defined() / #ifdef で十分ですから
#progma once が規格に取り込まれでもしないかぎり状況はかわらないでしょうね
#progma once の優位性はなんでしょうか
2019/12/28(土) 20:24:49.66ID:8w0fwfLC
一行で済む
万が一のdefineの衝突が起こらない
万が一のdefineの衝突が起こらない
2019/12/28(土) 20:34:45.01ID:izuDiHMA
今はgccでもつかえるんだっけか
2019/12/28(土) 20:40:53.71ID:8w0fwfLC
3.4.xのどこかで対応してるからもう10年以上前の話
80デフォルトの名無しさん
2019/12/28(土) 21:01:17.79ID:pepWReU2 VSについてくるclang-clはpragma once普通に使えてる。
81デフォルトの名無しさん
2019/12/28(土) 21:03:08.62ID:pepWReU2 いまcl、clang-cl、gccでチェックしてるけど、pragma onceは使えてる。
2019/12/28(土) 21:15:39.80ID:oW0/scDi
#pragma once
と書いておけばperlで#if defined() / #ifdefに直せる
と書いておけばperlで#if defined() / #ifdefに直せる
2019/12/28(土) 21:32:47.05ID:jUBDgrWb
標準化してくれれば良いのに
pragmaで出来ることの範疇越えている気はするけど
pragmaで出来ることの範疇越えている気はするけど
2019/12/28(土) 21:48:20.70ID:isXVaWAp
他のもろもろと合わせてモジュールに移行することで済ませるつもりなんでしょ。
2019/12/29(日) 01:41:15.83ID:BmrLXJpy
そういやまだモジュールサポートしてるコンパイラないな
2019/12/29(日) 01:54:26.89ID:KMgGrgwo
exportみたいになりませんように
87デフォルトの名無しさん
2019/12/29(日) 04:54:11.67ID:Q9hr3WtC C#だとis演算子を利用してキャスト可能か判定していますが、
C++でdynamic_castでキャスト可能かってどう判断すればよいのでしょうか?
後、static_castできるかどうかの判定はどうすればよいのでしょうか?
C++でdynamic_castでキャスト可能かってどう判断すればよいのでしょうか?
後、static_castできるかどうかの判定はどうすればよいのでしょうか?
88デフォルトの名無しさん
2019/12/29(日) 05:54:33.33ID:Jtzyjysr2019/12/29(日) 08:13:14.15ID:IGe5Ocj7
dynamic_castがnullptrを返すかどうかで判断
if (auto dp = dynamic_cast<Derived*>(bp)) {
(dpを使った処理)
}
if (auto dp = dynamic_cast<Derived*>(bp)) {
(dpを使った処理)
}
2019/12/29(日) 08:30:34.84ID:e4b1FoNz
91デフォルトの名無しさん
2019/12/29(日) 10:22:08.63ID:3P5H5aUL テトリスでプログラミングの基礎は身につくますか?
2019/12/29(日) 10:25:16.33ID:BmrLXJpy
いいえ
2019/12/29(日) 10:27:06.48ID:OzwmxFfF
2019/12/29(日) 10:43:20.20ID:iKwMwrMu
2019/12/29(日) 11:38:43.95ID:G7raGgQx
江添の最近出した本、このスレ的にはどういう評価なの?
2019/12/29(日) 13:32:59.69ID:KIjz0jVz
江添亮のC++入門、2019/9
こんな本を出していたのかw
関係ないけど、漏れは、下の本を読んでる。
短くまとめられていて良い
[改訂第3版]C++ポケットリファレンス、高橋 晶 ほか、2018
こんな本を出していたのかw
関係ないけど、漏れは、下の本を読んでる。
短くまとめられていて良い
[改訂第3版]C++ポケットリファレンス、高橋 晶 ほか、2018
9896
2019/12/29(日) 14:38:45.96ID:KIjz0jVz 江添亮、επιστημη[エピステーメー]、高橋晶とか、
日本のC++標準化委員会のメンバーは、伝道師みたいな香具師が多い
本をよく書く
日本のC++標準化委員会のメンバーは、伝道師みたいな香具師が多い
本をよく書く
2019/12/29(日) 15:16:08.73ID:mv3qVHGb
まあ、猫でもなんとかとか、スッキリわかるとか、柴田よりはましだろw
101デフォルトの名無しさん
2019/12/29(日) 15:40:38.44ID:G5unUlDw エピはサンプルコードの題材が全部タイマーのイメージ
102デフォルトの名無しさん
2019/12/30(月) 02:16:44.05ID:uy9KH9fJ >>98
その3人全員委員会のメンバーなの?江添だけだと思ってたが
その3人全員委員会のメンバーなの?江添だけだと思ってたが
103デフォルトの名無しさん
2019/12/30(月) 10:20:13.91ID:iZxqjmO+ sizeof(void)がビルドが通らないorz
void型を渡すときのテンプレートの特殊化ってどう書けば良いんじゃ…
void型を渡すときのテンプレートの特殊化ってどう書けば良いんじゃ…
104デフォルトの名無しさん
2019/12/30(月) 10:47:48.49ID:obTerxTG は?
105デフォルトの名無しさん
2019/12/30(月) 10:54:41.38ID:fYgKDGaZ サンプルコードプリーズ
106デフォルトの名無しさん
2019/12/30(月) 11:15:51.02ID:g0RN7zwT sizeof(void)がだめだからT=voidだけ特殊化したいということだろ?
なにも特別なことはないと思うが。
https://ja.cppreference.com/w/cpp/language/template_specialization
なにも特別なことはないと思うが。
https://ja.cppreference.com/w/cpp/language/template_specialization
10796
2019/12/30(月) 23:04:11.87ID:p3QJuMJ/ >>102
C++テンプレートテクニック―簡潔で再利用しやすいコードのためのC++活用術、2009
著者の紹介文に、こう書いてある
επιστημη[エピステーメー]
C++標準化委員会会員
高橋晶
1985年生まれ。2008年05月からC++標準化委員会にエキスパートとして参加
(本データは、この書籍が刊行された当時に掲載されていたものです)
C++テンプレートテクニック―簡潔で再利用しやすいコードのためのC++活用術、2009
著者の紹介文に、こう書いてある
επιστημη[エピステーメー]
C++標準化委員会会員
高橋晶
1985年生まれ。2008年05月からC++標準化委員会にエキスパートとして参加
(本データは、この書籍が刊行された当時に掲載されていたものです)
108デフォルトの名無しさん
2019/12/31(火) 04:04:35.24ID:rzJRcJt/ まじかよ
正直ソフト開発してないライターがやたら参加してんのはどうかと思うけどなぁ
正直ソフト開発してないライターがやたら参加してんのはどうかと思うけどなぁ
109デフォルトの名無しさん
2019/12/31(火) 06:39:04.13ID:K+WZPcbo でもお前らの100倍詳しい
110デフォルトの名無しさん
2019/12/31(火) 07:04:20.12ID:yGRo5VMJ まぁ規格の解説とかはそういうのに関わってる人にしてもらうのが一番いいんじゃない?
111デフォルトの名無しさん
2019/12/31(火) 07:29:37.36ID:rzJRcJt/ まぁ解説とかはそうだし有難いんだけどね
ちょっと日本のライター(に限らないのかもしれんけど)は自分でがっつり使い込んでもないテクニックを
「もしかしたら役に立たないかもしれない」との疑い全く無しに押し付けてることがあるしたまに宗教じみてるから
そういう人ばかりだと今後が不安だなぁと
それだけw
ちょっと日本のライター(に限らないのかもしれんけど)は自分でがっつり使い込んでもないテクニックを
「もしかしたら役に立たないかもしれない」との疑い全く無しに押し付けてることがあるしたまに宗教じみてるから
そういう人ばかりだと今後が不安だなぁと
それだけw
112デフォルトの名無しさん
2019/12/31(火) 07:57:16.28ID:K+WZPcbo 運用するのはお前らの仕事
113デフォルトの名無しさん
2019/12/31(火) 08:08:20.03ID:8dhupYNq 技術書籍は著者の思想に染まらなくても
そこに書いてあるアイディアを欲しいとこだけつまみ食いが
デフォな読み方だろ
そこに書いてあるアイディアを欲しいとこだけつまみ食いが
デフォな読み方だろ
114デフォルトの名無しさん
2019/12/31(火) 09:13:17.18ID:6pACnD9L いや、どれもこれも役に立つよ
てか新機能は大概実際に使っているやつらの発案で始まっているのだから当たり前
まあ、だからこそいろんな分野での要望がまぜこぜになって、ある分野では誰も興味を持たないみたいな言語機能も出てくるのだが
てか新機能は大概実際に使っているやつらの発案で始まっているのだから当たり前
まあ、だからこそいろんな分野での要望がまぜこぜになって、ある分野では誰も興味を持たないみたいな言語機能も出てくるのだが
115111
2019/12/31(火) 09:23:14.27ID:1NlDtb3g >>114
いや言語機能は大抵役に立つよそりゃ
役に立たないかも、ってのは彼らが主にブログとかで紹介してるようなテクニックのこと
完全型か不完全型かを判定するテクニック思いついたよ!(ODRに違反するので要件チェックでエラーにする為にしか使えないが、それは書いてない)とか
C++/CLI風のプロパティをテンプレートで作ってみたよ使ってね!とかな
実際に開発してて使ってたらそんな都合よくはいかんやん?開発に使ってる人間とはちょっと感覚がズレてるんだよな
いや言語機能は大抵役に立つよそりゃ
役に立たないかも、ってのは彼らが主にブログとかで紹介してるようなテクニックのこと
完全型か不完全型かを判定するテクニック思いついたよ!(ODRに違反するので要件チェックでエラーにする為にしか使えないが、それは書いてない)とか
C++/CLI風のプロパティをテンプレートで作ってみたよ使ってね!とかな
実際に開発してて使ってたらそんな都合よくはいかんやん?開発に使ってる人間とはちょっと感覚がズレてるんだよな
116デフォルトの名無しさん
2019/12/31(火) 09:37:10.17ID:qHnQy48w >>115
それは開発やってる人間が考えたってある前提では上手くいくが別の前提では使えないということもあるし、巷に溢れてる初心者でも書ける記事よりは価値があると思うよ。
参考になるところだけ拾って自分の役に立つときに取り出せればいいんでない?
それは開発やってる人間が考えたってある前提では上手くいくが別の前提では使えないということもあるし、巷に溢れてる初心者でも書ける記事よりは価値があると思うよ。
参考になるところだけ拾って自分の役に立つときに取り出せればいいんでない?
117111
2019/12/31(火) 09:38:38.18ID:wdGRUaME まぁそれはそうやね
なんだかんだ世話にはなってるし
なんだかんだ世話にはなってるし
118デフォルトの名無しさん
2019/12/31(火) 10:34:54.28ID:YPeginhU std::vector<std::string> で、登録済みのstringのc_str()が変化しないことを保証する方法ってないかな?
このままでも基本的にはムーブされることが期待できるけど、コピーが発生する可能性は否定できないよね?
このままでも基本的にはムーブされることが期待できるけど、コピーが発生する可能性は否定できないよね?
119デフォルトの名無しさん
2019/12/31(火) 11:23:41.27ID:8dhupYNq restrictがないからconst&から取得したc_strでも失効してることがあるよな
120デフォルトの名無しさん
2019/12/31(火) 11:48:24.20ID:qHnQy48w >>118
そのvectorに対してiteratorが無効になる操作をしないこと、およびその要素stringに対してc_strが無効になる操作をしないこと、ではいけないの?
そのvectorに対してiteratorが無効になる操作をしないこと、およびその要素stringに対してc_strが無効になる操作をしないこと、ではいけないの?
121デフォルトの名無しさん
2019/12/31(火) 11:56:10.87ID:6k+egH3+ vectorで書き換えられたくなければvector<string_view>にすれば
122デフォルトの名無しさん
2019/12/31(火) 11:57:01.13ID:8dhupYNq コピーを作って、参照ではなく元々constなオブジェクトにするしかねえべ
123デフォルトの名無しさん
2019/12/31(火) 12:01:50.45ID:YPeginhU ありがとう、そのままじゃ無理みたいだね。
std::vector<std::unique_ptr<std::string>>> にするわ。
std::vector<std::unique_ptr<std::string>>> にするわ。
124デフォルトの名無しさん
2019/12/31(火) 12:19:07.09ID:8dhupYNq vcとgccでは通るんだけどclangだけ引っかかる
const test obj;
return static_cast<test const&&>(obj); //ok
return move(obj); // warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]
copy elisionを後押ししちゃダメってこと?
const test obj;
return static_cast<test const&&>(obj); //ok
return move(obj); // warning: moving a local object in a return statement prevents copy elision [-Wpessimizing-move]
copy elisionを後押ししちゃダメってこと?
125デフォルトの名無しさん
2019/12/31(火) 12:57:47.44ID:i0/j0IL1 そのまま読むと、「ムーブすると」コピー省略の妨げになるとしか書かれてない気がするけど
126デフォルトの名無しさん
2019/12/31(火) 13:11:47.23ID:6k+egH3+ 現代的なコンパイラならわざわざムーブする必要ないからね
最適化の邪魔になる可能性あるよって親切に教えてくれてるんでしょ
最適化の邪魔になる可能性あるよって親切に教えてくれてるんでしょ
127デフォルトの名無しさん
2019/12/31(火) 13:14:32.39ID:8dhupYNq 118からの流れで122を書いたんだけど
const付きで何かした結果をmoveでなら無理なくconst外し
できるのかって発想で実験してたんだ
const付きで何かした結果をmoveでなら無理なくconst外し
できるのかって発想で実験してたんだ
128デフォルトの名無しさん
2019/12/31(火) 14:21:00.13ID:jcurN+EG >>123
そんなことするくらいだったらstd::dequeの方がよくね?
そんなことするくらいだったらstd::dequeの方がよくね?
129デフォルトの名無しさん
2019/12/31(火) 14:39:44.01ID:YPeginhU std::list は大丈夫かもしれないけど std::deque は vector と同じような。
130デフォルトの名無しさん
2019/12/31(火) 14:56:19.70ID:jcurN+EG まぁ、std:dequeはチャンク単位でメモリ確保するから、頭とお尻の操作であればの再配置が行われないけど、途中要素だと再配置入るから保証は無理か。
131デフォルトの名無しさん
2019/12/31(火) 15:02:45.14ID:YPeginhU ああなるほど、dequeの尻に追加する分には既存の要素の再配置は起こらないのか。ありがとう。
132デフォルトの名無しさん
2019/12/31(火) 16:29:46.55ID:hkax3Wzu dequeの実装方法は規定されてなかったような
133デフォルトの名無しさん
2019/12/31(火) 17:01:07.64ID:jcurN+EG 詳しくは知らないけど、std::dequeにはreserveがないから、ちゃんと規定されているのではないかと思う。
134デフォルトの名無しさん
2020/01/01(水) 10:18:26.20ID:W3M0tzcA C++とか多重定義があるから関数名が内部で修飾されて違う名前にするの、英語でなんか呼び名があったと思うのですが
なんというのですか?
C++と多重定義に限らず、実際の名前と違うのを作ることを言うのかも知れなかったけど
なんというのですか?
C++と多重定義に限らず、実際の名前と違うのを作ることを言うのかも知れなかったけど
135デフォルトの名無しさん
2020/01/01(水) 10:23:41.44ID:kPvcajv8 マングリングのことかな
136デフォルトの名無しさん
2020/01/01(水) 14:22:17.23ID:W3M0tzcA137デフォルトの名無しさん
2020/01/01(水) 14:24:24.22ID:7xbR7AqI 昔から思ってるけど、マングリングっていう単語
ちょっと口にするのに抵抗ある感
ちょっと口にするのに抵抗ある感
138 【ぴょん吉】 【87円】
2020/01/01(水) 15:23:06.14ID:tqBP4ADq あけおめこ
とよろ
まんぐりがえし
とよろ
まんぐりがえし
139デフォルトの名無しさん
2020/01/01(水) 16:31:16.52ID:BCFJuGnw うちの会社は開発島のとなりに総務島があってマングリングを誤解するだろうお姉さま方がたくさんいるから、とても言えない。
わざと聞こえるように言って反応を見てみたい気もするが怖くて出来ない。
わざと聞こえるように言って反応を見てみたい気もするが怖くて出来ない。
140デフォルトの名無しさん
2020/01/01(水) 16:34:16.30ID:9/85Pj9b そんな事をいちいち気にしなきゃいけないとか大変だな
置換とか正規表現とかも言うなよ
置換とか正規表現とかも言うなよ
141デフォルトの名無しさん
2020/01/01(水) 20:13:50.83ID:57Nye4dF マングリング返し
142デフォルトの名無しさん
2020/01/02(木) 09:10:44.11ID:hTPsjNJF 公園で置換
143デフォルトの名無しさん
2020/01/02(木) 10:54:51.63ID:fRqsjLPx 置換みたいな面倒なのは通勤電車の中で済ませろ
144デフォルトの名無しさん
2020/01/02(木) 13:02:38.31ID:vIdqLkFw string GetAnswer(string mode, string text) {
std::string ques, ans;
if (mode == "Read") {
std::ifstream ifs("xxxx.txt", std::ios::in);
ques = text;
}
else if (mode == "Write") {
std::ifstream ifs("xxxx.txt");
ques = split(text, ":")[0];
}
std::string str;
ans = "not_found";
std::vector<std::string> line;
while (getline(ifs, str))
{
・・・・・・・・・
}
l・・・・・・・・
この状態でgetlineを読み込まないのはなぜですか。
std::string ques, ans;
if (mode == "Read") {
std::ifstream ifs("xxxx.txt", std::ios::in);
ques = text;
}
else if (mode == "Write") {
std::ifstream ifs("xxxx.txt");
ques = split(text, ":")[0];
}
std::string str;
ans = "not_found";
std::vector<std::string> line;
while (getline(ifs, str))
{
・・・・・・・・・
}
l・・・・・・・・
この状態でgetlineを読み込まないのはなぜですか。
145デフォルトの名無しさん
2020/01/02(木) 13:04:51.69ID:vIdqLkFw std::ifstream ifs("xxxx.txt");
if (mode == "Read") {
// std::ifstream ifs("xxxx.txt", std::ios::in) //コメントで外す; もしくは削除
ques = text;
}
else if (mode == "Write") {
// std::ifstream ifs("xxxx.txt"); //コメントで外す、もしくは削除
ques = split(text, ":")[0];
}
こうすれば、まともに動くのですが、前記の状態で動かないのはなぜですか。
modeは"Read"と""Write"しかないのですが。
if (mode == "Read") {
// std::ifstream ifs("xxxx.txt", std::ios::in) //コメントで外す; もしくは削除
ques = text;
}
else if (mode == "Write") {
// std::ifstream ifs("xxxx.txt"); //コメントで外す、もしくは削除
ques = split(text, ":")[0];
}
こうすれば、まともに動くのですが、前記の状態で動かないのはなぜですか。
modeは"Read"と""Write"しかないのですが。
146デフォルトの名無しさん
2020/01/02(木) 13:16:19.00ID:fRqsjLPx if抜けたらそれはどこへ逝く?
147デフォルトの名無しさん
2020/01/02(木) 13:19:25.49ID:+UNtt4nj >>145
コンパイルエラーじゃね?
コンパイルエラーじゃね?
148デフォルトの名無しさん
2020/01/02(木) 13:23:42.58ID:fRqsjLPx グローバルのスコープにあるんじゃね
149デフォルトの名無しさん
2020/01/02(木) 13:38:13.22ID:+UNtt4nj グローバルスコープにあるならオープンされてなさそうだね
150デフォルトの名無しさん
2020/01/02(木) 19:15:39.81ID:G5uvQucS 質問ですが以下のコードのように、enum Barが
クラスFooの中でprivateなサブタイプとして定義されているときに、
enum Barで定義されている定数TAG1やTAG2を
ラムダ式の定義の中からクラス名修飾無しで使うにはどうしたらいいんですかね…
class Foo {
private:
enum Bar { TAG1, TAG2, TAG3 };
public:
enum Bar some_method();
enum Bar launch(std::function<enum Bar(int)> func);
};
Foo::Bar Foo::some_method() {
// メソッドの地の文
printf("TAG1=%d\n", TAG1); // これはクラス名修飾無しでもOK
// ラムダ式の定義
auto lambdaFunc = [=](int x)->enum Bar{
if (x == 1) {
return Foo::TAG1; // これはクラス名修飾しないとコンパイルエラー
} else {
return Foo::TAG2; // これもクラス名修飾しないとコンパイルエラー
}
};
// ラムダ式を使う
return launch(lambdaFunc);
}
クラスFooの中でprivateなサブタイプとして定義されているときに、
enum Barで定義されている定数TAG1やTAG2を
ラムダ式の定義の中からクラス名修飾無しで使うにはどうしたらいいんですかね…
class Foo {
private:
enum Bar { TAG1, TAG2, TAG3 };
public:
enum Bar some_method();
enum Bar launch(std::function<enum Bar(int)> func);
};
Foo::Bar Foo::some_method() {
// メソッドの地の文
printf("TAG1=%d\n", TAG1); // これはクラス名修飾無しでもOK
// ラムダ式の定義
auto lambdaFunc = [=](int x)->enum Bar{
if (x == 1) {
return Foo::TAG1; // これはクラス名修飾しないとコンパイルエラー
} else {
return Foo::TAG2; // これもクラス名修飾しないとコンパイルエラー
}
};
// ラムダ式を使う
return launch(lambdaFunc);
}
151デフォルトの名無しさん
2020/01/02(木) 19:27:46.90ID:LbxbUX1g152デフォルトの名無しさん
2020/01/02(木) 20:18:42.74ID:G5uvQucS >>151
レスdクス、だいたい動いたのですがMSVC 2010だと1点変更が必要でしたorz
↓17行目
https://ideone.com/PYoVfL
some_method()の定義をクラスFooの定義外に持っていっても同じ。
ラムダ式の中でFoo::TAG1とせねばならないというのは誤認だった模様サーセン、
しかし上のような新たな闇に行き当たってしまった、、、
レスdクス、だいたい動いたのですがMSVC 2010だと1点変更が必要でしたorz
↓17行目
https://ideone.com/PYoVfL
some_method()の定義をクラスFooの定義外に持っていっても同じ。
ラムダ式の中でFoo::TAG1とせねばならないというのは誤認だった模様サーセン、
しかし上のような新たな闇に行き当たってしまった、、、
153デフォルトの名無しさん
2020/01/02(木) 20:21:51.56ID:G5uvQucS154デフォルトの名無しさん
2020/01/02(木) 20:32:11.41ID:/0b57Mnr C++11ですらない化石はさすがに使う方が悪い
156デフォルトの名無しさん
2020/01/02(木) 20:35:08.33ID:LbxbUX1g https://ideone.com/b6s1Oi
>>152 病みすぎて良くわからん。
>>153 Ideonでは動いているので、環境が古すぎるとしか言いようがないな。
2010ってそろそろ10年前といっても差し支えない程度に古いぞ。
>>152 病みすぎて良くわからん。
>>153 Ideonでは動いているので、環境が古すぎるとしか言いようがないな。
2010ってそろそろ10年前といっても差し支えない程度に古いぞ。
157デフォルトの名無しさん
2020/01/02(木) 20:42:19.47ID:LbxbUX1g そういえば、ドラフトのIO2Dってどうなったんすか?
158デフォルトの名無しさん
2020/01/02(木) 21:38:42.85ID:/mhKa7TF 頓挫したんじゃない?
一時期どんなものかと資料調べてだけどまとまってなかったよ。今どうなんだろうね?
一時期どんなものかと資料調べてだけどまとまってなかったよ。今どうなんだろうね?
159デフォルトの名無しさん
2020/01/02(木) 21:50:26.55ID:LbxbUX1g ぐあ、残念。
160デフォルトの名無しさん
2020/01/02(木) 22:43:44.99ID:NQs+pspB ideoneが未だにジム神様としか読めない
161デフォルトの名無しさん
2020/01/02(木) 22:53:50.64ID:LbxbUX1g 俺はアニメのほう思い出すよ。見たことないけど。
162デフォルトの名無しさん
2020/01/02(木) 23:23:24.45ID:vIdqLkFw163デフォルトの名無しさん
2020/01/02(木) 23:46:28.42ID:HVAsQwCl164デフォルトの名無しさん
2020/01/03(金) 12:08:13.91ID:lHIykz7y165デフォルトの名無しさん
2020/01/03(金) 13:55:16.44ID:fIUwKVUy 初心者なんてそんなもんだろ
>>145
if/else文の中で宣言されたifsはブロック{}で囲まれてしまっているから、ブロックの外からアクセスできない。
だからgetlineに渡してるifsはどこか別の場所にあるifsを参照してしまっている。
std::fstream fs; //< 読み書き両用にするなら"fstream"にすること
if (mode == "Read") {
. fs.open("xxxx.txt", std::ios::in);
. ques = text;
}
else if (mode == "Write") {
. fs.open("xxxx.txt");
. ques = split(text, ":")[0];
}
...
getline(fs, str)
>>145
if/else文の中で宣言されたifsはブロック{}で囲まれてしまっているから、ブロックの外からアクセスできない。
だからgetlineに渡してるifsはどこか別の場所にあるifsを参照してしまっている。
std::fstream fs; //< 読み書き両用にするなら"fstream"にすること
if (mode == "Read") {
. fs.open("xxxx.txt", std::ios::in);
. ques = text;
}
else if (mode == "Write") {
. fs.open("xxxx.txt");
. ques = split(text, ":")[0];
}
...
getline(fs, str)
166デフォルトの名無しさん
2020/01/03(金) 17:20:32.66ID:f1l2rf84167デフォルトの名無しさん
2020/01/08(水) 07:56:51.57ID:L9bP3bPr >>166
いえいえ
いえいえ
168デフォルトの名無しさん
2020/01/08(水) 11:04:42.16ID:5cG1OuZI vector<vector<vector<char>>> data(10, vector<vector<char>>(3, vector<char>(3)));
だと,、char[10][3][3]になると思うのですが
[10]の部分だけ動的にするにはどうすればいいのでしょうか。
だと,、char[10][3][3]になると思うのですが
[10]の部分だけ動的にするにはどうすればいいのでしょうか。
169デフォルトの名無しさん
2020/01/08(水) 11:09:21.62ID:tEaTJVpu [3][3]を固定にしたいってことか?
170デフォルトの名無しさん
2020/01/08(水) 11:09:38.70ID:5cG1OuZI そうです。
171デフォルトの名無しさん
2020/01/08(水) 11:16:31.83ID:qsayucr9 class/structの勉強をしましょう
172デフォルトの名無しさん
2020/01/08(水) 11:22:22.12ID:tEaTJVpu >>168
vector<array<array<char, 3>, 3>> data(10);
vector<array<array<char, 3>, 3>> data(10);
173デフォルトの名無しさん
2020/01/08(水) 11:23:40.31ID:5cG1OuZI 構造体もvectorに入れられるのですね。
ありがとうございます。
ありがとうございます。
174デフォルトの名無しさん
2020/01/08(水) 21:49:44.02ID:PRP72WQ5 ちなみに class と struct はデフォルトが public か private か、という違いしかない
事実上同じもの
事実上同じもの
175デフォルトの名無しさん
2020/01/09(木) 00:07:44.02ID:KXHiDU3s >>173
いえいえ
いえいえ
176デフォルトの名無しさん
2020/01/09(木) 10:15:27.59ID:LsvkYb1v C++のclassとstructはデフォのアクセス指定以外全く同じものだとちゃんと教えない教材がちらほらあるのが悪い
そもそもclassより先にstructをCの構造体の感覚で教えるやつは教える側がちゃんと理解してない可能性すらある
そもそもclassより先にstructをCの構造体の感覚で教えるやつは教える側がちゃんと理解してない可能性すらある
177デフォルトの名無しさん
2020/01/09(木) 10:55:03.06ID:0RBXSUPh そこまで言うなら
struct の方をさっさと deprecated - obsoleted すれば良かったんよ
20年位前にやっとけば良かった
struct の方をさっさと deprecated - obsoleted すれば良かったんよ
20年位前にやっとけば良かった
178デフォルトの名無しさん
2020/01/09(木) 11:59:01.69ID:+yE1fb2H というかclassが要らん
private: 一行書けばいいだけだろ
まあ最近ではGoやRustによってstructが復権してるけど、
当時はオブジェクト指向の用語に対して変なコンプレックスがあったんだろうな
private: 一行書けばいいだけだろ
まあ最近ではGoやRustによってstructが復権してるけど、
当時はオブジェクト指向の用語に対して変なコンプレックスがあったんだろうな
179デフォルトの名無しさん
2020/01/09(木) 12:47:07.90ID:zQlYINS8 >>178
そうそう
|
| 彡⌒ミ
\ (´・ω・`)デフォルトのアクセス指定子を定義したことは,十中八九,間違いであった.
(| |)::::
(γ /:::::::
し \:::
\
そうそう
|
| 彡⌒ミ
\ (´・ω・`)デフォルトのアクセス指定子を定義したことは,十中八九,間違いであった.
(| |)::::
(γ /:::::::
し \:::
\
180デフォルトの名無しさん
2020/01/09(木) 12:52:15.14ID:LsvkYb1v 指定子書き忘れにデフォがprivateならコンパイルエラーでわかるがpublicならわからん
デフォはprivateの方がいい
デフォはprivateの方がいい
181デフォルトの名無しさん
2020/01/09(木) 12:55:55.27ID:zQlYINS8 禁止がデフォで許可が明示な
constも本当はそうなっていて欲しい
ラムダ式の[=]だけデフォconstになっててmutableで外すんだけどね
constも本当はそうなっていて欲しい
ラムダ式の[=]だけデフォconstになっててmutableで外すんだけどね
182デフォルトの名無しさん
2020/01/09(木) 18:49:23.86ID:vYl+3riX 全部コンパイルオプションで対応できそうなのに
っていうかRustいらなくならなくね
っていうかRustいらなくならなくね
183デフォルトの名無しさん
2020/01/09(木) 20:02:43.03ID:dcOC3Udy >>181
最適化禁止のvolatileがデフォはウザすぎる
最適化禁止のvolatileがデフォはウザすぎる
184デフォルトの名無しさん
2020/01/09(木) 20:46:00.27ID:jeGBkGmG volatileってC++20で死ぬんでしょ?
185デフォルトの名無しさん
2020/01/09(木) 20:53:16.18ID:dcOC3Udy まじか
SFRとかどうすんだよ
SFRとかどうすんだよ
186デフォルトの名無しさん
2020/01/09(木) 21:18:47.87ID:VFRbhrWi volatileの有用な機能のみを残し、効果が疑わしい、または壊れている機能を非推奨化する
完全に消える分けでは無いらしい
詳細は知らん
完全に消える分けでは無いらしい
詳細は知らん
187デフォルトの名無しさん
2020/01/09(木) 21:55:38.56ID:SnSt17is >>176
まじですか、C++のstructも構造体だと思っていたけど。
知らなかった。
プロパティだけならstructの中の変数とclassの中の変数
って、あまり変わらない気がするけど、classの方はメンバ
とか言われる実質は関数を含むことができるじゃない。
あと、親から継承したりとか。
なんとなく同じものという感じがしない。
まじですか、C++のstructも構造体だと思っていたけど。
知らなかった。
プロパティだけならstructの中の変数とclassの中の変数
って、あまり変わらない気がするけど、classの方はメンバ
とか言われる実質は関数を含むことができるじゃない。
あと、親から継承したりとか。
なんとなく同じものという感じがしない。
188デフォルトの名無しさん
2020/01/09(木) 22:06:14.43ID:LsvkYb1v structもメンバ関数を持つし、継承もするし、classをstructが継承することもその逆もできる
デフォがpublicかprivateかの違いだけで機能はclassと全く同じ
デフォがpublicかprivateかの違いだけで機能はclassと全く同じ
189デフォルトの名無しさん
2020/01/09(木) 22:23:38.89ID:SnSt17is190デフォルトの名無しさん
2020/01/09(木) 23:18:29.42ID:3XE25/Yj なんかboostスレ死んでるからここで教えてください。
boost使ってクラサバ作ってて、クライアントが接続されるたびに、サーバ側で比較的重い処理があり、
処理止めたく無いからio_serviceに溜まったキューの数見てスレッドを動的に調整したい。
けど、自分の拙い検索能力ではio_serviceに溜まってるキューの数を調べる方法が無さそうなんですが、取得することは可能ですか?
よろしくお願いします。
boost使ってクラサバ作ってて、クライアントが接続されるたびに、サーバ側で比較的重い処理があり、
処理止めたく無いからio_serviceに溜まったキューの数見てスレッドを動的に調整したい。
けど、自分の拙い検索能力ではio_serviceに溜まってるキューの数を調べる方法が無さそうなんですが、取得することは可能ですか?
よろしくお願いします。
191デフォルトの名無しさん
2020/01/10(金) 08:52:59.23ID:cqQYZnld 許容されるスレッド数で常にフルスロットルじゃいかんのけ?
処理がないスレッドは勝手に止まってるし、なんならセマフォで動作数も調節もできるだろうし
処理がないスレッドは勝手に止まってるし、なんならセマフォで動作数も調節もできるだろうし
192デフォルトの名無しさん
2020/01/10(金) 20:10:30.90ID:gdjTauNe スレッド増やしたところで本質的な解決にならん問題な気がする。
193デフォルトの名無しさん
2020/01/11(土) 00:59:53.64ID:NtF2wljx キューの前にガバナー、調速機を付ければいい
キューに入れた個数と出てきた個数をカウントすりゃいいんだろ
スプールでも作ればいいんじゃないの
キューに入れた個数と出てきた個数をカウントすりゃいいんだろ
スプールでも作ればいいんじゃないの
194デフォルトの名無しさん
2020/01/11(土) 01:12:20.76ID:mrkcLLQe 質問ですがstd::function<T>型のオブジェクトにNULLって代入していいの?
195デフォルトの名無しさん
2020/01/11(土) 01:15:06.58ID:GiJYoHUo196デフォルトの名無しさん
2020/01/11(土) 01:43:57.60ID:mrkcLLQe なるほど!
dクス、
dクス、
197デフォルトの名無しさん
2020/01/11(土) 15:19:42.16ID:hPLqZ0ty C++11の知識でC++書いてるけど、特に不便ないな
最新のC++だと何ができるの?
最新のC++だと何ができるの?
198デフォルトの名無しさん
2020/01/11(土) 15:29:42.91ID:pEBt3sLq なら知らなくていいんじゃない?
199デフォルトの名無しさん
2020/01/11(土) 15:47:51.76ID:9vrnWCM9 お前がC++11で十分と思っていても他人はお前に遠慮なんかせずC++20の記法で書く
お前がヘッダーをよこせと言ってもモジュールしか提供されない
お前がヘッダーをよこせと言ってもモジュールしか提供されない
200デフォルトの名無しさん
2020/01/11(土) 17:14:40.32ID:hPLqZ0ty なにを怒ってるんだよ
イージーになろうぜ、イージー
イージーになろうぜ、イージー
201デフォルトの名無しさん
2020/01/11(土) 17:26:39.19ID:hPLqZ0ty 俺は久しぶりにC++を書いて機嫌がいいんだ
あまり怒らせるなよ
あまり怒らせるなよ
202デフォルトの名無しさん
2020/01/11(土) 17:33:49.75ID:7JWsqvWB 標準ライブラリにはまだモジュール使われないんだろ?
20の次あたりでモジュール版も出てくるかどうかだろ
20の次あたりでモジュール版も出てくるかどうかだろ
203デフォルトの名無しさん
2020/01/11(土) 17:48:06.88ID:XaO4QoYK >>202
シルカばーーーか
シルカばーーーか
204デフォルトの名無しさん
2020/01/11(土) 17:53:38.30ID:hPLqZ0ty モジュールって何?
205デフォルトの名無しさん
2020/01/11(土) 18:22:48.55ID:G3Wgm73J モジュールってテンプレート持てるの?
206デフォルトの名無しさん
2020/01/11(土) 18:28:46.90ID:AvFBkNTe またテンプレートの分割コンパイルを誰かが1年ぐらいかけて実装して、
できたころには陳腐化しているという歴史の繰り返し
永遠に枯れない
できたころには陳腐化しているという歴史の繰り返し
永遠に枯れない
207デフォルトの名無しさん
2020/01/11(土) 19:01:55.71ID:hPLqZ0ty gcc10入れた!
-std=c++2aでモジュールって使えるの?
-std=c++2aでモジュールって使えるの?
208デフォルトの名無しさん
2020/01/11(土) 19:15:28.94ID:hPLqZ0ty なんだ-std=c++2aでは使えないみたいだな
概念的にはGoのpackageに近いのかな?
概念的にはGoのpackageに近いのかな?
209デフォルトの名無しさん
2020/01/11(土) 19:29:30.73ID:OEMCT43T 多分もう相手されないから引っ込んだ方がいいよ
210デフォルトの名無しさん
2020/01/11(土) 19:30:41.47ID:hPLqZ0ty なんでだよー><
相手してくれよー><
うわわわわん
相手してくれよー><
うわわわわん
211デフォルトの名無しさん
2020/01/11(土) 22:12:41.17ID:o20hTksc212デフォルトの名無しさん
2020/01/12(日) 05:48:12.78ID:LolRUOoj 1) mkl_blas.h がシステムに存在したらそれをインクルードし、行列行列積ルーチンとして (C++で実装された) dgemmを使う。
2) mkl_blas.hが存在しなければFortranルーチンのdgemm_を使う。
というのを実現したいとします。
mkl_blas.h もないし Fortranルーチンもないという状況は考えません。
関数名の末尾のアンダースコアの有無がややこしくて困っています。
#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#define dgemm_ dgemm
#else
extern "C" void dgemm_(省略);
#endif
としておいて、プログラム中の行列行列積ルーチンは全てdgemm_と書くことでお茶を濁しているのですが、もっとスマートな方法はありますか。
#define dgemm_ dgemm
という部分がいかにも場当たり的で気に入らないです。
2) mkl_blas.hが存在しなければFortranルーチンのdgemm_を使う。
というのを実現したいとします。
mkl_blas.h もないし Fortranルーチンもないという状況は考えません。
関数名の末尾のアンダースコアの有無がややこしくて困っています。
#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#define dgemm_ dgemm
#else
extern "C" void dgemm_(省略);
#endif
としておいて、プログラム中の行列行列積ルーチンは全てdgemm_と書くことでお茶を濁しているのですが、もっとスマートな方法はありますか。
#define dgemm_ dgemm
という部分がいかにも場当たり的で気に入らないです。
213デフォルトの名無しさん
2020/01/12(日) 09:50:22.73ID:GTFqFgmO usingで別名にしてしまうとか?
214デフォルトの名無しさん
2020/01/12(日) 09:59:58.48ID:g8OSapKt 俺ならソースにdgemm_みたいなのがあるのは嫌だから
#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#else
#define dgemm dgemm_
extern "C" void dgemm_(省略);
#endif
ってやると思う
#if __has_include(<mkl_blas.h>)
#include<mkl_blas.h>
#else
#define dgemm dgemm_
extern "C" void dgemm_(省略);
#endif
ってやると思う
215デフォルトの名無しさん
2020/01/12(日) 12:48:26.98ID:JaW6uvCT マクロが嫌ならinline関数にすればいいんじゃね
216デフォルトの名無しさん
2020/01/12(日) 20:04:38.92ID:2yY0psIJ C++で次々に追加される無駄機能は
Cをしっかり理解していれば同等の機能を実装するのは造作もないものが多い
Cをしっかり理解していれば同等の機能を実装するのは造作もないものが多い
217デフォルトの名無しさん
2020/01/12(日) 20:05:36.02ID:Age3j7t+ では具体例お願いします
218デフォルトの名無しさん
2020/01/12(日) 20:35:35.36ID:+J7i572i void*が出てくる時点で論外なのでよろしく
219蟻人間 ◆T6xkBnTXz7B0
2020/01/12(日) 20:41:55.23ID:26db5mti #define my_static_assert(cond, msg) typedef char my_static_assert_failed[(cond) ? 1 : -1]
220デフォルトの名無しさん
2020/01/12(日) 20:59:55.77ID:Svv4a/Ag Cはマクロの使い方次第で出来ることが深まるんだよな
ただC++はマクロ使わない方向で進化してるからな
ただC++はマクロ使わない方向で進化してるからな
221デフォルトの名無しさん
2020/01/12(日) 21:09:19.71ID:gA+rg5vj >>212
下手なことするよりその書き方のが良い。個人的には214の方のが好きだが大して変わらん。
下手なことするよりその書き方のが良い。個人的には214の方のが好きだが大して変わらん。
222デフォルトの名無しさん
2020/01/12(日) 21:35:06.84ID:TRbEu5Zq いざというときも最悪Cならコンパイラを自作できるがC++はちょっと…
223デフォルトの名無しさん
2020/01/12(日) 21:56:32.12ID:Svv4a/Ag いやいや
gccとかC++だし
gccとかC++だし
224デフォルトの名無しさん
2020/01/12(日) 22:39:39.23ID:MD4l5gjt うちの会社C++03なんだけど・・・
225デフォルトの名無しさん
2020/01/12(日) 22:51:11.80ID:Age3j7t+ それが妥当かどうかは業務による
226デフォルトの名無しさん
2020/01/13(月) 01:41:11.35ID:rQk6tfo+ おとなしく頭の良い奴に従っとけ
自分が優秀だと思い込んでいる精神異常者の諸君
自分が優秀だと思い込んでいる精神異常者の諸君
227デフォルトの名無しさん
2020/01/13(月) 01:58:06.34ID:xcD2sz0v 頭のいい奴は総じてc++はカスだと言っとるぞ。
228デフォルトの名無しさん
2020/01/13(月) 02:05:13.31ID:Px4xDI4Q 増えていく機能が軒並み
プログラミング始めたてのやつが持つ不満を具現化したようなものばかりだ
慣れていくとCがそうである理由がわかってきて、いらなくなっていく
おおかた頭のいい奴が新規で入ってきて、慣れてないくせに良かれと思って追加してるんだろう
プログラミング始めたてのやつが持つ不満を具現化したようなものばかりだ
慣れていくとCがそうである理由がわかってきて、いらなくなっていく
おおかた頭のいい奴が新規で入ってきて、慣れてないくせに良かれと思って追加してるんだろう
229デフォルトの名無しさん
2020/01/13(月) 02:15:09.95ID:8CXSeWtZ 例を教えてくれ。
230デフォルトの名無しさん
2020/01/13(月) 03:56:13.32ID:rQk6tfo+ 頭の悪い奴向けの機能なんだが
231デフォルトの名無しさん
2020/01/13(月) 06:52:04.51ID:zZXHCgLl232デフォルトの名無しさん
2020/01/13(月) 09:16:12.93ID:j6Sgy/j5 C++コンパイラとC++のライブラリはC言語でも書けるから
当たらずしも遠からずだと思う
当たらずしも遠からずだと思う
233デフォルトの名無しさん
2020/01/13(月) 09:25:57.13ID:a0NWv3WS 全くCで書かれてないコンパイラってあるの?
234デフォルトの名無しさん
2020/01/13(月) 10:25:34.29ID:pIGOCTOQ Cでテンプレート対応できるの?
235デフォルトの名無しさん
2020/01/13(月) 10:30:00.85ID:+nJPsH/6 >>228
C++は大人数で開発するための言語なんだからてめー個人がいるかいらないかなんて関係ねーんだわ
C++は大人数で開発するための言語なんだからてめー個人がいるかいらないかなんて関係ねーんだわ
236デフォルトの名無しさん
2020/01/13(月) 10:36:38.68ID:+nJPsH/6 チームでの開発を安全に進めるための機能なんて熟練者が書く分にはそりゃいらんだろ
で?
で?
237デフォルトの名無しさん
2020/01/13(月) 12:52:54.65ID:A/MByXKy まあアセンブラさえあれば他に必要ないし
でもそこそこ規模大きいプロジェクトはc++多いよね
反例にlinuxはあるけど
でもそこそこ規模大きいプロジェクトはc++多いよね
反例にlinuxはあるけど
238デフォルトの名無しさん
2020/01/13(月) 13:04:44.90ID:xcD2sz0v windowsでさえc++なんか使わなけりゃよかったいうとるぞ。
つまり低レイヤー触るのに向いてるようでそうでもないってのがc++なんだよ。
つまり低レイヤー触るのに向いてるようでそうでもないってのがc++なんだよ。
239デフォルトの名無しさん
2020/01/13(月) 13:20:13.66ID:j6Sgy/j5 リーナスは低レベルな人やからな
240デフォルトの名無しさん
2020/01/13(月) 13:20:44.02ID:FqpttVgU だから?
241デフォルトの名無しさん
2020/01/13(月) 22:54:55.25ID:/BeY0uog242デフォルトの名無しさん
2020/01/13(月) 23:00:48.10ID:FqpttVgU JVMもJavaで書いてみせろ
243デフォルトの名無しさん
2020/01/13(月) 23:44:05.72ID:vq82NN4B 皆さんが使用されているエディタを教えてください....🙇♀
244デフォルトの名無しさん
2020/01/13(月) 23:45:43.26ID:jU0I703o 自作
245デフォルトの名無しさん
2020/01/13(月) 23:45:56.78ID:5GjUS2iX メモ帳
246デフォルトの名無しさん
2020/01/13(月) 23:46:58.98ID:vq82NN4B あ、すみません僕は今はatomを使っています
自作のエディタを使ってらっしゃる方なんているんですね。。。
自作のエディタを使ってらっしゃる方なんているんですね。。。
247デフォルトの名無しさん
2020/01/14(火) 06:11:49.55ID:J0UMnVjO emacs
248デフォルトの名無しさん
2020/01/14(火) 13:29:05.29ID:PBX58Pvh 某板金社製
249デフォルトの名無しさん
2020/01/14(火) 16:11:50.76ID:gkNCY9ap ↓のコードはコンパイルが通るのですが、func(1)ではなく、func<int32_t>(1)のようにしなければいけないと思っていたんですが、そうではないんですか?
これはコンパイラが勝手にTの型を推測してくれているのでしょうか?
#include <iostream>
template<class T>
void
func(T value) {
std::cout << value << std::endl;
}
int main() {
func(1);
return 0;
}
これはコンパイラが勝手にTの型を推測してくれているのでしょうか?
#include <iostream>
template<class T>
void
func(T value) {
std::cout << value << std::endl;
}
int main() {
func(1);
return 0;
}
250デフォルトの名無しさん
2020/01/14(火) 16:13:46.64ID:MAaOflfD 俺は自ら望んでなったC++使いだが
リーナスの主張には何ら文句はない
俺も好かんところがいくつかあって我慢しているが
他の人がキレるのを否定はしない
リーナスの主張には何ら文句はない
俺も好かんところがいくつかあって我慢しているが
他の人がキレるのを否定はしない
251デフォルトの名無しさん
2020/01/14(火) 19:00:56.35ID:jdAaUvyI252デフォルトの名無しさん
2020/01/14(火) 19:47:23.47ID:gkNCY9ap253デフォルトの名無しさん
2020/01/14(火) 19:55:58.10ID:MAaOflfD C++17からはクラスも推定するようになったから気をつけろな
254デフォルトの名無しさん
2020/01/14(火) 20:10:13.46ID:3eaorBLU 地獄になるのが目に見えるわ。
255デフォルトの名無しさん
2020/01/14(火) 20:20:51.77ID:J0UMnVjO256デフォルトの名無しさん
2020/01/14(火) 23:30:18.80ID:gkNCY9ap257デフォルトの名無しさん
2020/01/15(水) 00:35:48.44ID:7a3J15MS >>256
いえいえ
いえいえ
258デフォルトの名無しさん
2020/01/15(水) 08:07:26.85ID:Af26ZTs6 >>257
楽しい?
楽しい?
259デフォルトの名無しさん
2020/01/16(木) 01:26:49.29ID:Ue561N6A C#使ってきたわい、C++入門するにあたって何から手を付けたらいいか分からない
江添の入門本読んだらええの?
江添の入門本読んだらええの?
260デフォルトの名無しさん
2020/01/16(木) 04:14:44.73ID:SACm472n +を重ね合わせないでずらして書くと#じゃなくて++になるやろ
つまりそういうことや
つまりそういうことや
261デフォルトの名無しさん
2020/01/16(木) 06:13:59.73ID:iXD/XJ1o あんなカス本読むならビャーネの本とeffective系統を何冊か読んだ方がよっぽど為になる。
262デフォルトの名無しさん
2020/01/16(木) 08:12:06.71ID:+e0TuAjq 俺も自分の経験からは禿の本をオススメすることになる
263デフォルトの名無しさん
2020/01/16(木) 18:58:35.12ID:aiRikJgB C++においてハゲとは神を意味するからな
264デフォルトの名無しさん
2020/01/16(木) 20:10:19.95ID:5A9213qe また髪の話ししてる
265デフォルトの名無しさん
2020/01/17(金) 02:03:14.51ID:nV1+qdjp C++でウィンドウ関係の処理を組もうと思っているのですが、
最近だとMFCではなく.Net Framework を利用するのでしょうか?
最近だとMFCではなく.Net Framework を利用するのでしょうか?
266デフォルトの名無しさん
2020/01/17(金) 02:20:28.99ID:oPB0sz0H いいえ
267デフォルトの名無しさん
2020/01/17(金) 02:26:05.67ID:gAZZjojh WebGL
268デフォルトの名無しさん
2020/01/17(金) 06:22:56.76ID:BtsrcJh0 Win32APIが主流ですよ
269デフォルトの名無しさん
2020/01/17(金) 07:24:00.72ID:sP/gsAG3270デフォルトの名無しさん
2020/01/17(金) 08:02:37.47ID:6PrSA6bz WTLってどうなの?
271デフォルトの名無しさん
2020/01/17(金) 08:03:39.75ID:+NTDhbdd 純粋仮想関数の=0の右辺って定数式なんでしたっけ
272デフォルトの名無しさん
2020/01/17(金) 08:55:06.31ID:9u9GYVKv 0じゃないか?
273デフォルトの名無しさん
2020/01/17(金) 09:17:21.07ID:r0ibn4Bf オブジェクトを明示的に破棄する方法ってある?
自分で new したなら delete すれば良いと思うが、STL コンテナ等の場合はどうすれば良いかという質問です。
例えば巨大な vector を作って何らかの作業をした後、もうその vector は用無しでメモリがもったいないからスコープを抜けるのを待たずに破棄したいみたいな状況を想定してます。
自分で new したなら delete すれば良いと思うが、STL コンテナ等の場合はどうすれば良いかという質問です。
例えば巨大な vector を作って何らかの作業をした後、もうその vector は用無しでメモリがもったいないからスコープを抜けるのを待たずに破棄したいみたいな状況を想定してます。
274デフォルトの名無しさん
2020/01/17(金) 09:19:05.55ID:oRcV/dFn >>271
純粋仮想関数であることを示すための専用の構文らしい。pure-specifierという。
純粋仮想関数であることを示すための専用の構文らしい。pure-specifierという。
275デフォルトの名無しさん
2020/01/17(金) 09:22:16.66ID:8wRp1qeu >>273
空とswap
空とswap
276デフォルトの名無しさん
2020/01/17(金) 09:26:42.76ID:r0ibn4Bf >>275
場当たり的な対処に思えますが、そういうのが嫌ならマメにスコープを切れということでしょうか。
場当たり的な対処に思えますが、そういうのが嫌ならマメにスコープを切れということでしょうか。
277デフォルトの名無しさん
2020/01/17(金) 10:03:31.41ID:jP7OzWuZ278デフォルトの名無しさん
2020/01/17(金) 11:18:09.64ID:fMuYUnvE279デフォルトの名無しさん
2020/01/17(金) 12:09:31.61ID:FiFP8PG3 Qtはメジャーな製品でよく使われてる印象がありゅ
280デフォルトの名無しさん
2020/01/17(金) 12:12:10.21ID:oPB0sz0H MS製にこだわって頑なにMFCみたいな化石使ってる奴いるけど普通にサードパーティのツールキット使うのが主流
281デフォルトの名無しさん
2020/01/17(金) 12:58:41.79ID:sP/gsAG3 他人のところの事情も知らんくせにシッタカこくと
聞こえたやつ全員からそれぞれ色んな理由でアホにされるぞ
聞こえたやつ全員からそれぞれ色んな理由でアホにされるぞ
282デフォルトの名無しさん
2020/01/17(金) 13:10:35.05ID:fMuYUnvE GTKは糞
283デフォルトの名無しさん
2020/01/17(金) 13:38:21.01ID:oPB0sz0H >>281
選択肢に.NETが出てくるあたり何の制約もない状況でサードパーティが使えない理由とは?
選択肢に.NETが出てくるあたり何の制約もない状況でサードパーティが使えない理由とは?
284デフォルトの名無しさん
2020/01/17(金) 14:31:40.72ID:sP/gsAG3 身バレするから書かない
285デフォルトの名無しさん
2020/01/17(金) 14:39:28.87ID:8NRoOtOw スレ違いでしょ。続きはWin32APIスレに移動してどうぞ。
286デフォルトの名無しさん
2020/01/17(金) 15:05:49.07ID:r0ibn4Bf vectorをnewする?
ゴミみたいなこと言うな
ゴミみたいなこと言うな
287デフォルトの名無しさん
2020/01/17(金) 15:19:25.90ID:yexmiyzj 質問する側の態度とは思えん
288デフォルトの名無しさん
2020/01/17(金) 15:28:54.41ID:WQqGcJSL > 自分で new したなら delete すれば良いと思うが
良いと思ってるならvectorもnew/deleteで良いでしょ
良いと思ってるならvectorもnew/deleteで良いでしょ
289デフォルトの名無しさん
2020/01/17(金) 15:35:23.13ID:NjgiFnOV vector newでいけない理由を先に説明してくれないと
290デフォルトの名無しさん
2020/01/17(金) 17:45:27.47ID:xt9i4Zu8 > スコープを抜けるのを待たずに
> 破棄したいみたいな状況を想定してます。
破棄するタイミングはコンパイラには分からんのだろ
人が判断するしかないなら「場当たり的」にやるしか無いのでは
> 破棄したいみたいな状況を想定してます。
破棄するタイミングはコンパイラには分からんのだろ
人が判断するしかないなら「場当たり的」にやるしか無いのでは
291デフォルトの名無しさん
2020/01/17(金) 17:56:19.89ID:8NRoOtOw vector::clear()、vector::shrink_to_fit() の連続実行で十分なのでは?
292デフォルトの名無しさん
2020/01/17(金) 18:12:09.22ID:2FWha3Nl shrink_to_fit
capacity()をsize()に縮小させるというリクエストを行う。
実装依存の最適化を許可するために、縮小するという動作は仕様上強制されない。
縮小されないかもしれない、らしい
capacity()をsize()に縮小させるというリクエストを行う。
実装依存の最適化を許可するために、縮小するという動作は仕様上強制されない。
縮小されないかもしれない、らしい
293デフォルトの名無しさん
2020/01/18(土) 11:20:53.95ID:Iw/95SDF たいていは逆にスコープを破棄のタイミングに合わせるような書き方すればいいだろ。
分岐の激しい破棄条件書くくらいならそっちのが楽なことは多い。
分岐の激しい破棄条件書くくらいならそっちのが楽なことは多い。
294デフォルトの名無しさん
2020/01/18(土) 11:59:37.47ID:timcC3h8 while {
295デフォルトの名無しさん
2020/01/18(土) 12:04:39.51ID:timcC3h8 途中で投稿してしまい失礼。
do {
} while(0);
で括って、処理が続行できない場合はbreakして、doループを抜けたすぐ下でで資源解放する古典的な記述でいいのでは。
do {
} while(0);
で括って、処理が続行できない場合はbreakして、doループを抜けたすぐ下でで資源解放する古典的な記述でいいのでは。
296デフォルトの名無しさん
2020/01/18(土) 12:12:16.18ID:LluV6Hhd 糞野郎にみんな親切だな
297デフォルトの名無しさん
2020/01/18(土) 14:36:14.37ID:cLOUBKze gotoを避けるためにgotoよりクソなコードを書くのがいいわけねえだろ
298デフォルトの名無しさん
2020/01/18(土) 14:54:44.30ID:timcC3h8 ま、資源解放のコーディングが楽になるなら正義でしょ。
299デフォルトの名無しさん
2020/01/18(土) 16:33:12.29ID:cLOUBKze >>298
確認するが、ここがC++スレということは忘れてないよな?
確認するが、ここがC++スレということは忘れてないよな?
300デフォルトの名無しさん
2020/01/18(土) 16:37:31.05ID:sDwxplmd メモリがもったいない言うけど、ホントにカツカツなのだろうか
環境的に余裕であれば妙なコーディングする意味がない
環境的に余裕であれば妙なコーディングする意味がない
301デフォルトの名無しさん
2020/01/18(土) 20:06:16.49ID:6Wtj4R8r どんくらいスキマと余裕があるのかを常時監視するソフトウェアはかんたんに作れる
なんせわたくしはC++を極めましたからな
なんせわたくしはC++を極めましたからな
302デフォルトの名無しさん
2020/01/18(土) 20:37:07.22ID:0qsbj5e6303デフォルトの名無しさん
2020/01/18(土) 20:39:57.16ID:cLOUBKze304デフォルトの名無しさん
2020/01/18(土) 20:44:02.19ID:0qsbj5e6 gotoだとRAII対応できないじゃん
305デフォルトの名無しさん
2020/01/18(土) 20:44:36.43ID:7kb+tsdB すまねーよ。他の例外で飛ばされたらどうすんだ馬鹿。
306デフォルトの名無しさん
2020/01/18(土) 20:46:21.29ID:cLOUBKze >>304
do(0) なんて持ち出すアホが RAII かよw
do(0) なんて持ち出すアホが RAII かよw
307デフォルトの名無しさん
2020/01/18(土) 20:47:02.86ID:0qsbj5e6 まあ最近は
[&]{
...
}();
で書くことが多いが
[&]{
...
}();
で書くことが多いが
308デフォルトの名無しさん
2020/01/18(土) 20:48:42.22ID:0qsbj5e6 do{}while(0);の問題は知らない奴が混乱するって一点のみだろ
309デフォルトの名無しさん
2020/01/18(土) 20:59:02.60ID:cLOUBKze 「知ってるやつ」の言い訳を、ここで開陳してもらおうか
最近、笑う健康法ができてないんで、よろしく頼むわ芸人さん
最近、笑う健康法ができてないんで、よろしく頼むわ芸人さん
310デフォルトの名無しさん
2020/01/18(土) 21:04:02.89ID:0qsbj5e6 その前にgotoより糞ってのが既に成立してないじゃん
どこが糞なのか具体的に
どこが糞なのか具体的に
311デフォルトの名無しさん
2020/01/18(土) 21:10:26.52ID:cLOUBKze ははは、話を逸らすしかねえよな
「do{}while(0);の問題」てのが他の問題によって
成り立つのか成り立たねえのか影響されると
自ら自白してやがる(核爆
助けてやらねえよ、自分でなんとかしなアホwバカwww
「do{}while(0);の問題」てのが他の問題によって
成り立つのか成り立たねえのか影響されると
自ら自白してやがる(核爆
助けてやらねえよ、自分でなんとかしなアホwバカwww
312デフォルトの名無しさん
2020/01/18(土) 21:15:23.05ID:0qsbj5e6 意味がわからないよ
煙に巻いて逃げる気かなw
煙に巻いて逃げる気かなw
313デフォルトの名無しさん
2020/01/18(土) 21:19:10.77ID:cLOUBKze314デフォルトの名無しさん
2020/01/18(土) 21:19:14.06ID:65HS6FKB やりたいことはスタックにあるvectorの早期解放なんだから
gotoもdo{}while(0)もラムダ式もいらない
単に{}で囲うだけでいい
gotoもdo{}while(0)もラムダ式もいらない
単に{}で囲うだけでいい
315デフォルトの名無しさん
2020/01/18(土) 21:20:27.83ID:cLOUBKze だよなwwwwwwwwwwww
316デフォルトの名無しさん
2020/01/18(土) 21:23:34.49ID:Upzp+V6z ↓do { } while(0)でこれできたっけ?
if (cond) { goto label1; }
do {
処理A
label1:
処理B
} while (0);
YES! gotoならできる!!
if (cond) { goto label1; }
label2:
処理A
label1:
処理B
goto label2;
if (cond) { goto label1; }
do {
処理A
label1:
処理B
} while (0);
YES! gotoならできる!!
if (cond) { goto label1; }
label2:
処理A
label1:
処理B
goto label2;
317デフォルトの名無しさん
2020/01/18(土) 21:28:09.90ID:Upzp+V6z つか
do {
処理A;
if (cond) { break; }
処理B;
std::unique_ptr p(new Foo());
処理C; // pを使用
} while (0);
みたいな腐り切った腐敗臭しかしないコードを書くぐらいなら
std::unique_ptr p;
{
処理A;
if (cond) { goto last; }
処理B;
p = std::unique_ptr(new Foo());
処理C; // pを使用
}
last:
;
と書くわ
Perl風に
do {
処理A;
if (cond) { break; }
処理B;
std::unique_ptr p(new Foo());
処理C; // pを使用
} while (0);
みたいな腐り切った腐敗臭しかしないコードを書くぐらいなら
std::unique_ptr p;
{
処理A;
if (cond) { goto last; }
処理B;
p = std::unique_ptr(new Foo());
処理C; // pを使用
}
last:
;
と書くわ
Perl風に
318デフォルトの名無しさん
2020/01/18(土) 21:30:23.35ID:v/DZPeDP319デフォルトの名無しさん
2020/01/18(土) 21:30:23.45ID:cLOUBKze ID:0qsbj5e出てこいオラ
320デフォルトの名無しさん
2020/01/18(土) 21:34:58.69ID:cLOUBKze ID:0qsbj5e6 出てこい
321デフォルトの名無しさん
2020/01/18(土) 21:42:46.68ID:65HS6FKB322デフォルトの名無しさん
2020/01/18(土) 21:45:43.25ID:cLOUBKze そうそう
兆くだらねえ話だ(わざと誤字
兆くだらねえ話だ(わざと誤字
323デフォルトの名無しさん
2020/01/18(土) 21:47:11.24ID:cLOUBKze goto過敏症のアホどもが少しでも目を醒ましてくれるといいな
324デフォルトの名無しさん
2020/01/18(土) 21:49:54.58ID:v/DZPeDP325デフォルトの名無しさん
2020/01/18(土) 21:51:28.17ID:v/DZPeDP >>323
この場合gotoは何の解にもなっていないことにそろそろ気づいた方がいいよ
この場合gotoは何の解にもなっていないことにそろそろ気づいた方がいいよ
326デフォルトの名無しさん
2020/01/18(土) 21:53:26.94ID:v/DZPeDP327デフォルトの名無しさん
2020/01/18(土) 21:59:36.19ID:0qsbj5e6 RAII対応してないから無理矢理goto出来るようにした糞コード上げられてもああ糞ですねと言うしかないんだが。
内部が複雑になってきたらその度にブロック外に変数追加して、変数の内容の初期化は必要に応じてって書き方を続けるつもりなんかね
内部が複雑になってきたらその度にブロック外に変数追加して、変数の内容の初期化は必要に応じてって書き方を続けるつもりなんかね
328デフォルトの名無しさん
2020/01/18(土) 22:27:52.30ID:cLOUBKze >>325
gotoが何かの解になったらいいの?wwwwwwww
gotoが何かの解になったらいいの?wwwwwwww
329デフォルトの名無しさん
2020/01/18(土) 22:28:06.88ID:4nVoSga0 >>304
そうなんだっけ?
そうなんだっけ?
330デフォルトの名無しさん
2020/01/19(日) 00:26:12.30ID:M/ehGL7C やっぱこういうコードは一度書いてみたいよな
try {
label:
何かの処理;
} catch (Exception ex) {
goto label;
}
try {
label:
何かの処理;
} catch (Exception ex) {
goto label;
}
331デフォルトの名無しさん
2020/01/19(日) 00:32:09.37ID:M/ehGL7C gotoを使うと糞、と言う香具師は多いが
goto以外の構文も大概なことがある
↓これとか
EnterCriticalSection(&csec);
{
if (エラー条件成立) {
LeaveCriticalSection(&csec);
throw "*** ERR ***";
}
何かの処理;
}
LeaveCriticalSection(&csec);
一体どうすれば…orz
goto以外の構文も大概なことがある
↓これとか
EnterCriticalSection(&csec);
{
if (エラー条件成立) {
LeaveCriticalSection(&csec);
throw "*** ERR ***";
}
何かの処理;
}
LeaveCriticalSection(&csec);
一体どうすれば…orz
332デフォルトの名無しさん
2020/01/19(日) 00:36:14.30ID:M/ehGL7C いやまあテストラクトされるときにLeaveCriticalSection()するような
AutoLockオブジェクトを使えば済むっていやー済むが
裏返せばgoto以外の構文も糞製造機であることにはかわりわない!
AutoLockオブジェクトを使えば済むっていやー済むが
裏返せばgoto以外の構文も糞製造機であることにはかわりわない!
333デフォルトの名無しさん
2020/01/19(日) 00:38:55.96ID:ocqIlbpk それは構文が糞なんじゃなくてリソース管理が糞なだけ
334デフォルトの名無しさん
2020/01/19(日) 01:24:22.15ID:PgEzQeWd auto lockなんてむしろ使ってなかったらPRでリジェクトされる
335デフォルトの名無しさん
2020/01/19(日) 06:28:34.04ID:6oeBvQPN gotoの何が悪いのかを端的に表すたった一言が出てこない教条主義は物笑いの種
336デフォルトの名無しさん
2020/01/19(日) 07:19:17.26ID:M/ehGL7C 誰にも迷惑がかからないgotoの例:
for (a = 0; a < 2; a++) {
for (b = 0; b < 2; b++) {
for (c = 0; c < 2; c++) {
....
for (zaaa = 0; zaaa < 2; zaaa++) {
処理A
if (何かの条件) { goto last; }
処理B
}
...
}
}
}
last:
;
for (a = 0; a < 2; a++) {
for (b = 0; b < 2; b++) {
for (c = 0; c < 2; c++) {
....
for (zaaa = 0; zaaa < 2; zaaa++) {
処理A
if (何かの条件) { goto last; }
処理B
}
...
}
}
}
last:
;
337デフォルトの名無しさん
2020/01/19(日) 07:24:20.07ID:M/ehGL7C >>334
たまたまLeaveCriticalSection()はエラーを返さないが
エラーを生じるブツだったらどうすんじゃ
まあエラー通知先があれば良いのでやりようはあるが
加速度的に手が込んだコードが必要になって全体が糞化していくんじゃ!
たまたまLeaveCriticalSection()はエラーを返さないが
エラーを生じるブツだったらどうすんじゃ
まあエラー通知先があれば良いのでやりようはあるが
加速度的に手が込んだコードが必要になって全体が糞化していくんじゃ!
338デフォルトの名無しさん
2020/01/19(日) 07:35:30.18ID:ilIPQsua そもそもそのgotoを書きたくなるくらい深くネストしている時点でよくない説
339デフォルトの名無しさん
2020/01/19(日) 08:03:07.26ID:Wel1D6/w340デフォルトの名無しさん
2020/01/19(日) 08:05:11.96ID:6oeBvQPN 教条主義というよりただのバカ
341デフォルトの名無しさん
2020/01/19(日) 08:08:17.50ID:D5W6f6uH gotoの使い方くらい知っておいた方が良いかと
342デフォルトの名無しさん
2020/01/19(日) 08:51:50.65ID:2MN/c8bt gotoにせよthrowにせよ、goto/throwの発生元が分からないのが受身になる側として辛い。
この点は、スタック情報へのアクセスが言語仕様として認められているJava/C#/Perl/Pythonに優位がある。
この点は、スタック情報へのアクセスが言語仕様として認められているJava/C#/Perl/Pythonに優位がある。
343デフォルトの名無しさん
2020/01/19(日) 08:54:43.67ID:M/ehGL7C throwの発生元は例外オブジェクトに情報を持たせれば良いじゃん?
gotoのジャンプ元は変数に情報を持たせれば良いじゃん??
gotoのジャンプ元は変数に情報を持たせれば良いじゃん??
344デフォルトの名無しさん
2020/01/19(日) 09:02:38.34ID:2MN/c8bt >>343
goto/throw発生元がバイナリで配布されている場合は、コードを書き換えられない。
クラス設計でやたらとメンバ変数をprivateにされると、クラスを利用する側はメンバ変数を古典的プリントデバッグできなくて難儀する。
goto/throw発生元がバイナリで配布されている場合は、コードを書き換えられない。
クラス設計でやたらとメンバ変数をprivateにされると、クラスを利用する側はメンバ変数を古典的プリントデバッグできなくて難儀する。
345デフォルトの名無しさん
2020/01/19(日) 09:04:12.06ID:2MN/c8bt C++のprivate属性は厳しすぎ。readonlyアクセスできる属性があってもいいと思うんだ。
346デフォルトの名無しさん
2020/01/19(日) 09:11:24.83ID:M/ehGL7C347デフォルトの名無しさん
2020/01/19(日) 09:12:59.39ID:2MN/c8bt タイミング依存の不具合を追跡する必要に迫られると、当然ながら対話デバッグはできない。
C++のprivate変数が不具合に関与しているとわかってもランタイムで値を見れないのは辛い。
他人様の作ったC++クラスヘッダーを一時的に書き換えてコンパイルする羽目に。
C++のprivate変数が不具合に関与しているとわかってもランタイムで値を見れないのは辛い。
他人様の作ったC++クラスヘッダーを一時的に書き換えてコンパイルする羽目に。
348デフォルトの名無しさん
2020/01/19(日) 09:17:35.49ID:2MN/c8bt349デフォルトの名無しさん
2020/01/19(日) 09:20:25.20ID:2MN/c8bt 公式がデバッグシンボルを配布するご時世なのに、C++のスタック仕様はそれについていけていない。
デバッガを介することなくスタックをダンプできる手段が制約されすぎ。
デバッガを介することなくスタックをダンプできる手段が制約されすぎ。
350デフォルトの名無しさん
2020/01/19(日) 10:49:09.39ID:CSTVsvTH gotoはRAIIと相性が悪いってのが端的だろ
これはgotoが悪いと言うよりc++の言語仕様上のgotoの扱いが悪いって話
constexprで使えないとか規格が新しくなる度に不都合が増えていくよ
これはgotoが悪いと言うよりc++の言語仕様上のgotoの扱いが悪いって話
constexprで使えないとか規格が新しくなる度に不都合が増えていくよ
351デフォルトの名無しさん
2020/01/19(日) 10:57:40.21ID:RfLx+x9F gotoの使い方くらい知っておいた方が良いかと
352デフォルトの名無しさん
2020/01/19(日) 11:07:08.87ID:fzpRtoDi >>350
相性悪い?
相性悪い?
353デフォルトの名無しさん
2020/01/19(日) 11:07:41.05ID:CSTVsvTH 文字列パーサー内とかでの状態遷移に使うは推奨する
その他でのgotoは代替手段があるし、そっちの方が言語サポート良いからgoto使うのはバカのやること
その他でのgotoは代替手段があるし、そっちの方が言語サポート良いからgoto使うのはバカのやること
354デフォルトの名無しさん
2020/01/19(日) 11:12:09.60ID:CSTVsvTH まあ不遇な原因はgotoが自由すぎて前にも後ろにも飛べるせいだろうね
変数のデストラクタを呼ぶべきかどうかフラグ管理でもしないとコンパイラが判断できなくなる。
goto使うならその自由さが必要な場面でこそ使うべきなんだよ
変数のデストラクタを呼ぶべきかどうかフラグ管理でもしないとコンパイラが判断できなくなる。
goto使うならその自由さが必要な場面でこそ使うべきなんだよ
355デフォルトの名無しさん
2020/01/19(日) 11:18:58.21ID:2MN/c8bt >>354
プログラミング言語の世界では、前や後ろという表現は直観的にわかりにくい。
前や後ろは相対的なものであり、バックしているイテレータにとっては前はバックなのだ。
上と下なら直観的にわかるだろう。
プログラミング言語の世界では、前や後ろという表現は直観的にわかりにくい。
前や後ろは相対的なものであり、バックしているイテレータにとっては前はバックなのだ。
上と下なら直観的にわかるだろう。
356デフォルトの名無しさん
2020/01/19(日) 11:21:16.66ID:CSTVsvTH 用語としては前後で統一されているような
357デフォルトの名無しさん
2020/01/19(日) 11:22:22.50ID:RfLx+x9F gotoの使い方を知らない初心者がこのスレにいるってのが不思議
358デフォルトの名無しさん
2020/01/19(日) 11:27:05.68ID:2MN/c8bt [コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。 - Qiita
https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6
https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6
359デフォルトの名無しさん
2020/01/19(日) 11:29:47.11ID:6oeBvQPN >>357
誤魔化さない説明がちゃんとできるやつがずいぶん少ないという、残念な状況が今の日本だ
誤魔化さない説明がちゃんとできるやつがずいぶん少ないという、残念な状況が今の日本だ
360デフォルトの名無しさん
2020/01/19(日) 11:38:04.97ID:RfLx+x9F わざわざ複雑にしてまでgotoを避ける
って宗教だよな
使いどころで使う
それだけ
って宗教だよな
使いどころで使う
それだけ
361デフォルトの名無しさん
2020/01/19(日) 11:42:59.02ID:ZzFAG3/g いうて必要になったことないや
362デフォルトの名無しさん
2020/01/19(日) 12:30:11.44ID:L2mlhsAt 別にgoto使っても使わなくても馬鹿が書けば複雑なコードになるだろ。
そういう問題じゃない。
そもそもc++の標準ライブラリが例外投げる時点でgotoとの相性は最悪だよ。
一番末端の関数で、副作用もないようなもの以外使えんわ。
そういう問題じゃない。
そもそもc++の標準ライブラリが例外投げる時点でgotoとの相性は最悪だよ。
一番末端の関数で、副作用もないようなもの以外使えんわ。
363デフォルトの名無しさん
2020/01/19(日) 12:36:07.26ID:PgEzQeWd gotoおじさんはたぶん例外安全性という概念をわかってない
364デフォルトの名無しさん
2020/01/19(日) 14:43:36.08ID:6jfPBIzz >>363
例外安全の定義が難しいのですが、gotoを使っても例外安全を保障することはできると思うのですが、いかがでしょうか。
例外安全の定義が難しいのですが、gotoを使っても例外安全を保障することはできると思うのですが、いかがでしょうか。
365デフォルトの名無しさん
2020/01/19(日) 15:06:56.67ID:PgEzQeWd >>364
c++の標準ライブラリに関して例外安全とは何かは定義されてる
できるできないで言えばgotoかつ例外安全はそりゃできるでしょうよ
まずgoto関係なしに例外安全が相当大変であることを理解してから出直してくれ
そうじゃなきゃRAII、autoなんとかmakeなんとかの有難みも理解できてないのよ
c++の標準ライブラリに関して例外安全とは何かは定義されてる
できるできないで言えばgotoかつ例外安全はそりゃできるでしょうよ
まずgoto関係なしに例外安全が相当大変であることを理解してから出直してくれ
そうじゃなきゃRAII、autoなんとかmakeなんとかの有難みも理解できてないのよ
366デフォルトの名無しさん
2020/01/19(日) 15:08:40.81ID:RfLx+x9F 話題のすり替え
367デフォルトの名無しさん
2020/01/19(日) 15:16:49.04ID:PgEzQeWd >>366
話題を勘違いしてるのはお前だよ
お前は単にbreakでスコープの脱出することに対してgotoの方が簡潔と言ってるんだろう
そういう場合があるのは同意するけど今回の話題はそれじゃない
スコープの脱出になってるのはRAIIでリソースを安全に開放する前提だからだ
だからお前が言うべきはスコープをなくしてgotoを使うというなら
合わせてリソースをどのように安全に開放するかを説明しないといけない
場当たり的でない方法でね
そこをまったく説明できない以上お前はgotoおじさんと呼ばれ続ける
話題を勘違いしてるのはお前だよ
お前は単にbreakでスコープの脱出することに対してgotoの方が簡潔と言ってるんだろう
そういう場合があるのは同意するけど今回の話題はそれじゃない
スコープの脱出になってるのはRAIIでリソースを安全に開放する前提だからだ
だからお前が言うべきはスコープをなくしてgotoを使うというなら
合わせてリソースをどのように安全に開放するかを説明しないといけない
場当たり的でない方法でね
そこをまったく説明できない以上お前はgotoおじさんと呼ばれ続ける
368デフォルトの名無しさん
2020/01/19(日) 15:20:52.99ID:fzpRtoDi >スコープをなくしてgotoを使う
なんか言ってることが変だと思ったらこんな条件付けてたのか。ブロックスコープ使えばいいじゃん。
なんか言ってることが変だと思ったらこんな条件付けてたのか。ブロックスコープ使えばいいじゃん。
369デフォルトの名無しさん
2020/01/19(日) 15:26:55.90ID:RfLx+x9F スコープを無くしてgotoで解放?
なんじゃそりゃ?
スコープを抜けないと解放されないぞ
なんじゃそりゃ?
スコープを抜けないと解放されないぞ
370デフォルトの名無しさん
2020/01/19(日) 15:27:43.53ID:PgEzQeWd371295
2020/01/19(日) 15:31:10.41ID:2MN/c8bt どんな劣悪な環境でも動く do{ } while(0); こそ絶対正義。
372デフォルトの名無しさん
2020/01/19(日) 15:33:51.15ID:RfLx+x9F373デフォルトの名無しさん
2020/01/19(日) 15:34:25.99ID:RfLx+x9F >>370の勘違いってことでいいのかな?
374デフォルトの名無しさん
2020/01/19(日) 15:42:01.04ID:PgEzQeWd375デフォルトの名無しさん
2020/01/19(日) 17:03:31.99ID:6jfPBIzz >>365
本来の「例外安全」の定義はもっと広い意味なのですが、あなたは、throwやcatchなどの「例外」が起きたときでもnewされたオブジェクトの削除などを行うという定義を採用されているようです。
break文を用いずにgoto文でブロックを脱出した場合でもオブジェクトは自動解放されるのをご存知ですか?
本来の「例外安全」の定義はもっと広い意味なのですが、あなたは、throwやcatchなどの「例外」が起きたときでもnewされたオブジェクトの削除などを行うという定義を採用されているようです。
break文を用いずにgoto文でブロックを脱出した場合でもオブジェクトは自動解放されるのをご存知ですか?
376デフォルトの名無しさん
2020/01/19(日) 17:07:28.86ID:PgEzQeWd377デフォルトの名無しさん
2020/01/19(日) 17:11:06.93ID:4SQs66uE378デフォルトの名無しさん
2020/01/19(日) 17:42:21.12ID:fzpRtoDi379デフォルトの名無しさん
2020/01/19(日) 18:24:30.09ID:6oeBvQPN 論点を増やそうとするのは苦しいやつの習性だね
380デフォルトの名無しさん
2020/01/19(日) 18:46:40.48ID:PgEzQeWd381デフォルトの名無しさん
2020/01/19(日) 18:52:29.41ID:6oeBvQPN そうだよ、変わんないよ
複合文だけでできることになんでわざわざdoなんて面倒くせえもん使わなきゃいけねえんだよ
複合文だけでできることになんでわざわざdoなんて面倒くせえもん使わなきゃいけねえんだよ
382デフォルトの名無しさん
2020/01/19(日) 18:52:32.23ID:PM2cmccN Rust使えばすべて解決。
383デフォルトの名無しさん
2020/01/19(日) 18:53:23.88ID:6oeBvQPN まさかとは思うがブレースを開くのにdoだかforだか何らかのキーワードが必要とでも思ってたか?
384デフォルトの名無しさん
2020/01/19(日) 18:56:46.75ID:PM2cmccN 俺は何の実績もないおまえの言うことより、あわしろいくや氏を信じるけどな。
385デフォルトの名無しさん
2020/01/19(日) 18:57:26.46ID:yjllCGTd >>378
噂のgotoおじさまもさすがにこのコードがいいなんて言わないでしょ
噂のgotoおじさまもさすがにこのコードがいいなんて言わないでしょ
386デフォルトの名無しさん
2020/01/19(日) 18:59:17.52ID:6oeBvQPN387デフォルトの名無しさん
2020/01/19(日) 19:00:40.10ID:PM2cmccN388デフォルトの名無しさん
2020/01/19(日) 19:01:36.43ID:4SQs66uE >>387
俺はお前のあわしろいくや氏は信用できるという言葉が信用できない
俺はお前のあわしろいくや氏は信用できるという言葉が信用できない
389デフォルトの名無しさん
2020/01/19(日) 19:02:52.67ID:PM2cmccN390デフォルトの名無しさん
2020/01/19(日) 19:15:30.92ID:ocqIlbpk 売名乙
391デフォルトの名無しさん
2020/01/19(日) 19:29:04.71ID:yQO+Nq01 まさか do while 構文が論点だと思ってたんかな?
まあ本当はgotoを推す正当性が全くなくてごまかしてるんだろうけれど。
てかgotoと例外安全性はかなり綿密に絡んだ話だろ。誤魔化しすぎだわ。
まあ本当はgotoを推す正当性が全くなくてごまかしてるんだろうけれど。
てかgotoと例外安全性はかなり綿密に絡んだ話だろ。誤魔化しすぎだわ。
392デフォルトの名無しさん
2020/01/19(日) 19:45:18.96ID:6oeBvQPN >>387
ヒゲ生やした教祖様のために死刑になった信者と同じだなw
ヒゲ生やした教祖様のために死刑になった信者と同じだなw
393デフォルトの名無しさん
2020/01/19(日) 19:46:34.82ID:fzpRtoDi394デフォルトの名無しさん
2020/01/19(日) 19:46:39.94ID:6oeBvQPN > かなり綿密に絡んだ話だろ
誤魔化しすぎというブーメランが脳天に突き刺さってるぞw
誤魔化しすぎというブーメランが脳天に突き刺さってるぞw
395デフォルトの名無しさん
2020/01/19(日) 19:54:00.26ID:yQO+Nq01 なるほど。。こりゃ話しても無駄だな。
396デフォルトの名無しさん
2020/01/19(日) 20:25:44.83ID:M/ehGL7C gotoと例外安全性がどう絡むのかわからんボスケテ;
397デフォルトの名無しさん
2020/01/19(日) 21:06:11.93ID:fzpRtoDi 話しても無駄以前に、結局gotoと例外安全がどう関係するのか一言も出てこなかったな。
398デフォルトの名無しさん
2020/01/19(日) 21:10:50.68ID:CSTVsvTH RAIIとgotoは混ぜられないだろ
399デフォルトの名無しさん
2020/01/19(日) 21:13:01.22ID:AinWVopR そらgotoでリソース開放ルーチンに飛ぶようなCスタイルのプログラム書くと
例外飛んできたときに死ぬって話でしょ
(いくらC++にfinallyが無いからってgotoでリソース開放ルーチンに飛ぶのはダメ)
ただし元々の質問には関係ない話なんだがな
ところでC++にfinallyが無いのはちょっと良くないよね
今となってはラムダで自作できるようになったからいいけど
例外飛んできたときに死ぬって話でしょ
(いくらC++にfinallyが無いからってgotoでリソース開放ルーチンに飛ぶのはダメ)
ただし元々の質問には関係ない話なんだがな
ところでC++にfinallyが無いのはちょっと良くないよね
今となってはラムダで自作できるようになったからいいけど
400デフォルトの名無しさん
2020/01/19(日) 21:16:51.88ID:fzpRtoDi >>398
その「混ぜる」って具体的にはどういうことを言ってるんだろう。
その「混ぜる」って具体的にはどういうことを言ってるんだろう。
401デフォルトの名無しさん
2020/01/19(日) 21:24:53.93ID:AinWVopR 基本的に break や return も生き先の決まった goto なので
余ほど変な使い方をしない限りRAIIと goto を混ぜれないって事はないよなぁ
むしろ RAII を使わないで goto でC系のリソース開放をしていた場合にハマるって話では
まぁでもこれは
do{
if( error ) break;
}while(0);
//開放処理
return;
でも同じことだし、元の質問には関係ないんだが
余ほど変な使い方をしない限りRAIIと goto を混ぜれないって事はないよなぁ
むしろ RAII を使わないで goto でC系のリソース開放をしていた場合にハマるって話では
まぁでもこれは
do{
if( error ) break;
}while(0);
//開放処理
return;
でも同じことだし、元の質問には関係ないんだが
402デフォルトの名無しさん
2020/01/19(日) 21:34:33.08ID:RfLx+x9F403デフォルトの名無しさん
2020/01/19(日) 21:40:42.19ID:RfLx+x9F404デフォルトの名無しさん
2020/01/19(日) 21:44:50.08ID:RfLx+x9F まあどっちでも大差ないけど
405デフォルトの名無しさん
2020/01/19(日) 21:47:25.68ID:RfLx+x9F {
{
if (...) goto label;
}
}
label:
これはbreakじゃ無理
{
if (...) goto label;
}
}
label:
これはbreakじゃ無理
406デフォルトの名無しさん
2020/01/19(日) 21:57:15.09ID:RfLx+x9F {
switch (...)
{
case ...: goto label;
}
}
label:
これも無理
switch (...)
{
case ...: goto label;
}
}
label:
これも無理
407デフォルトの名無しさん
2020/01/19(日) 22:11:05.36ID:ByUy1Erg while(0)とか意味不明なコードよりgotoでスコープ抜ける方がはるかにシンプルだわな
408デフォルトの名無しさん
2020/01/19(日) 22:15:20.58ID:RfLx+x9F 一応 do while(0) の使い方も覚えておいた方が良い
他人のコードを見たりマクロで使ったり
する事もあるだろうから
他人のコードを見たりマクロで使ったり
する事もあるだろうから
409デフォルトの名無しさん
2020/01/19(日) 22:17:28.52ID:JMAoH3/H 普段のdo whileもwhile(0)って書くなど弊害が出るのでやめた方がいい
410デフォルトの名無しさん
2020/01/19(日) 22:19:27.67ID:ByUy1Erg ループするつもりもないのにループの構文使うのは悪手だと思う
411デフォルトの名無しさん
2020/01/19(日) 22:27:26.89ID:RfLx+x9F >>409
日本語で
日本語で
412デフォルトの名無しさん
2020/01/19(日) 22:33:02.85ID:fzpRtoDi そこはまぁ、ループではあるけれども同時にbreakが使えるブロックでもあるわけで、
実際do-whileなんてほとんどがそういう使い方しかされていないわけだし。
ループできる構文でループしないのはbreakできる構文でbreakを使わないのと
同じようなものかと。
実際do-whileなんてほとんどがそういう使い方しかされていないわけだし。
ループできる構文でループしないのはbreakできる構文でbreakを使わないのと
同じようなものかと。
413デフォルトの名無しさん
2020/01/19(日) 22:36:02.43ID:JMAoH3/H414デフォルトの名無しさん
2020/01/19(日) 22:48:25.05ID:PgEzQeWd こんなささいな違いは個人の好みでいいと思う派
do-while使わない派の言い分もわからなくもないが、
ソースを読む場合gotoだってgoto先を確認しないと意図が理解できないだろ
label名を考える必要があるのもちょっとめんどい
なのでこんなのどっちでもいい
ちなみにrust方式もブロックの先頭にラベル付いてるのは若干違和感覚える
do-while使わない派の言い分もわからなくもないが、
ソースを読む場合gotoだってgoto先を確認しないと意図が理解できないだろ
label名を考える必要があるのもちょっとめんどい
なのでこんなのどっちでもいい
ちなみにrust方式もブロックの先頭にラベル付いてるのは若干違和感覚える
415デフォルトの名無しさん
2020/01/19(日) 22:50:45.02ID:RfLx+x9F >>413
誰か解説よろしく!
誰か解説よろしく!
416デフォルトの名無しさん
2020/01/19(日) 23:07:09.81ID:Wel1D6/w どっちのやり方でも構わないけど、リソース◯◯を自動解放するためのブロックだとか意図を示すコメントを付けておいてくれればそれでいい。
417デフォルトの名無しさん
2020/01/19(日) 23:13:56.14ID:AinWVopR ↑だからその方法だと例外安全が・・・
C++だとリソース開放は RAII か finally かしか幸せになれない
C++だとリソース開放は RAII か finally かしか幸せになれない
418デフォルトの名無しさん
2020/01/19(日) 23:17:22.36ID:RfLx+x9F その方法
ってどの方法?
ってどの方法?
419デフォルトの名無しさん
2020/01/19(日) 23:23:50.28ID:Wel1D6/w >>417
誤解させたかもしれないから補足すると、どっちのやり方もと言ったのはただのブロックかdo whileかという話のことで、どちらにせよスコープを抜けて破棄されることを想定していた。
解放ルーチンにとばすことは端から考えてなかったよ。
誤解させたかもしれないから補足すると、どっちのやり方もと言ったのはただのブロックかdo whileかという話のことで、どちらにせよスコープを抜けて破棄されることを想定していた。
解放ルーチンにとばすことは端から考えてなかったよ。
420デフォルトの名無しさん
2020/01/19(日) 23:47:54.15ID:L2mlhsAt 解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。
だからRAII、例外安全の話になってるわけだが
もう意地になって意味もわからずgotoにこだわってる馬鹿がいる。
だからRAII、例外安全の話になってるわけだが
もう意地になって意味もわからずgotoにこだわってる馬鹿がいる。
421デフォルトの名無しさん
2020/01/20(月) 00:05:06.10ID:ThUag/92 finally相当のデストラクタをラムダ式で渡すクラスのインスタンスを作ればいいじゃない、
で済まされてしまいそうだがやはりfinallyはあったほうがいい。
で済まされてしまいそうだがやはりfinallyはあったほうがいい。
422デフォルトの名無しさん
2020/01/20(月) 01:01:38.84ID:KvAer05C 「解放ルーチンにとばすくらいしかgotoの有用な使い方なんてねーだろ。」
って思えるぐらい、Cではこの技法が多用された
なぜなら真実は逆で
「gotoでとばすぐらいしか開放ルーチンをまとめる方法なんてねーだろ」
だったから多用された
A→Bでなくて、実はB→Aだったって話
なんだけど、あまりにもB→Aが多用されたから
数の暴力で逆のA→Bも成り立つと感覚的に思ってしまう
だが本当にそうだろうか、gotoに開放ルーチンに飛ばす以外の利用法は無いのだろうか
模索してみよう、というのがスレの流れ
スレがその流れになるのは自明で
何故ならC++においては「gotoで開放ルーチン」は例外安全の意味で完全な悪手になったから
初めから勘定に入らないし、考える意味もないし、議論の余地もない
他の利用方法を前提に話すのは当たり前で既定路線
って思えるぐらい、Cではこの技法が多用された
なぜなら真実は逆で
「gotoでとばすぐらいしか開放ルーチンをまとめる方法なんてねーだろ」
だったから多用された
A→Bでなくて、実はB→Aだったって話
なんだけど、あまりにもB→Aが多用されたから
数の暴力で逆のA→Bも成り立つと感覚的に思ってしまう
だが本当にそうだろうか、gotoに開放ルーチンに飛ばす以外の利用法は無いのだろうか
模索してみよう、というのがスレの流れ
スレがその流れになるのは自明で
何故ならC++においては「gotoで開放ルーチン」は例外安全の意味で完全な悪手になったから
初めから勘定に入らないし、考える意味もないし、議論の余地もない
他の利用方法を前提に話すのは当たり前で既定路線
423デフォルトの名無しさん
2020/01/20(月) 01:58:07.70ID:wNCym70P スレの流れはvectorの動的な解放手段についてです
424デフォルトの名無しさん
2020/01/20(月) 05:25:12.27ID:KSbNzMqr Javaはgotoを無くした先進設計だからな。
425デフォルトの名無しさん
2020/01/20(月) 07:11:09.70ID:SZK6NMcF426デフォルトの名無しさん
2020/01/20(月) 07:59:32.82ID:hWOi4sNW つまりgotoと例外安全がどうとか言っていた人はこんなC時代の技法を念頭に置いていたわけか。
if (fail) goto FINAL;
FINAL:
後始末
gotoとRAIIの相性が悪い、混ぜられないという話はまた別なのだろうか。
if (fail) goto FINAL;
FINAL:
後始末
gotoとRAIIの相性が悪い、混ぜられないという話はまた別なのだろうか。
427デフォルトの名無しさん
2020/01/20(月) 08:30:41.35ID:ItoFGwWk428デフォルトの名無しさん
2020/01/20(月) 09:55:56.39ID:SZK6NMcF429デフォルトの名無しさん
2020/01/20(月) 10:09:57.52ID:rZl1icD3430デフォルトの名無しさん
2020/01/20(月) 10:14:06.16ID:SZK6NMcF 保証しないってどこに書いてあったっけ?
431デフォルトの名無しさん
2020/01/20(月) 10:15:25.68ID:JGG/x92o432デフォルトの名無しさん
2020/01/20(月) 10:15:47.05ID:N9WxJN6X433デフォルトの名無しさん
2020/01/20(月) 10:17:29.98ID:N9WxJN6X もちろんclear()の仕様も確認しとけ
434デフォルトの名無しさん
2020/01/20(月) 10:18:17.03ID:ThUag/92 >>292 で実装依存の最適化について言及がある。
あるサイズを超えるまではヒープではなくスタックを使うことで高速実行を期待する実装はあり得ると思う。
vectorの具体例は知らないが、EASTL::basic_stringはそうやってる。
あるサイズを超えるまではヒープではなくスタックを使うことで高速実行を期待する実装はあり得ると思う。
vectorの具体例は知らないが、EASTL::basic_stringはそうやってる。
435デフォルトの名無しさん
2020/01/20(月) 10:40:56.82ID:SZK6NMcF >>433
だから、どこに書いてあったのかと聞いているんだが
だから、どこに書いてあったのかと聞いているんだが
436デフォルトの名無しさん
2020/01/20(月) 11:04:21.50ID:wNCym70P >>431の言う空の一時オブジェクトとswapという常套手段で解決するのに質問者のクズは場当たり的などと難癖をつけ、
さらにじゃあnew/deleteしろよというまっとうな意見にバカを言うななどとほざいた結果がこのくだらねえ流れだよ
さらにじゃあnew/deleteしろよというまっとうな意見にバカを言うななどとほざいた結果がこのくだらねえ流れだよ
437デフォルトの名無しさん
2020/01/20(月) 11:09:12.37ID:rZl1icD3 >>435
c++の規格書は有料だけど持ってんの?
ぐぐればstack overflowとかいくらでもひっかかるけど調べた?
これは割りと知られた仕様だと思うけどね
実際g++とかでやってみればわかるけどclearしてもcapacity変わんないから
c++の規格書は有料だけど持ってんの?
ぐぐればstack overflowとかいくらでもひっかかるけど調べた?
これは割りと知られた仕様だと思うけどね
実際g++とかでやってみればわかるけどclearしてもcapacity変わんないから
438デフォルトの名無しさん
2020/01/20(月) 11:14:14.45ID:wNCym70P 少なくともVC2019はclearでデストラクタが呼ばれてる
439デフォルトの名無しさん
2020/01/20(月) 11:20:47.48ID:N9WxJN6X >>438
それはvectorに格納した要素ごとのデストラクタの話であって、それらを格納するためにvector自身が確保した領域が解放されるわけではないだろ
それはvectorに格納した要素ごとのデストラクタの話であって、それらを格納するためにvector自身が確保した領域が解放されるわけではないだろ
440デフォルトの名無しさん
2020/01/20(月) 11:29:18.51ID:SZK6NMcF441デフォルトの名無しさん
2020/01/20(月) 11:53:45.15ID:JGG/x92o むしろclearで解放せず、capacityが減らないことを保証してほしいよね
capacity減らす手段は用意されているのだから
capacity減らす手段は用意されているのだから
442デフォルトの名無しさん
2020/01/20(月) 12:32:03.74ID:xWGHAxxP 結局何を保証して欲しがってるのかさっぱりわからんが
言語仕様はvectorの何やらはもちろん、deleteだってfreeだって、OSにメモリ領域を確実にお返しになる事なんか保証してない事は覚えておこうな
言語仕様はvectorの何やらはもちろん、deleteだってfreeだって、OSにメモリ領域を確実にお返しになる事なんか保証してない事は覚えておこうな
443デフォルトの名無しさん
2020/01/20(月) 12:33:54.17ID:RAANiraF444デフォルトの名無しさん
2020/01/20(月) 12:52:13.55ID:JGG/x92o >>443
いや空とswapすれば減るじゃん
いや空とswapすれば減るじゃん
445デフォルトの名無しさん
2020/01/20(月) 13:22:01.92ID:hv8WW6TF >>444
空とswapは場当たり的に見えて却下と質問者様がおっしゃったからこの論争になったんだぞ
空とswapは場当たり的に見えて却下と質問者様がおっしゃったからこの論争になったんだぞ
446デフォルトの名無しさん
2020/01/20(月) 13:22:46.08ID:SZK6NMcF447デフォルトの名無しさん
2020/01/20(月) 14:27:22.95ID:0GX6odYx 概出鴨試練蛾
do{...}while(0); と
{...} の違いって決定的なのは何かって
break; を入れられるかどうかだと思うんだけど
ループじゃないものに do{...}while(0); を使うのは可笑しいって派の人らは
後者に break; 入れられるようにしておけば良かっただけなんだよな
do{...}while(0); と
{...} の違いって決定的なのは何かって
break; を入れられるかどうかだと思うんだけど
ループじゃないものに do{...}while(0); を使うのは可笑しいって派の人らは
後者に break; 入れられるようにしておけば良かっただけなんだよな
448デフォルトの名無しさん
2020/01/20(月) 14:50:16.98ID:hv8WW6TF ループする気もないのにループ構文を使うのは誤解の元
同様のことは他にもいくつも手段はあるのにループを使う必要がない
モダンな書き方だと[&](){...}();
同様のことは他にもいくつも手段はあるのにループを使う必要がない
モダンな書き方だと[&](){...}();
449デフォルトの名無しさん
2020/01/20(月) 15:02:12.80ID:KVDidwnp 違うだろ
while使わないよ派はgotoで充分だろ
ブロックを抜けるbreakが欲しいのは現状while使うよ派だろ
while使わないよ派はgotoで充分だろ
ブロックを抜けるbreakが欲しいのは現状while使うよ派だろ
450デフォルトの名無しさん
2020/01/20(月) 15:15:43.28ID:0GX6odYx once{};
みたいな構文で良いんじゃね
マクロとか書けば
みたいな構文で良いんじゃね
マクロとか書けば
451デフォルトの名無しさん
2020/01/20(月) 15:21:36.51ID:hv8WW6TF マクロ()
ベターCとか03で脳みそ止まってんだろうなw
ベターCとか03で脳みそ止まってんだろうなw
452デフォルトの名無しさん
2020/01/20(月) 15:26:55.87ID:0GX6odYx C++スレだからlambdaでも許されるけどCだと使えないやん?
453デフォルトの名無しさん
2020/01/20(月) 15:29:38.41ID:hv8WW6TF ほぉ、じゃあお前はCで使える文法のみでC++を書いてんだな
ボケてんのか?
ボケてんのか?
454デフォルトの名無しさん
2020/01/20(月) 17:52:26.33ID:SZK6NMcF455デフォルトの名無しさん
2020/01/20(月) 20:28:01.32ID:KSbNzMqr 結局、gotoは使わないほうが良いのですか?
456デフォルトの名無しさん
2020/01/20(月) 20:51:28.03ID:SZK6NMcF { から } までを1命令と読めるようにするのにgotoは無用と言っているに過ぎない
そのようにまとめようとしていないときやgotoを使っても1命令と読める場合にまで
GOTO有害説に囚われ強弁するのは何も分かってないやつのすることということだ
そのようにまとめようとしていないときやgotoを使っても1命令と読める場合にまで
GOTO有害説に囚われ強弁するのは何も分かってないやつのすることということだ
457デフォルトの名無しさん
2020/01/20(月) 20:56:48.81ID:rZl1icD3 つまんないことに拘りすぎ
どっちでもええがな
どっちでもええがな
458デフォルトの名無しさん
2020/01/20(月) 21:36:31.23ID:hWOi4sNW >>448
今だとdo-whileでループする方が誤解の元になりそうな。
今だとdo-whileでループする方が誤解の元になりそうな。
459デフォルトの名無しさん
2020/01/20(月) 21:38:12.73ID:jzGRQ/VP #define BLOCK(stmt) do { stmt; } while(0);
BLOCK(
if (error) break;
);
BLOCK(
if (error) break;
);
460デフォルトの名無しさん
2020/01/20(月) 21:53:50.81ID:IuISEeYy do{}while(0)とか初めて見たけど
ダサすぎてそりゃ思いつかねーわwww
ダサすぎてそりゃ思いつかねーわwww
461デフォルトの名無しさん
2020/01/20(月) 21:55:40.09ID:dqQuCzGx 結局goto有害説に流されないオレカッケーが言いたいだけだろ?
それでもgotoが有効な場面なんかないけどな。禁止にしても問題なんかない。
それでもgotoが有効な場面なんかないけどな。禁止にしても問題なんかない。
462デフォルトの名無しさん
2020/01/20(月) 22:00:17.76ID:SZK6NMcF GOTO有害説に流されるのがオレカッケーと思っているようだな
アホwバカwww
禁止にしたら問題あるからlongjmpやthrowができてきたんだよ
アホwバカwww
禁止にしたら問題あるからlongjmpやthrowができてきたんだよ
463デフォルトの名無しさん
2020/01/20(月) 22:11:05.96ID:KSbNzMqr つまり、使わないほうが良いのですね。
なんとなくですがわかりました。
なんとなくですがわかりました。
464デフォルトの名無しさん
2020/01/20(月) 22:12:08.37ID:SZK6NMcF Javaから帰ってこなくていいからな
永久にバイバイ
永久にバイバイ
465デフォルトの名無しさん
2020/01/20(月) 22:30:44.49ID:dqQuCzGx466デフォルトの名無しさん
2020/01/21(火) 05:17:13.41ID:AnB6dumh >>459
while(0)の後ろにセミコロン付けちゃダメ
while(0)の後ろにセミコロン付けちゃダメ
467デフォルトの名無しさん
2020/01/21(火) 07:25:59.02ID:XinnYwlJ >>465
GOTO有害説に流されているという指摘は否定しないんだな?w
GOTO有害説に流されているという指摘は否定しないんだな?w
468デフォルトの名無しさん
2020/01/21(火) 08:47:12.47ID:pAPT/+0o469デフォルトの名無しさん
2020/01/21(火) 08:50:21.16ID:liyEgHWj470デフォルトの名無しさん
2020/01/21(火) 09:35:24.55ID:ecU7KawI gotoを使わないことが目的になって
余計分かりにくくしてるアホな例
余計分かりにくくしてるアホな例
471デフォルトの名無しさん
2020/01/21(火) 09:49:43.57ID:Hkcle0K4 goto論争はくだらない
一方でラムダ使ったループ脱出は議論の余地がある
これがエレガントに見えるのか
パズルに見えるのか
自分の場合どちらかといえば後者
ラムダ自体は多用するけど
一方でラムダ使ったループ脱出は議論の余地がある
これがエレガントに見えるのか
パズルに見えるのか
自分の場合どちらかといえば後者
ラムダ自体は多用するけど
472デフォルトの名無しさん
2020/01/21(火) 11:17:56.24ID:Sppu2iw7 盲目的にgoto=悪と信じて、かえって読みずらいコード書く奴ってほんとアホだよなあ
473デフォルトの名無しさん
2020/01/21(火) 13:51:41.32ID:XinnYwlJ >>470
ほんこれ
ほんこれ
474デフォルトの名無しさん
2020/01/21(火) 13:54:41.96ID:XinnYwlJ gotoの何が悪いのかわかってないやつをもう少しいたぶってやろうと思ってたけど
途中で可哀想になってきて答え書いてやってるのになあ。。。
途中で可哀想になってきて答え書いてやってるのになあ。。。
475デフォルトの名無しさん
2020/01/21(火) 18:52:44.87ID:xueGtX5x >>460
do { } while(0)
は自分は見たことがある。
忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、
マクロ全体が一つの分の用に実行されて欲しいことであったようだった。
#define マクロ名() do {\
・・・\
・・・\
} while(0)
のような感じだったと思う。
これなしで裸で書くより安全になる場合があった気がする。
do { } while(0)
は自分は見たことがある。
忘れてしまったが、確か、#define マクロの定義部分で使われていて、目的は、
マクロ全体が一つの分の用に実行されて欲しいことであったようだった。
#define マクロ名() do {\
・・・\
・・・\
} while(0)
のような感じだったと思う。
これなしで裸で書くより安全になる場合があった気がする。
476デフォルトの名無しさん
2020/01/21(火) 18:57:29.70ID:fxsKQzaN if (...) マクロ();
else ...
else ...
477デフォルトの名無しさん
2020/01/21(火) 18:57:46.39ID:xueGtX5x >>475
忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。
C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。
それで、
if (条件式)
マクロ関数名();
のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような
気がする。
忘れた。
忘れてしまったが、おぼろげながら何か以下の様なことに関連していたような記憶がある。
C/C++では、if 文の直後は {}がなくても書くことが出来てしまう。
それで、
if (条件式)
マクロ関数名();
のように書いた場合、マクロの定義部を単なる {} で書くより安全な場合があったような
気がする。
忘れた。
478デフォルトの名無しさん
2020/01/21(火) 19:00:56.98ID:xueGtX5x >>476
あ、その場合だね、多分。
#define aaa() {・・・}
と定義してしまった場合、
if (...) aaa();
else ...
と書くと、
if (...) {};
else ...
と展開されてしまい、else の部分がエラーになってしまう。ところが、
#define aaa() do {・・・} while(0)
と定義していると、
if (...)
do {} while(0);
else ...
と定義されて、正しく動作する。
あ、その場合だね、多分。
#define aaa() {・・・}
と定義してしまった場合、
if (...) aaa();
else ...
と書くと、
if (...) {};
else ...
と展開されてしまい、else の部分がエラーになってしまう。ところが、
#define aaa() do {・・・} while(0)
と定義していると、
if (...)
do {} while(0);
else ...
と定義されて、正しく動作する。
479デフォルトの名無しさん
2020/01/21(火) 19:03:11.04ID:xueGtX5x480デフォルトの名無しさん
2020/01/21(火) 19:11:44.38ID:jtyzl32v それは11年前のネタだからそうなってるけど現代C++ならラムダ式で書くべき内容
481デフォルトの名無しさん
2020/01/21(火) 19:19:17.16ID:fxsKQzaN マクロでしか書けない物もあるんだよ
482デフォルトの名無しさん
2020/01/21(火) 19:19:18.43ID:jXO8TLK9 大昔の工芸品みたいやな
483デフォルトの名無しさん
2020/01/21(火) 19:24:51.40ID:fxsKQzaN ていうかなぜラムダ式?
考える順は以下じゃない?
関数
インライン関数
テンプレート関数
マクロ
考える順は以下じゃない?
関数
インライン関数
テンプレート関数
マクロ
484デフォルトの名無しさん
2020/01/21(火) 19:35:47.16ID:jtyzl32v >>483
そこで回答されている
#define FOO(x) do { foo(x); bar(x); } while (0)
は
#define FOO(x) [&] { foo(x); bar(x); } ()
と簡潔に書ける
そのQAの内容は今のC++におけるdo-while(0)の有用性を示す内容ではない
そこで回答されている
#define FOO(x) do { foo(x); bar(x); } while (0)
は
#define FOO(x) [&] { foo(x); bar(x); } ()
と簡潔に書ける
そのQAの内容は今のC++におけるdo-while(0)の有用性を示す内容ではない
485デフォルトの名無しさん
2020/01/21(火) 20:01:36.85ID:fxsKQzaN ああ、そういうことか
do while に対するメリットがないと
互換性から do while を選ぶことになりそう
do while に対するメリットがないと
互換性から do while を選ぶことになりそう
486デフォルトの名無しさん
2020/01/21(火) 20:17:22.53ID:V9u70PsA ラムダ式はc++11からか
使えない環境は結構あるんだろうな
近付きたくない
使えない環境は結構あるんだろうな
近付きたくない
487デフォルトの名無しさん
2020/01/21(火) 20:20:59.68ID:m86EWX9f >>484
最適化前提にしないと代替とは言えないね
最適化前提にしないと代替とは言えないね
488デフォルトの名無しさん
2020/01/21(火) 20:21:55.39ID:OieZoAm+ そんな用途でマクロなんか使わねーわ。ばかか。
489デフォルトの名無しさん
2020/01/21(火) 21:35:08.93ID:XinnYwlJ スコープが効かねえ毒だかんな
490デフォルトの名無しさん
2020/01/21(火) 22:01:33.56ID:fxsKQzaN491デフォルトの名無しさん
2020/01/21(火) 22:03:37.86ID:XinnYwlJ __LINE__がいるのとかな
492デフォルトの名無しさん
2020/01/22(水) 00:05:18.86ID:LIwEls05 >>484
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
JavaScriptだとそうかいても速度差がないかもしれないけど、C++だと、
そう書いた場合は、関数を定義してから、マシン語の call 文でその関数が
呼び出されるので結構なオーバーヘッドとなる。
JavaScriptの場合は、どう書いてもオーバーヘッドがあるからそのくらいの
オーバーヘッドは体感速度に登ってこないのでどっちでも良いだけ。
493デフォルトの名無しさん
2020/01/22(水) 00:20:06.55ID:2biZgMt+ >>492
ラムダ式はインライン展開されるからオーバーヘッドにはならない
ラムダ式はインライン展開されるからオーバーヘッドにはならない
494デフォルトの名無しさん
2020/01/22(水) 01:14:20.96ID:eHIdhO0H error: no member named 'emplace_back' in 'std::__1::vector<int,
std::__1::allocator<int> >'; did you mean '__emplace_back'?
v.emplace_back(d);
^~~~~~~~~~~~
__emplace_back
/Library/Developer/CommandLineTools/usr/include/c++/v1/vector:696:10: note:
'__emplace_back' declared here
void __emplace_back(const value_type& __x) { push_back(__x); }
^
1 error generated.
push_backは普通に使えるんですけどemplace_backは何故か上記のようなエラーが出てしまいます
一応コンパイラに言われた通りに__emplace_backに変えれば動きはするんですが、普通にアンダーバーなしで
動かすにはどうしたらいいんでしょうか。環境はmacの10.14です。
std::__1::allocator<int> >'; did you mean '__emplace_back'?
v.emplace_back(d);
^~~~~~~~~~~~
__emplace_back
/Library/Developer/CommandLineTools/usr/include/c++/v1/vector:696:10: note:
'__emplace_back' declared here
void __emplace_back(const value_type& __x) { push_back(__x); }
^
1 error generated.
push_backは普通に使えるんですけどemplace_backは何故か上記のようなエラーが出てしまいます
一応コンパイラに言われた通りに__emplace_backに変えれば動きはするんですが、普通にアンダーバーなしで
動かすにはどうしたらいいんでしょうか。環境はmacの10.14です。
495デフォルトの名無しさん
2020/01/22(水) 01:26:38.05ID:2biZgMt+496デフォルトの名無しさん
2020/01/22(水) 09:21:16.15ID:RBeGE/46497デフォルトの名無しさん
2020/01/22(水) 09:24:55.75ID:dJnLloAw >>496
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
最適化するかしないか自分で選べるんだから、言語のせいじゃないと思うんだ。
498デフォルトの名無しさん
2020/01/22(水) 09:47:45.11ID:s6VTVCIo 最近というか昔からだなデバッグまわりがクソなのは
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
デバッグをないがしろにするなと
>>497
端的にテンプレートが原因だから言語のせい
というか誰のせいかどうでもいいから解を提供しろと
499デフォルトの名無しさん
2020/01/22(水) 10:28:10.49ID:dJnLloAw >>498
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
最適化設定を変えることが解になると思って言ったんだけど、そうはいかないことがあるの?
デバッグまわりがクソだと言うなら、相手はまずコンパイラ&デバッガのベンダであって、言語の標準化は
あんまり関係なくね?
500デフォルトの名無しさん
2020/01/22(水) 10:34:22.38ID:Oj6zQLXh インライン展開するかどうか含めて
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
最適化はコンパイラ依存
パフォーマンス測定やチューニングは
実際の環境でやらないと
可能性で言えばマクロが一番インライン展開の可能性が高い
(コンパイラが賢すぎて同一コードを共有するとかない限り)
501デフォルトの名無しさん
2020/01/22(水) 10:50:51.03ID:kHABv+Er マクロはソースの字面を読み替えるだけ
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
機械語の命令シーケンスを開いたサブルーチンにするインライン展開とは全く別な話
502デフォルトの名無しさん
2020/01/22(水) 12:06:37.54ID:OzkwmLpy >>500
マクロは、C言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
マクロは、C言語の時代から「前処理(preprocess)」として処理され、
コンパイル作業が入る前にその場にトークンとして展開されるだけと
仕様で決まっています。勝手に関数になる可能性はほぼ0です。
503デフォルトの名無しさん
2020/01/22(水) 12:28:55.61ID:S75Q14iC 挙動が仕様通りになるならコンパイラは何やってもいいんだよ(と仕様で決まってる)
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
マクロだったものに関数呼び出しを仕込むのもコンパイラの自由だ
実際同じ処理の塊があっちこっちに出てきたらまとめて関数(みたいなもの)にするコードサイズ最適化は普通にやる可能性がある
504デフォルトの名無しさん
2020/01/22(水) 12:40:53.73ID:Oj6zQLXh505デフォルトの名無しさん
2020/01/22(水) 13:12:02.54ID:kHABv+Er >>504
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが
マクロ展開は最適化が始まる前の話だつってんだよ、わかんねーやつだな
#define a(b,c) b * 2 + c * 2
a(x, y) //これは
x * 2 + y * 2 //こうしろというだけの指示で
(x + y) * 2 //このような変形は意味していないし
してはならない
a(x, y) * z //こういうとき困るだろうが
506デフォルトの名無しさん
2020/01/22(水) 13:18:49.85ID:kHABv+Er インライン展開されるかどうかは、そのコード片がマクロの展開結果かどうかには関係ないってことだぞ
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
こんなこと、いちいち言わなきゃわからんようだから付け足しておく
507デフォルトの名無しさん
2020/01/22(水) 13:34:41.13ID:S75Q14iC >>505
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
最適化をいつ始めるかなんてそれこそコンパイラ次第なんだけど
508デフォルトの名無しさん
2020/01/22(水) 13:41:29.12ID:yb939hMs つまりマクロはインライン展開されやすいという主張は引っ込めるわけだな
509デフォルトの名無しさん
2020/01/22(水) 13:43:39.56ID:yb939hMs 都合悪くなると
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
どうせいつもの手で逃げるだろうけどな
尻尾巻いたやり取りは残るぜ
510デフォルトの名無しさん
2020/01/22(水) 14:44:17.11ID:54HMiZ6v511デフォルトの名無しさん
2020/01/22(水) 14:49:21.64ID:kHABv+Er512デフォルトの名無しさん
2020/01/22(水) 14:51:21.39ID:54HMiZ6v 意図して出来るのは知ってるが
敢えてやらないんだよ
敢えてやらないんだよ
513デフォルトの名無しさん
2020/01/22(水) 15:11:37.83ID:s6VTVCIo >>499
デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして
最適化設定を変えるという解がナンセンス
そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない
デバッグのために最適化切ると激遅になる問題が散見されるという問題にたいして
最適化設定を変えるという解がナンセンス
そりゃpragma駆使して手で細かく切り替えりゃ可能だろうがそんなことやってられない
514デフォルトの名無しさん
2020/01/22(水) 15:11:48.33ID:kHABv+Er オマエガナー(aary
515デフォルトの名無しさん
2020/01/22(水) 15:13:12.36ID:kHABv+Er >>512
おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?
おまえが510で持ち出したような括弧が自動的に付くような規格改定が行われない理由を考えたことがあるか?
516デフォルトの名無しさん
2020/01/22(水) 15:13:39.10ID:Oj6zQLXh >>505
多分比較してる内容が噛み合ってない
マクロを展開した結果と直接記述と
が同じなのは当然
プリプロセッサなわけだから
そうじゃなくて
マクロ、インライン関数、通常の関数の比較の話
当然最適化の期待度は
マクロ(直接記述)>インライン関数>通常の関数
多分比較してる内容が噛み合ってない
マクロを展開した結果と直接記述と
が同じなのは当然
プリプロセッサなわけだから
そうじゃなくて
マクロ、インライン関数、通常の関数の比較の話
当然最適化の期待度は
マクロ(直接記述)>インライン関数>通常の関数
517デフォルトの名無しさん
2020/01/22(水) 15:18:02.26ID:Oj6zQLXh518デフォルトの名無しさん
2020/01/22(水) 15:32:14.07ID:s6VTVCIo >>499
ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ
でも例えばお前はSFINAE関連のデバッグどうやってるよ?
いくつかツールはあるが導入が難しいか頼りないものばかりだ
そんな状況がずっと続いている
このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれの主張
作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない
ベンダの責任っていうのは一見もっともでそれがまさにc++標準化メンバーのスタンスだ
でも例えばお前はSFINAE関連のデバッグどうやってるよ?
いくつかツールはあるが導入が難しいか頼りないものばかりだ
そんな状況がずっと続いている
このあたりが改善するには言語コアを設計する時点からどんなデバッグ機能が必要か考えるべきってのがおれの主張
作業フローを理解しない人が無邪気にこれが入ればさらにソースコード短く書けまっせレベルの議論で機能追加を考えるべきでない
519デフォルトの名無しさん
2020/01/22(水) 15:34:50.28ID:2biZgMt+ 機能を使うかどうかはお前の判断でお前の責任
勝手に機能使っておいて八つ当たりすんな
勝手に機能使っておいて八つ当たりすんな
520デフォルトの名無しさん
2020/01/22(水) 15:50:53.24ID:LkBGzo9o >ほんと標準化プロセスは現実のプロダクト開発に関わったことのない言語オタクの遊び場に見えるわ
+1
+1
521デフォルトの名無しさん
2020/01/22(水) 15:53:26.36ID:2biZgMt+ 江添みたいなのしかいない日本と違って、普通の国の委員は企業の代表として参加しているのでその指摘は的外れ
522デフォルトの名無しさん
2020/01/22(水) 15:57:43.58ID:OzkwmLpy >>503
関数になっているものを inline 展開する処理系は多数ありますが、
プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系
はめったにないのです。
また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと
するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ
できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に
あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。
まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが
ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。
関数になっているものを inline 展開する処理系は多数ありますが、
プログラマがせっかく展開して書いてあるものをわざわざ関数に戻す処理系
はめったにないのです。
また、そのような最適化は人間には簡単に思えるものですが、機械にやらせようと
するととても大変です。マクロ展開される前のマクロ関数の状態ならまだ
できるのですが、コンパイラの中で最適化層と前処理層がかけ離れた位置に
あるので、もしやりたければ最適化層だけでそれをやることになり処理がとても重くなります。
まず、コンパイル後に出来上がった中間コードのなかから同一のパターンを見出すのが
ものすごく時間が掛かります。それから全く同じではない場合への対処が機会は苦手です。
523デフォルトの名無しさん
2020/01/22(水) 15:57:58.58ID:kHABv+Er >>516
最後の2行とそれ以前が論理的に繋がってないぞ
最後の2行とそれ以前が論理的に繋がってないぞ
524デフォルトの名無しさん
2020/01/22(水) 15:58:35.89ID:kHABv+Er525はちみつ餃子 ◆8X2XSCHEME
2020/01/22(水) 18:28:00.61ID:lnnB9FBg >>516
> 当然最適化の期待度は
> マクロ(直接記述)>インライン関数>通常の関数
現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。
素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。
普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、
全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、
トレードオフになってる要素がある。
それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、
効果的でないならしないよ。
inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、
LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、
逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。
いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか?
速度が問題になってから実測しろよ。
状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。
> 当然最適化の期待度は
> マクロ(直接記述)>インライン関数>通常の関数
現代のコンパイラの最適化機構はかなり複雑で、どのように最適化が効くか予想するのは無理。
素朴な処理系ならなんらかの傾向がある場合もあると思うけど、一般化できるような話ではないよ。
普通の関数はインライン関数より呼び出しのコストは確かに大きいけど、
全体のコードサイズが大きくなるとキャッシュメモリからあふれやすいといった話もあって、
トレードオフになってる要素がある。
それに、主要なコンパイラは inline キーワードで修飾してもしなくてもインライン化が効果的ならインライン化するし、
効果的でないならしないよ。
inline 関数として定義すれば各コンパイル単位の中に必ず定義もあるわけだから、
LTO が有効ではない状況では結果的にインライン化しやすい条件がととのっているとは言えるんだけど、
逆に言えば LTO を有効に出来るならどうでもよくなるわけだし。
いずれにしても、そんな微々たる速度が気になるような場合ってそんなにあるか?
速度が問題になってから実測しろよ。
状況によってどうとでもなるんだから、具体的な状況を示さずにどれが速いとか言ったってかみ合うわけないだろ。
526デフォルトの名無しさん
2020/01/22(水) 18:44:11.63ID:0ayd3B3Q >>525
一般的な期待度の話
当然例外はある
コンパイル単位が別で
関数を定数パラメーターでコールした場合
なんかが差が大きくなる
レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール
もそれなりにオーバーヘッドとなる
同じコンパイル単位であれば
今のコンパイラではそれほど差は出ないが
組み込みのチープなコンパイラもまだまだ使われている
一般的な期待度の話
当然例外はある
コンパイル単位が別で
関数を定数パラメーターでコールした場合
なんかが差が大きくなる
レジスタ退避やスタックポインタのアラインメント調整、スタック拡張、AVXの準備関数コール
もそれなりにオーバーヘッドとなる
同じコンパイル単位であれば
今のコンパイラではそれほど差は出ないが
組み込みのチープなコンパイラもまだまだ使われている
>>501
お前さんは LISP のマクロを知らないのか?
お前さんは LISP のマクロを知らないのか?
528デフォルトの名無しさん
2020/01/22(水) 19:17:53.96ID:2biZgMt+ LISPの仕様がC++と何か関係ある?
529デフォルトの名無しさん
2020/01/22(水) 20:23:02.73ID:OSofFadI 関数とマクロの違いがlispだとわかりやすいから。
わかってないやつをあぶりだすのにはちょうどいい。
わかってないやつをあぶりだすのにはちょうどいい。
530デフォルトの名無しさん
2020/01/22(水) 20:38:48.35ID:F1N+c+gr マクロアセンブラのマクロは強力
531デフォルトの名無しさん
2020/01/22(水) 21:16:42.45ID:kHABv+Er >>527
で?
で?
532デフォルトの名無しさん
2020/01/22(水) 22:55:42.54ID:PNeen3jP LISPじゃー
LISPの場合はー
www
LISPの場合はー
www
533デフォルトの名無しさん
2020/01/22(水) 23:00:35.12ID:Ab6Q02+v QZが現れると大抵話が脱線するから放置しとこう。
534デフォルトの名無しさん
2020/01/23(木) 02:42:18.33ID:96Ez/jHv535デフォルトの名無しさん
2020/01/23(木) 05:39:34.44ID:ZM0XhcNb (CMakeスレがないっぽいので)
target_link_libraries(a.exe PRIVATE ${MPI_CXX_LIBRARIES})
↑${MPI_CXX_LIBRARIES}が定義されていなくても合法で、その場合何ともリンクしないということを期待してもOK?
それとも
if(MPI_FOUND) target_link_libraries(...) endif()
とすべき?
公式を見てもよく分からない
target_link_libraries(a.exe PRIVATE ${MPI_CXX_LIBRARIES})
↑${MPI_CXX_LIBRARIES}が定義されていなくても合法で、その場合何ともリンクしないということを期待してもOK?
それとも
if(MPI_FOUND) target_link_libraries(...) endif()
とすべき?
公式を見てもよく分からない
536デフォルトの名無しさん
2020/01/23(木) 07:08:06.76ID:Y+bt1zIi537デフォルトの名無しさん
2020/01/23(木) 09:24:40.33ID:cHzm9I9L >>534
デバッグに配慮してたらそんな糞機能入れないだろうね。
デバッグに配慮してたらそんな糞機能入れないだろうね。
538デフォルトの名無しさん
2020/01/23(木) 10:15:54.39ID:77XEoAHk 今日もgotoを使ってしまった・・・
539デフォルトの名無しさん
2020/01/23(木) 10:22:15.42ID:KV664nBl >>534
まず現在の問題の構造を考えて欲しい
c++はtemplateを使ってメタプログラミングを行うのはご存知の通り
でtemplateはチューリング完全だ
それだけの複雑さを持っている
それに対して一般人がやるデバッグはコンパイルが通って期待通り動くかエラーメッセージを見るかぐらいだろ?
これは原始的なprintfデバッグを行っているのと同じレベル
なのでまずストレートに考えると
メタプログラミングの結果が取得できること
コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
が必要
これがベストなのかはさておき、メタでないプログラミングでは当たり前なんだから
SFINAEをどうするかみたいな話の前にまずこういうところを整備すべきだった
ハードウェア依存じゃないのだから標準モデルを定めるのは可能だ
まず現在の問題の構造を考えて欲しい
c++はtemplateを使ってメタプログラミングを行うのはご存知の通り
でtemplateはチューリング完全だ
それだけの複雑さを持っている
それに対して一般人がやるデバッグはコンパイルが通って期待通り動くかエラーメッセージを見るかぐらいだろ?
これは原始的なprintfデバッグを行っているのと同じレベル
なのでまずストレートに考えると
メタプログラミングの結果が取得できること
コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
が必要
これがベストなのかはさておき、メタでないプログラミングでは当たり前なんだから
SFINAEをどうするかみたいな話の前にまずこういうところを整備すべきだった
ハードウェア依存じゃないのだから標準モデルを定めるのは可能だ
540デフォルトの名無しさん
2020/01/23(木) 10:45:58.41ID:77XEoAHk gotoを受け入れるとクリーンでわかりやすい実装が開ける。
・・・かもしれない。
・・・かもしれない。
541デフォルトの名無しさん
2020/01/23(木) 10:47:36.57ID:96Ez/jHv >>539
> メタプログラミングの結果が取得できること
> コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
> が必要
あったらいいなとは思うけど、必要(=可能になるまで機能を使わせるべきではない)とは思わないなぁ。
実行時プログラムについて言語規格側でデバッグのための特別な「標準モデル」が定められたりいてないけど、
現状でわりと使えるデバッガができてるし、コンパイラはあるけどデバッガは無いという環境や時代はあったし。
メタプログラミングだからといって機能追加に先立って特別な定めが要るという理屈はよくわからない。
> メタプログラミングの結果が取得できること
> コンパイラにデバッガ接続可能にしてメタプログラミングの実行がトレースできること
> が必要
あったらいいなとは思うけど、必要(=可能になるまで機能を使わせるべきではない)とは思わないなぁ。
実行時プログラムについて言語規格側でデバッグのための特別な「標準モデル」が定められたりいてないけど、
現状でわりと使えるデバッガができてるし、コンパイラはあるけどデバッガは無いという環境や時代はあったし。
メタプログラミングだからといって機能追加に先立って特別な定めが要るという理屈はよくわからない。
542デフォルトの名無しさん
2020/01/23(木) 11:24:46.56ID:Y+bt1zIi543デフォルトの名無しさん
2020/01/23(木) 11:27:54.87ID:y5HKK+ir constexpr関数内でgoto使えないのだから、gotoを避けることを目的とせざるを得ない場面はある。
544デフォルトの名無しさん
2020/01/23(木) 11:28:08.58ID:77XEoAHk breakとgotoを同一視するのも問題なのでは。
545デフォルトの名無しさん
2020/01/23(木) 11:28:57.23ID:Y+bt1zIi >>544
同一視ってGOTO有害説の中では完全に同じだよ
同一視ってGOTO有害説の中では完全に同じだよ
546デフォルトの名無しさん
2020/01/23(木) 11:31:15.88ID:y5HKK+ir goto有害説ではbreakとgotoは違うもの扱いしているよ
breakで出来ないことがgotoで出来ること自体を問題視しているのだから
breakで出来ないことがgotoで出来ること自体を問題視しているのだから
547デフォルトの名無しさん
2020/01/23(木) 11:31:46.35ID:77XEoAHk 誰かそんな説を唱えたのでしょうか。
548デフォルトの名無しさん
2020/01/23(木) 11:32:55.49ID:77XEoAHk 責任者出て来ーーい!!!
549デフォルトの名無しさん
2020/01/23(木) 11:33:01.12ID:Y+bt1zIi >>546
ほう、どう違う扱いをしているんだ?
ほう、どう違う扱いをしているんだ?
550デフォルトの名無しさん
2020/01/23(木) 11:34:43.98ID:y5HKK+ir gotoは使わないけどbreakは使うってのがgoto有害説じゃないの?
完全に別の扱いしているってことだろ
完全に別の扱いしているってことだろ
551デフォルトの名無しさん
2020/01/23(木) 11:35:44.43ID:77XEoAHk ぐ、ぐ、ぐぅの音も出ない。
552デフォルトの名無しさん
2020/01/23(木) 11:42:15.74ID:Y+bt1zIi553デフォルトの名無しさん
2020/01/23(木) 12:29:41.71ID:nmx8CMX3554デフォルトの名無しさん
2020/01/23(木) 13:56:33.40ID:VWfJLmDE555はちみつ餃子 ◆8X2XSCHEME
2020/01/23(木) 14:47:05.73ID:QRqIx1i6 break でも goto でもそれを使わなかったときにもっと複雑になるのなら使っていいよ。
クソみてぇなフラグを立ててループから抜けるよりは break の方がマシだろ?
使わなくても十分に良いなら使わない方がいいに決まってるけど、要るときに使わないのは馬鹿げた話。
現実にはクソな道具が役に立つクソな状況があるんだよ。
クソみてぇなフラグを立ててループから抜けるよりは break の方がマシだろ?
使わなくても十分に良いなら使わない方がいいに決まってるけど、要るときに使わないのは馬鹿げた話。
現実にはクソな道具が役に立つクソな状況があるんだよ。
556デフォルトの名無しさん
2020/01/23(木) 15:47:36.48ID:tCbubFOj do{...}while(0);
とかにしたくないとき
while(1){
...;
...;
break;
}
もたまに意図的に使う
とかにしたくないとき
while(1){
...;
...;
break;
}
もたまに意図的に使う
557デフォルトの名無しさん
2020/01/23(木) 16:22:12.67ID:77XEoAHk なにこれ悪行自慢。
558デフォルトの名無しさん
2020/01/23(木) 16:34:07.41ID:Y+bt1zIi >>556
breakしなかった場合の動作が違うじゃねえかよ
breakしなかった場合の動作が違うじゃねえかよ
559デフォルトの名無しさん
2020/01/23(木) 16:47:49.33ID:nmx8CMX3560デフォルトの名無しさん
2020/01/23(木) 16:49:27.20ID:77XEoAHk 通報しました。
561デフォルトの名無しさん
2020/01/23(木) 17:36:57.81ID:y5HKK+ir forやwhileもgotoのシンタックスシュガーだから使うなみたいな
562デフォルトの名無しさん
2020/01/23(木) 17:43:18.63ID:y5HKK+ir gotoって自由すぎて対応するlabelの場所によって意味が変わるから、自由に飛びたいとき以外に使うと分かりづらくなる。
breakやcontinueなら一連の処理の一部を飛ばすって意図がそれだけでわかるのだから、do{}while(0)だとgoto使うのと何を分かりやすくするかでトレードオフになる
breakやcontinueなら一連の処理の一部を飛ばすって意図がそれだけでわかるのだから、do{}while(0)だとgoto使うのと何を分かりやすくするかでトレードオフになる
563デフォルトの名無しさん
2020/01/23(木) 17:47:15.54ID:Y+bt1zIi do{} から以後が、それまでの話と繋がってねえぞ
それから break と continue のGOTO有害説における違いもわかってねえな
それから break と continue のGOTO有害説における違いもわかってねえな
564デフォルトの名無しさん
2020/01/23(木) 17:51:51.72ID:y5HKK+ir do while(0)+breakを使う->loopだと誤解する可能性がある
gotoを使う->labelの飛び先見ないと意図がわからない
ってどちらの分かりづらさを大きな問題とするかで、どちらが良いかの好みが別れる
これがトレードオフ
gotoを使う->labelの飛び先見ないと意図がわからない
ってどちらの分かりづらさを大きな問題とするかで、どちらが良いかの好みが別れる
これがトレードオフ
565デフォルトの名無しさん
2020/01/23(木) 17:53:42.62ID:y5HKK+ir まあdo while(0)と組み合わせるならcontinueの方が良い気もする
やっぱりretryしようと思ったときのために
やっぱりretryしようと思ったときのために
566デフォルトの名無しさん
2020/01/23(木) 18:00:56.01ID:AdSJ3UeH >>562
C++自体自由過ぎるから使わない方が良いぞ
C++自体自由過ぎるから使わない方が良いぞ
567デフォルトの名無しさん
2020/01/23(木) 18:04:36.92ID:y5HKK+ir 自由だから使い所はその自由度が必要なときってだけなのだが。
forのかわりにgotoでループさせる奴は正気じゃない
forのかわりにgotoでループさせる奴は正気じゃない
568デフォルトの名無しさん
2020/01/23(木) 18:12:02.33ID:AdSJ3UeH 関数もどこに飛ぶかわからないから
使いどころは必要な時だけだな
ポインタも同じ
使いどころは必要な時だけだな
ポインタも同じ
569デフォルトの名無しさん
2020/01/23(木) 18:52:22.63ID:77XEoAHk 関数はgotoと同じ。
570デフォルトの名無しさん
2020/01/23(木) 19:01:50.07ID:77XEoAHk >>566
やはりこれからはRustですか。
やはりこれからはRustですか。
571デフォルトの名無しさん
2020/01/23(木) 19:09:24.45ID:nmx8CMX3572デフォルトの名無しさん
2020/01/23(木) 19:19:26.28ID:5iKgMbK4573デフォルトの名無しさん
2020/01/23(木) 19:21:21.59ID:5iKgMbK4574デフォルトの名無しさん
2020/01/23(木) 19:22:06.67ID:77XEoAHk goto駆使してcoroutineというパターンは。
575デフォルトの名無しさん
2020/01/23(木) 19:22:49.44ID:nmx8CMX3 ループする気がないのにcontinueが入る可能性があるのか?
やっぱループ構文をループ以外の目的で使う奴はアホだわ
やっぱループ構文をループ以外の目的で使う奴はアホだわ
576デフォルトの名無しさん
2020/01/23(木) 19:23:30.77ID:5iKgMbK4577デフォルトの名無しさん
2020/01/23(木) 19:27:33.29ID:77XEoAHk >>552が答えを書かないのだが。
もしかして答えなんて持っていないのでは。
もしかして答えなんて持っていないのでは。
578デフォルトの名無しさん
2020/01/23(木) 19:32:56.95ID:rYLpH2kU function();
何をするかわからないから関数は使うべきじゃない
pointer;
何を指し示すかわからないからポインタは使うべきじゃない
何をするかわからないから関数は使うべきじゃない
pointer;
何を指し示すかわからないからポインタは使うべきじゃない
579デフォルトの名無しさん
2020/01/23(木) 19:36:22.66ID:5iKgMbK4 >>565 に聴いてくれ
580デフォルトの名無しさん
2020/01/23(木) 20:36:00.34ID:Y+bt1zIi581デフォルトの名無しさん
2020/01/23(木) 22:32:03.65ID:bkVRGJlU582デフォルトの名無しさん
2020/01/23(木) 22:33:01.52ID:glYn/cGw つまりCPUはgotoの嵐だからクソと
583デフォルトの名無しさん
2020/01/23(木) 22:54:05.78ID:nX/KPrtD584デフォルトの名無しさん
2020/01/23(木) 23:13:19.41ID:HgduJel4 gotoは高級の中にいきなり低級なことぶちこむから違和感あるんだろ
場当たり的で美しくないね
場当たり的で美しくないね
585デフォルトの名無しさん
2020/01/23(木) 23:28:17.91ID:2vcw1hg/ まえにSQLパーサを書いたときはgotoがすごく便利だった。
文法をそのままソースに反映できる感じ。
goto嫌いな人たちはどうやって書くのか見てみたい。
文法をそのままソースに反映できる感じ。
goto嫌いな人たちはどうやって書くのか見てみたい。
586デフォルトの名無しさん
2020/01/23(木) 23:35:42.82ID:M8BvdbFC そういえば、まだ構造化されてない昔のBASICは、構造化された今のBASICより人気があったのではないかと思うけど、行番号と goto 文の組み合わせはラベル名を考えなくて済むので便利であった。
そして、BASIC言語は分かり易くて易しい言語と言われていたのだから、goto文自体はそんなに理解や扱いが難しいものではない。
ただし、フローチャートを書いてから組まないと分かりにくいことがあったかも知れない。
逆に、今フローチャートを書く必要がある場面は少なくなったのはgoto分を使わずに書けるようになったからかも知れない。
そして、BASIC言語は分かり易くて易しい言語と言われていたのだから、goto文自体はそんなに理解や扱いが難しいものではない。
ただし、フローチャートを書いてから組まないと分かりにくいことがあったかも知れない。
逆に、今フローチャートを書く必要がある場面は少なくなったのはgoto分を使わずに書けるようになったからかも知れない。
587デフォルトの名無しさん
2020/01/23(木) 23:41:23.96ID:cHzm9I9L ここまで無理やりな擁護してまで使うほどの機能じゃねーだろバカか。
588デフォルトの名無しさん
2020/01/23(木) 23:43:47.47ID:LWLbtpQ/ gotoとかマクロとか話題に加齢臭漂ってるぞ
もうちょっと食いつく話題選べよ
もうちょっと食いつく話題選べよ
589デフォルトの名無しさん
2020/01/24(金) 00:03:07.60ID:M35o3kEk >>585
普通にテーブル駆動では。
普通にテーブル駆動では。
590デフォルトの名無しさん
2020/01/24(金) 01:08:48.99ID:nZbbrzXe main関数が呼び出される前にグローバル変数が初期化されますが、
これの初期化順を変更することは可能なのでしょうか?
これの初期化順を変更することは可能なのでしょうか?
591デフォルトの名無しさん
2020/01/24(金) 01:09:21.02ID:/4mdgZLq A、B、Cと言う順序で実行されるべき処理が
A、B、Cと言う順序で実行されれば良いのであって
それが上からA、B、Cの順で書いてあろうが
B, A, Cと書いてあるのをgotoでA、B、Cの実行順にしようが
スレッド1、2、3が同期をとりあってそれぞれA、B、Cの順で実行しようが
相違なるコールバック1、2、3がこの順で呼ばれるように仕組まれた上でそれぞれA、B、Cを実行しようが
B、Cの実行がラムダ式で書かれていてその定義がAより上にあってAの実行後に呼び出されようが
ぜんぜん問題ではない
A、B、Cと言う順序で実行されれば良いのであって
それが上からA、B、Cの順で書いてあろうが
B, A, Cと書いてあるのをgotoでA、B、Cの実行順にしようが
スレッド1、2、3が同期をとりあってそれぞれA、B、Cの順で実行しようが
相違なるコールバック1、2、3がこの順で呼ばれるように仕組まれた上でそれぞれA、B、Cを実行しようが
B、Cの実行がラムダ式で書かれていてその定義がAより上にあってAの実行後に呼び出されようが
ぜんぜん問題ではない
592デフォルトの名無しさん
2020/01/24(金) 01:10:48.48ID:/4mdgZLq 一方gotoなど使わなくとももっと酷い糞はいくらでも作れるのだから
gotoが駄目だと言い張る奴は精神が弱って
いるな!
gotoが駄目だと言い張る奴は精神が弱って
いるな!
593デフォルトの名無しさん
2020/01/24(金) 01:12:30.02ID:f1L6KzBl いや普通にA,B,Cの順で書けよ。
594デフォルトの名無しさん
2020/01/24(金) 01:15:32.35ID:eYFKJ4zI595デフォルトの名無しさん
2020/01/24(金) 06:17:01.23ID:z1Jr3gge596デフォルトの名無しさん
2020/01/24(金) 06:24:04.39ID:3pA3r7pN 初期化順序を制御したい事情なんていくらでもあるだろ
そういう事情があるにも関わらず
明示的な初期化処理で初期化しないのが問題なのであって
そういう事情があるにも関わらず
明示的な初期化処理で初期化しないのが問題なのであって
597デフォルトの名無しさん
2020/01/24(金) 07:10:40.32ID:O5UIpEDM >>585
SQLってBNFで書けるから普通にswitchで書けると思うけど
SQLってBNFで書けるから普通にswitchで書けると思うけど
598デフォルトの名無しさん
2020/01/24(金) 07:19:43.42ID:3pA3r7pN 書ける書けないと
適する適さない
は別
適する適さない
は別
599585
2020/01/24(金) 07:49:27.79ID:1D9sTu/S600デフォルトの名無しさん
2020/01/24(金) 10:04:25.17ID:M35o3kEk コンパイル時生成では普通。
601デフォルトの名無しさん
2020/01/24(金) 12:24:16.41ID:O5UIpEDM602デフォルトの名無しさん
2020/01/24(金) 12:25:13.21ID:O5UIpEDM >>599
ツール使うならコードまで生成させるだろ
ツール使うならコードまで生成させるだろ
603デフォルトの名無しさん
2020/01/24(金) 12:33:56.63ID:pOzkcTtY breakやらgotoやら、普通に関数作ってreturnすらば済む話なのになんでここまで盛り上がるかねぇ
604デフォルトの名無しさん
2020/01/24(金) 12:38:12.02ID:nymKNYgW >>601
わざわざgotoってのが意味不明
使用リソースや所要時間は非常に少ない
ただのジャンプ命令だから
少なくとも
わざわざ関数に分けるとか
わざわざ変数を使うとか
に比べればはるかに軽い
breakに比べれば
記述量が多いので
「わざわざ」という表現を使うことはあるだろう
わざわざgotoってのが意味不明
使用リソースや所要時間は非常に少ない
ただのジャンプ命令だから
少なくとも
わざわざ関数に分けるとか
わざわざ変数を使うとか
に比べればはるかに軽い
breakに比べれば
記述量が多いので
「わざわざ」という表現を使うことはあるだろう
605デフォルトの名無しさん
2020/01/24(金) 12:42:44.51ID:pOzkcTtY >>604
そんなエラーをgoto文で書いてる様なc++ソース読むのやだわw
そんなエラーをgoto文で書いてる様なc++ソース読むのやだわw
606デフォルトの名無しさん
2020/01/24(金) 12:47:41.41ID:nymKNYgW 無能自慢か
607デフォルトの名無しさん
2020/01/24(金) 12:48:34.30ID:j8mERSyw throwと同様の構文でgotoと同じコード生成する機能があれば良いのに
608デフォルトの名無しさん
2020/01/24(金) 13:03:30.24ID:O5UIpEDM609デフォルトの名無しさん
2020/01/24(金) 13:43:32.45ID:Jh2W8wsF わざわざ例外使わんでもgotoで十分なときも普通にある
gotoだから絶対ダメとか思ってそう
頭かたすぎ
gotoだから絶対ダメとか思ってそう
頭かたすぎ
610デフォルトの名無しさん
2020/01/24(金) 13:59:14.54ID:M35o3kEk 法律で禁止するべきだな。
611デフォルトの名無しさん
2020/01/24(金) 14:45:38.56ID:xfkHfIRp >>603
ループの途中での return か?
ループの途中での return か?
612デフォルトの名無しさん
2020/01/24(金) 16:31:56.03ID:NCsnJFfw >>609
逆にわざわざgoto使う例外って何よ?
そんな個別情報も渡せない上にわざわざラベル名前まで考えて、goto文使う方がめんどくさいだろ
あーあれか、throwよりgotoの方が打つ文字少ないから楽とかかw
逆にわざわざgoto使う例外って何よ?
そんな個別情報も渡せない上にわざわざラベル名前まで考えて、goto文使う方がめんどくさいだろ
あーあれか、throwよりgotoの方が打つ文字少ないから楽とかかw
613デフォルトの名無しさん
2020/01/24(金) 16:34:37.54ID:xfkHfIRp throw って、入れる catch を RTTI を使って探すという
結構なコストのかかることをするが goto や longjmp にはそれがない
結構なコストのかかることをするが goto や longjmp にはそれがない
614デフォルトの名無しさん
2020/01/24(金) 16:36:03.61ID:M35o3kEk 情報処理の教育を受けていると、大抵のものはステートマシンに見えるので、goto使いたくなるのかもしれない。
教育の有無で思考過程が違うので、使い道が理解できない人は使うことを禁じたほうが良い。
セキュリティにもかかわるので公安委員会直轄でgoto免許試験場を創設するべき。
教育の有無で思考過程が違うので、使い道が理解できない人は使うことを禁じたほうが良い。
セキュリティにもかかわるので公安委員会直轄でgoto免許試験場を創設するべき。
615デフォルトの名無しさん
2020/01/24(金) 16:58:54.60ID:Jh2W8wsF >>612
情弱かよw
「c++ goto 例外」でググれば検索結果の最初のほうだけでもこんなに出てくる
http://tomeapp.jp/archives/1029
http://www.thinkridge.com/modules/tinyd1/content/index.php?id=7
https://marycore.jp/coding/idioms-and-alternatives-for-goto-statement/
https://qiita.com/IL_k/items/2549cf2b3058a8e6c954
http://www.nurs.or.jp/~sug/soft/super/goto.htm
情弱かよw
「c++ goto 例外」でググれば検索結果の最初のほうだけでもこんなに出てくる
http://tomeapp.jp/archives/1029
http://www.thinkridge.com/modules/tinyd1/content/index.php?id=7
https://marycore.jp/coding/idioms-and-alternatives-for-goto-statement/
https://qiita.com/IL_k/items/2549cf2b3058a8e6c954
http://www.nurs.or.jp/~sug/soft/super/goto.htm
616デフォルトの名無しさん
2020/01/24(金) 17:00:51.44ID:M35o3kEk >>615
一番上のリンクだけ見ましたが、これはミスリードじゃないだろか。
一番上のリンクだけ見ましたが、これはミスリードじゃないだろか。
617デフォルトの名無しさん
2020/01/24(金) 17:06:28.80ID:M35o3kEk >>616
二番目のリンクも見ましたが、これはgoto代わりに例外を使うべきではないというお話ですよね。
例外の代わりにgoto使えという話ではないと思うんですよ。
「あれ?ifの代わりに例外使えるんじゃね?」とはならない。
同様に「あれ?gotoの代わりに例外使えるんじゃね?」ともなりません。
二番目のリンクも見ましたが、これはgoto代わりに例外を使うべきではないというお話ですよね。
例外の代わりにgoto使えという話ではないと思うんですよ。
「あれ?ifの代わりに例外使えるんじゃね?」とはならない。
同様に「あれ?gotoの代わりに例外使えるんじゃね?」ともなりません。
618デフォルトの名無しさん
2020/01/24(金) 17:08:06.93ID:M35o3kEk どれもしょぼいな。
本物のgoto使いはラベルを100個使うんですよ。
本物のgoto使いはラベルを100個使うんですよ。
619デフォルトの名無しさん
2020/01/24(金) 17:08:25.13ID:xfkHfIRp C++歴20年でこれか。。。例外が悲しいほどわかってない
620デフォルトの名無しさん
2020/01/24(金) 17:08:51.86ID:M35o3kEk あーお前らなっちゃいねえ。
gotoの使い方わかっちゃいねえ。
gotoの使い方わかっちゃいねえ。
621デフォルトの名無しさん
2020/01/24(金) 17:10:14.76ID:M35o3kEk gotoも例外も恐れなく使えと私は言いたい。
ただし、資格は必要でしょう。
ただし、資格は必要でしょう。
622デフォルトの名無しさん
2020/01/24(金) 17:11:56.02ID:KQhZ94n9 以下は 良い goto 文の使い方だと聞いたことがある。
・二重以上のブロックを抜けるために goto 文を使うこと。
・エラー処理。 <--- こう言われていたのは throw がなかった時代からだが、
今でも throw, catch を使うより効率が良いので使っても良い
と思われる。
・二重以上のブロックを抜けるために goto 文を使うこと。
・エラー処理。 <--- こう言われていたのは throw がなかった時代からだが、
今でも throw, catch を使うより効率が良いので使っても良い
と思われる。
623デフォルトの名無しさん
2020/01/24(金) 17:14:59.13ID:M35o3kEk >>622
はいはい、そういう人には、状態遷移図を書く癖をつけることをお勧めしていますよ。
はいはい、そういう人には、状態遷移図を書く癖をつけることをお勧めしていますよ。
624デフォルトの名無しさん
2020/01/24(金) 17:31:23.24ID:pLepfJlB ラムダ万能説
>>615 の1つ目の2など途中で打ち切りたいときはラムダさえあればgotoも例外もいらないことがわかる
if( [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}()
&&
...
&& [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}() ){
//正常終了
}
else{
//異常終了
}
>>615 の1つ目の2など途中で打ち切りたいときはラムダさえあればgotoも例外もいらないことがわかる
if( [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}()
&&
...
&& [?]{
...
if(//エラー発生時){
return false;
}
...
return true;
}() ){
//正常終了
}
else{
//異常終了
}
625デフォルトの名無しさん
2020/01/24(金) 17:33:42.84ID:pLepfJlB [?]は[&]だ
なんか間違えた
なんか間違えた
626デフォルトの名無しさん
2020/01/24(金) 17:42:43.43ID:NCsnJFfw627デフォルトの名無しさん
2020/01/24(金) 17:54:06.48ID:M35o3kEk ifより例外のほうが速いよ。
628デフォルトの名無しさん
2020/01/24(金) 17:58:29.21ID:xfkHfIRp629デフォルトの名無しさん
2020/01/24(金) 18:07:28.38ID:xfkHfIRp そもそも有名どころのコンパイラがだいたい例外禁止オプション持ってるのがどういう意味か考えてみろよ
630デフォルトの名無しさん
2020/01/24(金) 18:18:37.93ID:TKM+8NJM goto使わないで2重ループを抜けるのってどうするの?
631デフォルトの名無しさん
2020/01/24(金) 18:20:42.85ID:j8mERSyw >>628
throwが速いのは呼び出した関数がthrowする場合と戻り値で成否を返す場合の呼び出し元コード側の話だろ
余分な条件分岐命令が出力されない
代わりに例外発生時にスタック解析して例外処理用コード探すから物凄い時間がかかるが
throwが速いのは呼び出した関数がthrowする場合と戻り値で成否を返す場合の呼び出し元コード側の話だろ
余分な条件分岐命令が出力されない
代わりに例外発生時にスタック解析して例外処理用コード探すから物凄い時間がかかるが
632デフォルトの名無しさん
2020/01/24(金) 18:24:28.47ID:D9pKpEah goto 賛成派の意見
「例外使え」←「ネストが増えるから嫌」
「break使え」←「深い所から出るのに無駄なフラグ増やしたくない」
「例外使え」←「ネストが増えるから嫌」
「break使え」←「深い所から出るのに無駄なフラグ増やしたくない」
633デフォルトの名無しさん
2020/01/24(金) 18:31:46.19ID:xfkHfIRp ちげーよ
「例外使え」←言われなくても使ってるよ、gotoを禁止する理由になってねえ
「例外使え」←言われなくても使ってるよ、gotoを禁止する理由になってねえ
634デフォルトの名無しさん
2020/01/24(金) 18:33:01.12ID:3pA3r7pN goto禁止派はgotoの使い方を知らないだけ
知ってたら禁止しない
知ってたら禁止しない
635デフォルトの名無しさん
2020/01/24(金) 18:34:35.10ID:Ua1W7Zv2 gotoと例外のどちらかを禁止するなら例外を禁止したい
636デフォルトの名無しさん
2020/01/24(金) 18:37:16.31ID:3pA3r7pN Windowsの64bit環境って例外めちゃくちゃ遅いんだよね
例外が発生しない時はオーバーヘッド無いんだけど
32bitだと関数コールの度にオーバーヘッドが発生する
だから例外処理OFF機能がある
例外が発生しない時はオーバーヘッド無いんだけど
32bitだと関数コールの度にオーバーヘッドが発生する
だから例外処理OFF機能がある
637デフォルトの名無しさん
2020/01/24(金) 18:37:19.19ID:xfkHfIRp 確かに現状のC++例外はちょっと好かんところがある
いっそnested_exceptionとdynamic_castだけに統一したらどうだと思ったりする
いっそnested_exceptionとdynamic_castだけに統一したらどうだと思ったりする
638デフォルトの名無しさん
2020/01/24(金) 18:51:37.28ID:M35o3kEk おまえら全員間違ってる。
gotoは免許制にするべきで、一律に禁止するものでも許可するものでもない。
試験に合格した者だけ使うべき。
gotoは免許制にするべきで、一律に禁止するものでも許可するものでもない。
試験に合格した者だけ使うべき。
639デフォルトの名無しさん
2020/01/24(金) 18:53:22.09ID:M35o3kEk switchより例外のほうが速いよ。
640デフォルトの名無しさん
2020/01/24(金) 19:29:40.95ID:3pA3r7pN 例外はめちゃくちゃ遅い
641デフォルトの名無しさん
2020/01/24(金) 19:31:01.53ID:M35o3kEk それは機密だと言っただろうが。
642デフォルトの名無しさん
2020/01/24(金) 20:19:58.69ID:M35o3kEk 「もういいよ。オレがインデックス張ってやるから、まあ見てから言えよ。な?」
643デフォルトの名無しさん
2020/01/24(金) 20:28:57.95ID:f1L6KzBl まだしょうもないこと言い続けてんのかよ。
こういう糞議論を排除するってだけでもgotoを禁止する価値はあるな。
こういう糞議論を排除するってだけでもgotoを禁止する価値はあるな。
644デフォルトの名無しさん
2020/01/24(金) 20:31:46.05ID:M35o3kEk goto使いたいものが100万人いれば、更新費用1万円として100億になる。
gotoで事故を起こした場合、行政処分がある。
取り締まるためにgoto警察も必要。
gotoで事故を起こした場合、行政処分がある。
取り締まるためにgoto警察も必要。
645デフォルトの名無しさん
2020/01/24(金) 20:32:37.95ID:xfkHfIRp gotoじゃなくおまえらを排除すれば
問題の本質がわからんやつによる不毛な喧嘩≠議論はなくなる
化学調味料の永久ループと寸分違わねえ
問題の本質がわからんやつによる不毛な喧嘩≠議論はなくなる
化学調味料の永久ループと寸分違わねえ
646デフォルトの名無しさん
2020/01/24(金) 20:33:06.29ID:Ua1W7Zv2 例外免許とテンプレート免許と多重継承免許も必要
647デフォルトの名無しさん
2020/01/24(金) 20:51:07.84ID:K3PUU+GG なんでプログラマってこんな糞みたいな話題で延々と盛り上がるんだろうね
って、実は知ってるくせにってか
って、実は知ってるくせにってか
648デフォルトの名無しさん
2020/01/24(金) 21:08:30.67ID:O5UIpEDM >>614
ステートマシンでgotoって次のステートに直接飛ぶとか言ってるのか?
ステートマシンでgotoって次のステートに直接飛ぶとか言ってるのか?
649デフォルトの名無しさん
2020/01/24(金) 21:10:07.36ID:xfkHfIRp FSMとデータパスか、懐かしい。。。
650デフォルトの名無しさん
2020/01/24(金) 22:22:30.15ID:SKKziN9N ダイクストラの時代にとっくに決着した話をまだダラダラやってんのか
651デフォルトの名無しさん
2020/01/25(土) 00:30:42.18ID:sCkCqRFa 煽り9割マジ1割
ここはそうゆうインターネットです
ここはそうゆうインターネットです
652デフォルトの名無しさん
2020/01/25(土) 10:54:40.14ID:cxLY0DeL 大型goto免許必須なので。
653デフォルトの名無しさん
2020/01/25(土) 12:01:20.82ID:Fgzm1LAC 大型二種持ってるから大丈夫
654デフォルトの名無しさん
2020/01/25(土) 12:02:23.88ID:Fgzm1LAC クラスもポインタも免許制にしよう
655デフォルトの名無しさん
2020/01/25(土) 12:04:00.88ID:HbHTz3pb 絶対禁止と思っているやつは全員不合格
つーより事前審査で門前払い
つーより事前審査で門前払い
656デフォルトの名無しさん
2020/01/25(土) 12:08:19.96ID:Fgzm1LAC 絶対禁止と本気で思ってるヤツはいないだろ
gotoが無ければ2重ループも抜けられない
gotoが無ければ2重ループも抜けられない
657デフォルトの名無しさん
2020/01/25(土) 12:11:48.46ID:gDStPvND gotoおじさん達いい加減にこの話終わりにしてくれない?
久しぶりに自分が参加できる話題だからってはりきりすぎでしょ
久しぶりに自分が参加できる話題だからってはりきりすぎでしょ
658デフォルトの名無しさん
2020/01/25(土) 12:12:11.62ID:xcQv9a+F Open Jane がDelphiで書かれたように
5ちゃんねるブラウザがC++で書かれたら
嬉しいんだけどね
5ちゃんねるブラウザがC++で書かれたら
嬉しいんだけどね
659デフォルトの名無しさん
2020/01/25(土) 12:28:41.85ID:bvJDNhpJ660デフォルトの名無しさん
2020/01/25(土) 12:30:46.81ID:Fgzm1LAC じゃ次は生ポについて
661デフォルトの名無しさん
2020/01/25(土) 12:38:02.14ID:cxLY0DeL 哲学的問題だから、森村進の意見も聞くべき。
662デフォルトの名無しさん
2020/01/25(土) 13:18:54.05ID:oEqdrxlM663デフォルトの名無しさん
2020/01/25(土) 13:54:31.32ID:cxLY0DeL 宣伝乙。
NHKが来たぞーにげろー。
NHKが来たぞーにげろー。
664デフォルトの名無しさん
2020/01/25(土) 13:55:49.58ID:FepESkjd 江添亮の本でstd::cout<<""にs付けろって書いてたんだけどsつけたらエラーになる
665デフォルトの名無しさん
2020/01/25(土) 13:59:45.43ID:HbHTz3pb666デフォルトの名無しさん
2020/01/25(土) 14:01:45.73ID:HjVTkheD667デフォルトの名無しさん
2020/01/25(土) 14:25:20.83ID:cxLY0DeL とまあこのように、江添先生の本は、すべて理解してる人にしか理解できません。
668デフォルトの名無しさん
2020/01/25(土) 14:32:55.37ID:HbHTz3pb 幼稚園児が大学の図書館へ行っても読める本ないのと同じだな
無理しないで「ぐりとぐら」くらいから始めとけ
無理しないで「ぐりとぐら」くらいから始めとけ
669デフォルトの名無しさん
2020/01/25(土) 14:53:05.04ID:cxLY0DeL はい、江添釣れたー。
670デフォルトの名無しさん
2020/01/25(土) 14:56:16.54ID:HbHTz3pb 残念、俺は江添じゃない
興味のツボは奴と似てるとこあるけどね
興味のツボは奴と似てるとこあるけどね
671デフォルトの名無しさん
2020/01/25(土) 15:45:58.72ID:136JVXqR >>666
そんなこと書いてなかった
そんなこと書いてなかった
672はちみつ餃子 ◆8X2XSCHEME
2020/01/25(土) 15:52:56.31ID:NV/40SqZ 普通の文字列リテラルが char 型の配列であるというのは (初心者には) 分かり難いので、
いっそ一貫して std::string 型で扱うというのは悪くない方針だと思う。
だけどユーザー定義リテラルという枠組みもそれはそれでだいぶんアレな仕様なんで、どちらにしてもクソだよな。
いっそ一貫して std::string 型で扱うというのは悪くない方針だと思う。
だけどユーザー定義リテラルという枠組みもそれはそれでだいぶんアレな仕様なんで、どちらにしてもクソだよな。
673デフォルトの名無しさん
2020/01/25(土) 16:06:56.27ID:bbXnDJeu こんばんは、後藤です。
ところで ""s だけでは片手落ちな気がする
ちゃんと u""s みたいに文字コード指定しなかったら
string_literalsを使う意味ないような気がするんだけど
わしだけか
ところで ""s だけでは片手落ちな気がする
ちゃんと u""s みたいに文字コード指定しなかったら
string_literalsを使う意味ないような気がするんだけど
わしだけか
674デフォルトの名無しさん
2020/01/25(土) 16:09:53.49ID:lY+ErK7r >>656
関数で切り出してreturnしろカスが。
関数で切り出してreturnしろカスが。
675デフォルトの名無しさん
2020/01/25(土) 16:11:03.38ID:gDStPvND uがなかった時代でもなんとかなってたんだから意味なくはないだろ
676デフォルトの名無しさん
2020/01/25(土) 16:30:12.05ID:HjVTkheD 江添本は初心者向けと謳っていながらこのくらいわからん奴は帰れみたいな意思を感じる
677デフォルトの名無しさん
2020/01/25(土) 16:50:56.75ID:lY+ErK7r 初心者に内容を理解してほしいんじゃなくて俺すげーってことだけ理解しろってスタンスだからな。
むしろ理解されると大したことやってないのがバレると思ってるくらいだろ。
むしろ理解されると大したことやってないのがバレると思ってるくらいだろ。
678デフォルトの名無しさん
2020/01/25(土) 16:53:23.32ID:XvrYCXmQ C++はしたことがないが数学博士号のやつと高校卒業を一緒くたにするのが問題だろう
それぞれの学力で開始すべき章を設定するべきだ
できないとしたら著者の無能なので落胆することはない
それぞれの学力で開始すべき章を設定するべきだ
できないとしたら著者の無能なので落胆することはない
679デフォルトの名無しさん
2020/01/25(土) 16:58:57.12ID:cxLY0DeL 初心者がC++に入り込まないよう防御壁として江添先生が存在するのではないか。
680デフォルトの名無しさん
2020/01/25(土) 17:03:37.43ID:cxLY0DeL C++の道を行きたいなら、俺を倒してから行け。
ってことでは。
ってことでは。
681デフォルトの名無しさん
2020/01/25(土) 17:15:21.67ID:lY+ErK7r 張り合ったら明らかにプログラム書けなくなるだろ。。誤誘導すぎるわ。
682デフォルトの名無しさん
2020/01/25(土) 17:27:59.47ID:cxLY0DeL C++の前に立ちはだかる屈強な門番。
俺を倒せるものでなければ入門を認めぬ。
俺を倒せるものでなければ入門を認めぬ。
683はちみつ餃子 ◆8X2XSCHEME
2020/01/25(土) 18:19:41.41ID:NV/40SqZ グダグダな C++ をグダグダじゃなく説明するのは無理だろ。
どの本を見たって少なからずグダグダか物足りないかどっちか。
どの本を見たって少なからずグダグダか物足りないかどっちか。
684デフォルトの名無しさん
2020/01/25(土) 18:23:50.63ID:qDxhJtbw まぁ、実際の現場だと、c++なんてちょっと便利なC言語としてしか使われてないよ
未だにcharポインタやmalloc乱立してるし参照型すら使われてない。
クラスなんて関数まとめるnamespace代わりだし
未だにcharポインタやmalloc乱立してるし参照型すら使われてない。
クラスなんて関数まとめるnamespace代わりだし
685はちみつ餃子 ◆8X2XSCHEME
2020/01/25(土) 18:25:32.23ID:NV/40SqZ ひと昔前にstaticおじさんの話がバズったことあるけど、
たぶん現実にはけっこういるんだろうな。
たぶん現実にはけっこういるんだろうな。
686デフォルトの名無しさん
2020/01/25(土) 18:26:39.08ID:mY899MyV >>684
そんな現場もあるんだなw
そんな現場もあるんだなw
687デフォルトの名無しさん
2020/01/25(土) 18:32:00.68ID:4TCxFoUN ちゅうか、C++ 使うなら charポインタは必須だ。
使いたくないなら 別の言語を使ったほうがいい。
使いたくないなら 別の言語を使ったほうがいい。
688デフォルトの名無しさん
2020/01/25(土) 18:43:08.64ID:HjVTkheD Cのライブラリを使わない限り文字情報はすべてstringで済む
モダンC++の仕様はそういう範囲内での使用も許容している
モダンC++の仕様はそういう範囲内での使用も許容している
689デフォルトの名無しさん
2020/01/25(土) 18:45:55.89ID:mY899MyV c++ではchar*は文字列とは関係ない場面でよく使う
690デフォルトの名無しさん
2020/01/25(土) 18:51:29.47ID:t8q8NVJB691デフォルトの名無しさん
2020/01/25(土) 18:53:42.93ID:mY899MyV もともとc_strはnull終端されてた
それに合法的にnull文字を含むことが出来る時点でnull終端ではない
それに合法的にnull文字を含むことが出来る時点でnull終端ではない
692デフォルトの名無しさん
2020/01/25(土) 20:51:03.23ID:r+ZvoXtB >>684
いくらなんでもレベル低すぎるぞ
いくらなんでもレベル低すぎるぞ
694デフォルトの名無しさん
2020/01/25(土) 21:03:28.44ID:gDStPvND695デフォルトの名無しさん
2020/01/25(土) 21:16:51.56ID:HbHTz3pb696デフォルトの名無しさん
2020/01/25(土) 21:25:16.13ID:gDStPvND まぁデバッグの手法としてなくはない
ただその手のものは既存のものが腐るほどあるからそれ使った方がいい
ただその手のものは既存のものが腐るほどあるからそれ使った方がいい
>>694
>するしかない?
ええ、するしかないと思いますよ
>>695
>何のために new をグローバルオーバーロードしてるの?
無論 delete と対になっているかどうかをチェックするためですよ、こういうのは自分では出来ていると思っていても時々お漏らししてしまいますからね
まあ、C++11 以降は手抜きして make_shared することを覚えてしまってずいぶんと時間が経ちましたが、それでも生ポを使うときは new/delete をオーバーロードしますね
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51 line.143〜150
>するしかない?
ええ、するしかないと思いますよ
>>695
>何のために new をグローバルオーバーロードしてるの?
無論 delete と対になっているかどうかをチェックするためですよ、こういうのは自分では出来ていると思っていても時々お漏らししてしまいますからね
まあ、C++11 以降は手抜きして make_shared することを覚えてしまってずいぶんと時間が経ちましたが、それでも生ポを使うときは new/delete をオーバーロードしますね
https://mevius.5ch.net/test/read.cgi/tech/1434079972/51 line.143〜150
>>696
昔の borland c++ にはまさしくそのための、なんていうんだったんでしたっけ、そういうコンパイルスイッチがあって便利に使っていましたが、
今評価版を入手すると、それは clang ベースに変更されて、その機能がなくなってしまったんですよね…
昔の borland c++ にはまさしくそのための、なんていうんだったんでしたっけ、そういうコンパイルスイッチがあって便利に使っていましたが、
今評価版を入手すると、それは clang ベースに変更されて、その機能がなくなってしまったんですよね…
>>698
思い出した、bcc32 CodeGuard でしたっけ
思い出した、bcc32 CodeGuard でしたっけ
700デフォルトの名無しさん
2020/01/25(土) 23:17:56.01ID:gDStPvND >>697
それなりにプログラマ経験あるんだと思ってたけどmallocの中身知らないとはね
別にメモリ確保のsyscall直接使ってもいいんだぞ
むしろnewをリプレースしたい場合ってページ単位で処理したいときとかでしょ
ちなみにこれはデバッグで使うのも有用だぞ
unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
まぁそんなの自前でやる前にValgrindでも使えって話だけど
それなりにプログラマ経験あるんだと思ってたけどmallocの中身知らないとはね
別にメモリ確保のsyscall直接使ってもいいんだぞ
むしろnewをリプレースしたい場合ってページ単位で処理したいときとかでしょ
ちなみにこれはデバッグで使うのも有用だぞ
unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
まぁそんなの自前でやる前にValgrindでも使えって話だけど
701はちみつ餃子 ◆8X2XSCHEME
2020/01/25(土) 23:24:58.70ID:NV/40SqZ >>700
>それなりにプログラマ経験あるんだと思ってたけどmallocの中身知らないとはね
専ら win32api でやっているので、::HeapAlloc(::GetProcessHeap(), ...) とか ::HeapFree(::GetProcessHeap(), ...) だとは考えていましたし、数年前はそう置き換えていたこともありました。
>unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
これは初耳です。よろしければ、もう少しキーワードだけでいいので羅列していただけませんか
>それなりにプログラマ経験あるんだと思ってたけどmallocの中身知らないとはね
専ら win32api でやっているので、::HeapAlloc(::GetProcessHeap(), ...) とか ::HeapFree(::GetProcessHeap(), ...) だとは考えていましたし、数年前はそう置き換えていたこともありました。
>unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
これは初耳です。よろしければ、もう少しキーワードだけでいいので羅列していただけませんか
>>701
それはおそらく大丈夫だと思います
それはおそらく大丈夫だと思います
704デフォルトの名無しさん
2020/01/25(土) 23:36:38.54ID:nqs2x9Ls 関数で切り出すのは入出力がはっきりするというメリットはあるが
ループの内と外の依存性が高い場合に内を無理矢理関数分けすると
シグネチャに入力引数と出力引数(参照渡し)がぞろぞろ並ぶことになって
それはそれでお勧めしない
(関数の意味も不明確になりがちやし…
ループの内と外の依存性が高い場合に内を無理矢理関数分けすると
シグネチャに入力引数と出力引数(参照渡し)がぞろぞろ並ぶことになって
それはそれでお勧めしない
(関数の意味も不明確になりがちやし…
705デフォルトの名無しさん
2020/01/25(土) 23:52:12.30ID:gDStPvND >>702
そうだよwindowsならそのあたりだよ
あとVirtualAllocね
> >unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
> これは初耳です。よろしければ、もう少しキーワードだけでいいので羅列していただけませんか
new/deleteのたびにページ単位で確保・解放するんだよ
それこそVirtualAllocで
だから重いよ
そうするとdangling pointerでヒープ壊される問題があった場合、
壊しにいったら即セグフォルで止まるからデバッガつなげれば犯人特定できる
そうだよwindowsならそのあたりだよ
あとVirtualAllocね
> >unmapしてるところにアクセスしたらその時点で例外で止まるから原因特定が容易
> これは初耳です。よろしければ、もう少しキーワードだけでいいので羅列していただけませんか
new/deleteのたびにページ単位で確保・解放するんだよ
それこそVirtualAllocで
だから重いよ
そうするとdangling pointerでヒープ壊される問題があった場合、
壊しにいったら即セグフォルで止まるからデバッガつなげれば犯人特定できる
706デフォルトの名無しさん
2020/01/26(日) 00:43:59.41ID:F5s0MU2W >>686
そんな職場は大変だぞ
構造体だからって、triviallycopyableを満たさないクラスをわざわざvoidポインタに格納して、memcpyしたり
クラスをわざわざmallocしてコンストラクタ、デストラクタ飛ばしたり
const属性をキャストでわざわざ消して値変えられたり
そんな職場は大変だぞ
構造体だからって、triviallycopyableを満たさないクラスをわざわざvoidポインタに格納して、memcpyしたり
クラスをわざわざmallocしてコンストラクタ、デストラクタ飛ばしたり
const属性をキャストでわざわざ消して値変えられたり
707デフォルトの名無しさん
2020/01/26(日) 01:31:21.14ID:6ZE6/BGT ベターCなどとほざく連中がいかに馬鹿で愚かで有害かがよくわかる
708はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 01:32:21.70ID:zFvDGbzt まあそんなやつは C もまともに使えてなかったりするんだけどな。
709デフォルトの名無しさん
2020/01/26(日) 01:44:39.85ID:hLglXOws 中途半端にc++を持ち込んで現場を荒らすやつもいるからね
>>706 の状況はそういうところで見たことある
別にc++が書けるのがえらいわけじゃない
質の良いプロダクトをきっちり仕上げられる奴がえらい
まわりがc++わからないメンバーならcで書くか、
c++が必要というなら十分にチームでトレーニング行ってからだ
>>706 の状況はそういうところで見たことある
別にc++が書けるのがえらいわけじゃない
質の良いプロダクトをきっちり仕上げられる奴がえらい
まわりがc++わからないメンバーならcで書くか、
c++が必要というなら十分にチームでトレーニング行ってからだ
710はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 01:48:04.74ID:zFvDGbzt C から段階的に学んでいける (業務を止めずに) って D&E には書いてあるけど、
今の C++ じゃもう無理だと思うわ。
今の C++ じゃもう無理だと思うわ。
711はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 01:48:23.93ID:zFvDGbzt C++ は C++ としてそこそこの訓練はいるよな。
712デフォルトの名無しさん
2020/01/26(日) 02:05:13.00ID:Y1EGWiT/ はちみつ餃子がでてくると、どうもこんな時間に腹が減ってきていかん
713はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 02:10:39.45ID:zFvDGbzt 食えばいいじゃん。
714デフォルトの名無しさん
2020/01/26(日) 05:01:35.24ID:3a27Zr8u >>674
gotoの使い方を知らないと大変だね
gotoの使い方を知らないと大変だね
715デフォルトの名無しさん
2020/01/26(日) 07:41:47.19ID:Yuet6lAk >>683
禿4を少しは見習っていただきたい。
禿4を少しは見習っていただきたい。
716デフォルトの名無しさん
2020/01/26(日) 10:01:19.30ID:aNHbuwn9717デフォルトの名無しさん
2020/01/26(日) 10:06:55.53ID:BKKks8j/ >>714
関数切り出しできないと大変だね。(特に周りの人たちが。)
関数切り出しできないと大変だね。(特に周りの人たちが。)
718デフォルトの名無しさん
2020/01/26(日) 10:47:19.67ID:VrR0aqw1719デフォルトの名無しさん
2020/01/26(日) 10:53:32.15ID:1VU+FMua >>716
えっ?
C#
えっ?
C#
720デフォルトの名無しさん
2020/01/26(日) 10:56:24.48ID:ZSyO84gV テンプレートメタプログラミングはC++らしいとも思うけど全然別の言語になっている気がしないでもない
>>705
情報ありがとうございます
::VirtualAlloc() 系は書いてあることが難しい上に、ばっちゃの遺言「::HeapAlloc() を使え」もあって敬遠していましたが、ここで教えてもらったのもなにかの縁だからデバッグ用に試行してみようと思います
win32api の criticalsection と signal でやっていた(何かがまずくてstarvationに悩まされていました)のも
C++11 になって pthread が大幅に規格に取り込まれた以上、
C++11 の上からの mutex・cond 派に切り替えようか、とか、C++11 になってスタイル変更を考え中です
情報ありがとうございます
::VirtualAlloc() 系は書いてあることが難しい上に、ばっちゃの遺言「::HeapAlloc() を使え」もあって敬遠していましたが、ここで教えてもらったのもなにかの縁だからデバッグ用に試行してみようと思います
win32api の criticalsection と signal でやっていた(何かがまずくてstarvationに悩まされていました)のも
C++11 になって pthread が大幅に規格に取り込まれた以上、
C++11 の上からの mutex・cond 派に切り替えようか、とか、C++11 になってスタイル変更を考え中です
722デフォルトの名無しさん
2020/01/26(日) 11:32:39.48ID:loc7kxiY >>701
マウント失敗乙
マウント失敗乙
723デフォルトの名無しさん
2020/01/26(日) 11:33:18.98ID:3yHBwxN6 >>717
ループを抜ける為に関数を分けるようなアホと一緒に組むと大変だ
ループを抜ける為に関数を分けるようなアホと一緒に組むと大変だ
724デフォルトの名無しさん
2020/01/26(日) 11:41:25.57ID:VrR0aqw1 確かに大変だね
if breakしてる複合文を関数にするときにreturnとか言い出すやつは
longjmpだろうがって
if breakしてる複合文を関数にするときにreturnとか言い出すやつは
longjmpだろうがって
725デフォルトの名無しさん
2020/01/26(日) 12:03:53.99ID:aNHbuwn9 >>720
実際、別言語だと思う。
C++はtemplateや演算子のオーバーライドを使えば、ほぼ別言語をみなせるようなものを上に載せられる設計になっているので。
STLを使いまくるプログラミングの書き方だと、もはやCとは何の関連性もなくなってしまっている。
実際、別言語だと思う。
C++はtemplateや演算子のオーバーライドを使えば、ほぼ別言語をみなせるようなものを上に載せられる設計になっているので。
STLを使いまくるプログラミングの書き方だと、もはやCとは何の関連性もなくなってしまっている。
726デフォルトの名無しさん
2020/01/26(日) 12:09:22.76ID:BKKks8j/727デフォルトの名無しさん
2020/01/26(日) 12:12:08.41ID:bvl7bZIP どんな苦労?
728デフォルトの名無しさん
2020/01/26(日) 12:13:10.43ID:Yuet6lAk ネストするなら別のプログラムに切り分けましょう。
シェルから呼び出せばいいのです。
シェルから呼び出せばいいのです。
729デフォルトの名無しさん
2020/01/26(日) 12:18:30.55ID:Scuijf7t730デフォルトの名無しさん
2020/01/26(日) 12:39:03.45ID:aRFw4TjA >>727
「gotoダメ!絶対!教」の戒律を破ることじゃないかな。きっと身を裂かれるほどの苦しみなんだろうw
「gotoダメ!絶対!教」の戒律を破ることじゃないかな。きっと身を裂かれるほどの苦しみなんだろうw
731デフォルトの名無しさん
2020/01/26(日) 12:50:28.18ID:PjjUDKm0 いったん収まったと思ったら
また goto の話開始してて草
アスペ特融の拘りと言われても仕方がないな
また goto の話開始してて草
アスペ特融の拘りと言われても仕方がないな
732デフォルトの名無しさん
2020/01/26(日) 13:01:54.18ID:Yuet6lAk goto以外の話題を提供できないお前が悪い。
733デフォルトの名無しさん
2020/01/26(日) 14:36:31.44ID:VrR0aqw1 gotoの話で叩きのめされたやつが話題を変えたいのはわかったよ(ニヤニヤ
734デフォルトの名無しさん
2020/01/26(日) 17:07:41.56ID:aNHbuwn9 >>729
たしかにCもマクロを使えば結構何でも出来る。
だが、マクロを多用すると分かりにくくなるとも言われていたし、使い方によっては、ソースコードが全く別言語のようになってしまうことも知られていた。
それと同様の現象がSTLにおいては起きる事態になってしまっている。
たしかにCもマクロを使えば結構何でも出来る。
だが、マクロを多用すると分かりにくくなるとも言われていたし、使い方によっては、ソースコードが全く別言語のようになってしまうことも知られていた。
それと同様の現象がSTLにおいては起きる事態になってしまっている。
735デフォルトの名無しさん
2020/01/26(日) 17:09:16.11ID:jQnb27FW もっとマクロをリッチにしてほしい
736デフォルトの名無しさん
2020/01/26(日) 17:19:16.84ID:VrR0aqw1737デフォルトの名無しさん
2020/01/26(日) 17:21:00.68ID:aNHbuwn9 >>736
STLの作者は、自分では分かり易くしようとしているようでいて実際には逆に分かりにくくしてしまっている。
STLの作者は、自分では分かり易くしようとしているようでいて実際には逆に分かりにくくしてしまっている。
738デフォルトの名無しさん
2020/01/26(日) 17:22:57.37ID:Yuet6lAk STLは神がかってるけどな。
あの時代によく設計できたな。
あの時代によく設計できたな。
739デフォルトの名無しさん
2020/01/26(日) 17:23:15.02ID:aRFw4TjA >>735
自分で好きなようにプリプロセッサを実装すればいいんじゃね?
自分で好きなようにプリプロセッサを実装すればいいんじゃね?
740デフォルトの名無しさん
2020/01/26(日) 17:25:09.27ID:aRFw4TjA >>737
その分かりにくいの主語は、世間一般ではなくお前個人なんだろ。
その分かりにくいの主語は、世間一般ではなくお前個人なんだろ。
741デフォルトの名無しさん
2020/01/26(日) 17:33:33.23ID:jQnb27FW >>739
互換性
互換性
742デフォルトの名無しさん
2020/01/26(日) 17:42:50.97ID:VrR0aqw1 >>738
だよな
Cではmemsetやqsortにvoid*というリスキーなことをせざるを得なかったのを
関数テンプレートで型情報をきちんと面倒見るようにできたし
リニアサーチがない等のCライブラリの不備も解消した
そこに気付かないやつはプログラマとしての資質を問われる
だよな
Cではmemsetやqsortにvoid*というリスキーなことをせざるを得なかったのを
関数テンプレートで型情報をきちんと面倒見るようにできたし
リニアサーチがない等のCライブラリの不備も解消した
そこに気付かないやつはプログラマとしての資質を問われる
743デフォルトの名無しさん
2020/01/26(日) 17:50:07.66ID:loc7kxiY744デフォルトの名無しさん
2020/01/26(日) 17:53:28.80ID:loc7kxiY 最新仕様とか書いたらSTLが最新?とか言われそうなんで先に言っとくけど
マクロ(プリプロセス時メタプログラミング)を貶してテンプレートは持て囃すのはダブスタってことなんで誤解なきよう
マクロ(プリプロセス時メタプログラミング)を貶してテンプレートは持て囃すのはダブスタってことなんで誤解なきよう
745デフォルトの名無しさん
2020/01/26(日) 17:53:53.15ID:Yuet6lAk ただ俺としては右辺値参照の発見にノーベル賞を授与するべきだと思うんだよな。
これ人類史上でも大きな発見じゃないかと思うんだよな。
これ人類史上でも大きな発見じゃないかと思うんだよな。
746デフォルトの名無しさん
2020/01/26(日) 17:58:05.42ID:hLglXOws おれは真逆の感想
仕様が汚すぎる
仕様が汚すぎる
747デフォルトの名無しさん
2020/01/26(日) 17:58:55.41ID:hLglXOws 右辺値参照というよりmove全般のことね
748デフォルトの名無しさん
2020/01/26(日) 18:01:03.32ID:VrR0aqw1749デフォルトの名無しさん
2020/01/26(日) 18:05:34.93ID:Yuet6lAk STLにノーベル文学賞なんてオサレだと思わないか。
750デフォルトの名無しさん
2020/01/26(日) 18:05:38.96ID:VrR0aqw1 >>746
同感
そもそも左辺値参照にconstをつけたら右辺値を指せるなんて
珍妙なルールが招いた禍根を何とかする苦肉の策が右辺値参照だかんな
今ふり返って見るとconstなしの左辺値参照でもテンポラリを束縛できて
それを禁止したい場合のキーワードがあればよかったんだと思う
同感
そもそも左辺値参照にconstをつけたら右辺値を指せるなんて
珍妙なルールが招いた禍根を何とかする苦肉の策が右辺値参照だかんな
今ふり返って見るとconstなしの左辺値参照でもテンポラリを束縛できて
それを禁止したい場合のキーワードがあればよかったんだと思う
751はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 18:23:11.21ID:zFvDGbzt >>745
互換性を失わない形で性能にも寄与するのはすごい思い付きだと私も思った。
スマートポインタが充実する方向で良くなると思っていたので、
まさか参照を区別する形でコピーを避けるとは思いもよらなかった。
だけどなぁ……。 結局は後付けなんだよね。
互換性を捨てられないという制約の中ではこれ以上ない発明ではあっても、色々と不満はあるよ。
ムーブ自体は言語のコアに組み込まれた機能ではないから
ムーブ後の抜け殻をうっかりいじってもコンパイラは黙って通しちゃうし。
ムーブできるようにしようとすると実質としてはポインタの入れ替えになるから、
各クラス向けにカスタマイズしたスマートポインタを書いてるみたいなもんだ。
本来ならそんなのコンパイラの最適化で頑張ってなんとかすべきことだろ。
言語処理系の敗北の証にすら見える。
いや、良いとは思ってるんだよ。
間違いなく rvalue 参照は素晴らしい発明で、 C++ をより良くした。
でもまあいいことばかりでもないよねっていうちょっとした愚痴。
互換性を失わない形で性能にも寄与するのはすごい思い付きだと私も思った。
スマートポインタが充実する方向で良くなると思っていたので、
まさか参照を区別する形でコピーを避けるとは思いもよらなかった。
だけどなぁ……。 結局は後付けなんだよね。
互換性を捨てられないという制約の中ではこれ以上ない発明ではあっても、色々と不満はあるよ。
ムーブ自体は言語のコアに組み込まれた機能ではないから
ムーブ後の抜け殻をうっかりいじってもコンパイラは黙って通しちゃうし。
ムーブできるようにしようとすると実質としてはポインタの入れ替えになるから、
各クラス向けにカスタマイズしたスマートポインタを書いてるみたいなもんだ。
本来ならそんなのコンパイラの最適化で頑張ってなんとかすべきことだろ。
言語処理系の敗北の証にすら見える。
いや、良いとは思ってるんだよ。
間違いなく rvalue 参照は素晴らしい発明で、 C++ をより良くした。
でもまあいいことばかりでもないよねっていうちょっとした愚痴。
752デフォルトの名無しさん
2020/01/26(日) 18:23:51.73ID:XnsWA8uh STL使って混乱する状況てどんな時だ?
753デフォルトの名無しさん
2020/01/26(日) 18:26:11.67ID:jQnb27FW 構造体/クラスを戻り値にするっていう発想が無かった時代からのつぎはぎ拡張だから
754デフォルトの名無しさん
2020/01/26(日) 18:51:03.98ID:PjjUDKm0 そもそも構造体を=でコピー出来るのが始まりだからな
配列は=でコピーできないのにな
その辺一貫性なかった>C言語
配列は=でコピーできないのにな
その辺一貫性なかった>C言語
755はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 19:06:02.54ID:zFvDGbzt756デフォルトの名無しさん
2020/01/26(日) 19:07:43.07ID:PjjUDKm0 もしCが
構造体を参照するとポインタ相当になります
引数で渡すときも&つけなくても勝手にポインタになります
コピーするときはmemcpyしてください
って仕様だったらC++はどうなってたんだろうな
色々まずいことになるのは確か
構造体を参照するとポインタ相当になります
引数で渡すときも&つけなくても勝手にポインタになります
コピーするときはmemcpyしてください
って仕様だったらC++はどうなってたんだろうな
色々まずいことになるのは確か
757デフォルトの名無しさん
2020/01/26(日) 19:09:16.84ID:PjjUDKm0 ↑ただ、モダンな言語はむしろそういう仕様なんだよな
その代わりGCがあるが
しかし、それはそれで不便なのであった
その代わりGCがあるが
しかし、それはそれで不便なのであった
758デフォルトの名無しさん
2020/01/26(日) 19:23:48.53ID:VrR0aqw1 >>744
おまえさんは
#define STR char* //と、
typedef char* STR; //の違いが
わかってなさそうに見えてしまうが
違うよな?
コンパイラでないものによる字面の読み替えと
コンパイラによる意味の読み替えを
区別するのはダブスタか?
おまえさんは
#define STR char* //と、
typedef char* STR; //の違いが
わかってなさそうに見えてしまうが
違うよな?
コンパイラでないものによる字面の読み替えと
コンパイラによる意味の読み替えを
区別するのはダブスタか?
759デフォルトの名無しさん
2020/01/26(日) 19:38:43.16ID:loc7kxiY760デフォルトの名無しさん
2020/01/26(日) 19:41:08.78ID:loc7kxiY というかVCだとプリプロセスだけ済ませたソース見れるから、
時にテンプレートよりデバッグ楽かもしれない
時にテンプレートよりデバッグ楽かもしれない
761デフォルトの名無しさん
2020/01/26(日) 19:59:37.02ID:VrR0aqw1762はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 20:00:29.28ID:zFvDGbzt マクロを殺すためにどんだけ苦労してきたと思ってんだよ。
763デフォルトの名無しさん
2020/01/26(日) 20:01:26.51ID:hLglXOws またマクロの話かよ
ほんとロートルばっかだなここ
ほんとロートルばっかだなここ
764デフォルトの名無しさん
2020/01/26(日) 20:04:02.76ID:VrR0aqw1 >>762
ほんこれ
ほんこれ
765デフォルトの名無しさん
2020/01/26(日) 20:07:19.94ID:loc7kxiY766デフォルトの名無しさん
2020/01/26(日) 20:10:54.84ID:VrR0aqw1 >>765
744で言っているが?
744で言っているが?
767デフォルトの名無しさん
2020/01/26(日) 20:15:22.55ID:loc7kxiY768デフォルトの名無しさん
2020/01/26(日) 20:21:38.11ID:VrR0aqw1769デフォルトの名無しさん
2020/01/26(日) 20:22:20.72ID:loc7kxiY どんだけ都合のいい脳味噌してんだこいつ
770デフォルトの名無しさん
2020/01/26(日) 20:33:02.73ID:VrR0aqw1 どんな脳味噌と見て貰っても結構だ
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
771デフォルトの名無しさん
2020/01/26(日) 20:36:39.76ID:Yuet6lAk マクロとテンプレートが同じとかワロ。
772デフォルトの名無しさん
2020/01/26(日) 20:37:56.09ID:6ZE6/BGT Cと違うことを理由にC++を否定する奴たまにいるけど何なん?
なんでCを使わないんだ?
なんでCを使わないんだ?
773デフォルトの名無しさん
2020/01/26(日) 20:40:10.44ID:loc7kxiY お前の都合のいい解釈(プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていたのをtypedefやテンプレートに置き換える)を
そもそもダブスタとは言ってないんで貫くと取ってもらっていいが
それより>>759-760に対する回答はまだなの?
そもそもダブスタとは言ってないんで貫くと取ってもらっていいが
それより>>759-760に対する回答はまだなの?
774デフォルトの名無しさん
2020/01/26(日) 20:43:00.84ID:loc7kxiY775デフォルトの名無しさん
2020/01/26(日) 20:46:23.65ID:yXTxN+fl C言語にこそ、UnifideCallSyntax必要だと思うのだけど、入らないかねー。
関数オーバーロードと一緒に入ったらクラスなんかいらねっ。
関数オーバーロードと一緒に入ったらクラスなんかいらねっ。
776デフォルトの名無しさん
2020/01/26(日) 20:47:29.34ID:hLglXOws c++の専門家の皆さんに質問ですが
using F = int(int)
のように 戻りの型(引数の型) の形式で関数型を書けるようになったのってどのc++からなの?
あとこれを書ける場所ってusingとtemplate以外にある?
using F = int(int)
のように 戻りの型(引数の型) の形式で関数型を書けるようになったのってどのc++からなの?
あとこれを書ける場所ってusingとtemplate以外にある?
777デフォルトの名無しさん
2020/01/26(日) 20:50:40.79ID:VrR0aqw1 >>773
> プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていた
プリプロセス以外でマクロでどうにかするって意味がわからない
よって「ダブスタとは言ってない」の意味も俺には(おそらく、ここの誰にも)通じてない
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
> プリプロセス時ではなく型の文脈の問題までマクロでどうにかしていた
プリプロセス以外でマクロでどうにかするって意味がわからない
よって「ダブスタとは言ってない」の意味も俺には(おそらく、ここの誰にも)通じてない
744のダブスタ発言をおまえさんは貫くのか撤回するのか
立場を明らかにせよ
778デフォルトの名無しさん
2020/01/26(日) 20:58:53.64ID:loc7kxiY 相手に嫌な思いをさせたいだけの議論は辞めろ気持ち悪い
プリプロセス時の問題に遭遇したことが無いのならお前の方が資質に欠けるし経験も足りてない
>>734の言うことも俺の言う事もそら理解出来んだろう
話にならんよ
プリプロセス時の問題に遭遇したことが無いのならお前の方が資質に欠けるし経験も足りてない
>>734の言うことも俺の言う事もそら理解出来んだろう
話にならんよ
779デフォルトの名無しさん
2020/01/26(日) 21:03:26.54ID:BKKks8j/ c++11以降において「マクロをリッチにする」ってことの代替が
テンプレート、constexpr をリッチにするって方向だろう。
正しい方向だとは思わんが、方向性なり答えはうちだしてはいる。
テンプレート、constexpr をリッチにするって方向だろう。
正しい方向だとは思わんが、方向性なり答えはうちだしてはいる。
780デフォルトの名無しさん
2020/01/26(日) 21:11:06.46ID:loc7kxiY それはそれとしてプリプロセス時プログラミングもやりやすくして欲しいってだけのことだよ
(現実的に叶うとは思ってないが)
(現実的に叶うとは思ってないが)
781デフォルトの名無しさん
2020/01/26(日) 21:11:40.73ID:Yuet6lAk ワロリン。
782デフォルトの名無しさん
2020/01/26(日) 21:18:05.50ID:6ZE6/BGT Qtみたいに独自のプリプロセッサ作ればいいのでは
783デフォルトの名無しさん
2020/01/26(日) 21:19:49.89ID:hLglXOws c++の専門家の皆さま教えて下さい
auto a = +[](int b) { return b;};
このaの型は何ですか?
困っているので秒速でお願いします
auto a = +[](int b) { return b;};
このaの型は何ですか?
困っているので秒速でお願いします
784デフォルトの名無しさん
2020/01/26(日) 21:36:53.40ID:VrR0aqw1785デフォルトの名無しさん
2020/01/26(日) 21:37:51.54ID:VrR0aqw1 私事ですまんが
明日早いんでそろそろ失礼する
明日早いんでそろそろ失礼する
786デフォルトの名無しさん
2020/01/26(日) 21:39:54.66ID:loc7kxiY ワロタ
787デフォルトの名無しさん
2020/01/26(日) 21:46:54.67ID:VrR0aqw1 よかったなw
788デフォルトの名無しさん
2020/01/26(日) 21:54:18.57ID:loc7kxiY まともな反論できんのならはよ寝ろ
789蟻人間 ◆T6xkBnTXz7B0
2020/01/26(日) 21:59:37.91ID:TOQ25Lx5 >>783 int型。
---
君たちひまそうだね。暇だったら、こっちのソースでも見てくれないか?
https://github.com/katahiromz/ImagePocke/blob/master/ImagePocke.cpp
C++/Win32で書いてるんだけど。
ここからドロップした画像ファイルを表示可能にする予定。
画像読み込みにGDI+を使う予定。
---
君たちひまそうだね。暇だったら、こっちのソースでも見てくれないか?
https://github.com/katahiromz/ImagePocke/blob/master/ImagePocke.cpp
C++/Win32で書いてるんだけど。
ここからドロップした画像ファイルを表示可能にする予定。
画像読み込みにGDI+を使う予定。
790デフォルトの名無しさん
2020/01/26(日) 22:27:38.20ID:hLglXOws791デフォルトの名無しさん
2020/01/26(日) 22:46:48.37ID:Pq6RurGB ラムダに+をつけると関数ポインタになるなんてcppreferenceにもないけど常識なの?
792デフォルトの名無しさん
2020/01/26(日) 22:55:11.25ID:hLglXOws そうなんだよね
この仕様がどこで決められてるものかがよくわからない
ぐぐったら
ttps://stackoverflow.com/questions/18889028/a-positive-lambda-what-sorcery-is-this
というのが見つかってなんか built-in overload らしいんだけど
結局のところ関数オブジェクトに対する仕様がどこに書かれているのかよくわからない
でもわりとよく使ってる
この仕様がどこで決められてるものかがよくわからない
ぐぐったら
ttps://stackoverflow.com/questions/18889028/a-positive-lambda-what-sorcery-is-this
というのが見つかってなんか built-in overload らしいんだけど
結局のところ関数オブジェクトに対する仕様がどこに書かれているのかよくわからない
でもわりとよく使ってる
793はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 23:01:50.07ID:zFvDGbzt >>791
・ キャプチャしている変数がないクロージャは関数ポインタに変換可能であり、関数ポインタが必要なところでは暗黙に型変換される
・ クロージャに単項 + を適用することはできない (ので関数ポインタに型変換してから解釈される)
という合わせ技によって関数ポインタになる。
(キャプチャしてる変数があるときは変換できないよ)
・ キャプチャしている変数がないクロージャは関数ポインタに変換可能であり、関数ポインタが必要なところでは暗黙に型変換される
・ クロージャに単項 + を適用することはできない (ので関数ポインタに型変換してから解釈される)
という合わせ技によって関数ポインタになる。
(キャプチャしてる変数があるときは変換できないよ)
794デフォルトの名無しさん
2020/01/26(日) 23:05:52.70ID:Pq6RurGB 関数オブジェクトには関数ポインタへの暗黙の変換が存在して
operator+(T*)がそれ自身を返すからということね
operator+(T*)がそれ自身を返すからということね
795デフォルトの名無しさん
2020/01/26(日) 23:09:35.82ID:hLglXOws まじで?
たまたまできるってことなのか
なんか今後使うのためらうわw
たまたまできるってことなのか
なんか今後使うのためらうわw
796はちみつ餃子 ◆8X2XSCHEME
2020/01/26(日) 23:11:17.20ID:zFvDGbzt797デフォルトの名無しさん
2020/01/26(日) 23:14:39.96ID:hLglXOws798デフォルトの名無しさん
2020/01/27(月) 00:17:47.09ID:uhXUQTHO 普通に型宣言すればいいだけだよねこれ。
799デフォルトの名無しさん
2020/01/27(月) 00:18:13.23ID:8wq+eSeZ >>776
実験してないので間違ってるかもしれないが、
(型名)ptr で関数ポインタへキャストする場合、
( int(*)(int) )ptr
と書いても良いが、
( int(int) )ptr
と書いても良かったかも知れない。というのは、
typedef int (*FUNC)(int);
と書いても良いし、
typedef int FUNC(int);
と書いてもよかったり、関数型のポインタ pFunc に対して、
(*pFunc)(123);
と書いても良いし、
pFunc(123);
と書いても良い、とか。
実験してないので間違ってるかもしれないが、
(型名)ptr で関数ポインタへキャストする場合、
( int(*)(int) )ptr
と書いても良いが、
( int(int) )ptr
と書いても良かったかも知れない。というのは、
typedef int (*FUNC)(int);
と書いても良いし、
typedef int FUNC(int);
と書いてもよかったり、関数型のポインタ pFunc に対して、
(*pFunc)(123);
と書いても良いし、
pFunc(123);
と書いても良い、とか。
800デフォルトの名無しさん
2020/01/27(月) 00:19:00.09ID:jlvCAhZE >>776
C89 から関数型の表記としては解釈されるかと。
コンパイルが通る文脈は C++ まで無かったかもしれんけど。
C++ でも今のところ using とテンプレート引数以外では使えなさそう。
C89 から関数型の表記としては解釈されるかと。
コンパイルが通る文脈は C++ まで無かったかもしれんけど。
C++ でも今のところ using とテンプレート引数以外では使えなさそう。
801デフォルトの名無しさん
2020/01/27(月) 00:25:21.67ID:8wq+eSeZ >>799
一部、コンパイラが故意にエラーにする可能性は有るが、
int(*ptr)(int);
は、関数へのポインタ型の変数ptrの宣言。
int(*)(int)
は「関数へのポインタ型」そのもの。
int func(int);
は、関数のプロトタイプ宣言だが、内部処理的には関数型の変数 func を定義しているような
解釈がされた後、関数型の場合の特別な処理として変数ではなくプロトタイプ宣言に特別
処理がされる。そして、
int(int)
は「関数型」そのもの、という解釈になる。
よく見るとこれらに対抗関係が有ることが分かる。
なお、最後のint(int)はコンパイラの内部処理的には関数型そのものだという解釈になるが、
コンパイラがその場合に特別にエラーを出す処理系と出さない処理系があるかもしれない。
一部、コンパイラが故意にエラーにする可能性は有るが、
int(*ptr)(int);
は、関数へのポインタ型の変数ptrの宣言。
int(*)(int)
は「関数へのポインタ型」そのもの。
int func(int);
は、関数のプロトタイプ宣言だが、内部処理的には関数型の変数 func を定義しているような
解釈がされた後、関数型の場合の特別な処理として変数ではなくプロトタイプ宣言に特別
処理がされる。そして、
int(int)
は「関数型」そのもの、という解釈になる。
よく見るとこれらに対抗関係が有ることが分かる。
なお、最後のint(int)はコンパイラの内部処理的には関数型そのものだという解釈になるが、
コンパイラがその場合に特別にエラーを出す処理系と出さない処理系があるかもしれない。
802デフォルトの名無しさん
2020/01/27(月) 00:26:31.36ID:8wq+eSeZ >>801
対抗関係 ---> 対応関係
対抗関係 ---> 対応関係
803デフォルトの名無しさん
2020/01/27(月) 00:34:47.99ID:8wq+eSeZ >>801
何が言いたかったというと、戻り値(引数型) を解釈する新しい仕様が追加された
というより、数学の数式のようにみたときに一貫した規則に従っていることが
わかるということ。言葉で言えば、
「定義文に置いて、名前を除去すると型名になる」
という規則。
int func(int);
という定義文に置いて、名前であるのは func。だから、funcを除去した、
int(int)
は、funcの型名になる。名前funcの型は、「関数型」だから、これは関数型
という型名そのものとなる。
int a;
の場合、名前であるのは a で、aの型は、int型。だから、この定義文から
名前を除去した int は、int型ということになる。
int (*pFunc)(int);
の場合も、pFuncという変数の定義文であるが、この定義文における名前とは
pFuncであるので、pFuncを除去したところの
int (*)(int);
は、pFuncの型であるところの、「関数へのポインタ型」となる。
つまり、同じ法則にしたがっている。
何が言いたかったというと、戻り値(引数型) を解釈する新しい仕様が追加された
というより、数学の数式のようにみたときに一貫した規則に従っていることが
わかるということ。言葉で言えば、
「定義文に置いて、名前を除去すると型名になる」
という規則。
int func(int);
という定義文に置いて、名前であるのは func。だから、funcを除去した、
int(int)
は、funcの型名になる。名前funcの型は、「関数型」だから、これは関数型
という型名そのものとなる。
int a;
の場合、名前であるのは a で、aの型は、int型。だから、この定義文から
名前を除去した int は、int型ということになる。
int (*pFunc)(int);
の場合も、pFuncという変数の定義文であるが、この定義文における名前とは
pFuncであるので、pFuncを除去したところの
int (*)(int);
は、pFuncの型であるところの、「関数へのポインタ型」となる。
つまり、同じ法則にしたがっている。
804はちみつ餃子 ◆8X2XSCHEME
2020/01/27(月) 00:36:25.26ID:e3ktUGSY 関数型が暗黙に関数ポインタ型に型変換されるルールで引っ掛かってるってことかな?
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。
こういう特殊な変換ルールを強制するために std::decay がある。
関数型そのものは C++ が出現した最初から存在すると思うよ。 C にもあるもの。
こういう特殊な変換ルールを強制するために std::decay がある。
806デフォルトの名無しさん
2020/01/27(月) 02:13:11.97ID:DIOsR0tc RustってどれくらいC++に取って代わるんろうか
互換性以外でC++使う意味ない、みたいな時代はくる?
互換性以外でC++使う意味ない、みたいな時代はくる?
807デフォルトの名無しさん
2020/01/27(月) 02:15:18.60ID:an2yFfMH Rustの話はRustスレでやれ
布教すんな
布教すんな
808デフォルトの名無しさん
2020/01/27(月) 06:56:19.70ID:EVyt1Wcb >>783
スマートオブジェ
スマートオブジェ
809デフォルトの名無しさん
2020/01/27(月) 09:23:59.26ID:7jNlWdbx C++のライブラリはC++からしか使えないから最高なんです
何故ならヘッダという古臭い仕組みを採用しているからww
なおCOMは
何故ならヘッダという古臭い仕組みを採用しているからww
なおCOMは
810デフォルトの名無しさん
2020/01/27(月) 09:33:48.52ID:PH8qw3WE811デフォルトの名無しさん
2020/01/27(月) 10:29:36.60ID:nw3WJhJD >>783
[](int b) { return b;}; だけなら明らかにラムダ式の関数ポインタだけど
それをオーバーロードか何かの+で虚無と足し算してんの?
*[](int b) { return b;};
これは掛け算でもするの?
[](int b) { return b;}; だけなら明らかにラムダ式の関数ポインタだけど
それをオーバーロードか何かの+で虚無と足し算してんの?
*[](int b) { return b;};
これは掛け算でもするの?
812デフォルトの名無しさん
2020/01/27(月) 10:44:46.19ID:EVyt1Wcb 関数ポインタではない
スマートオブジェクトへのポインタだ
ただの関数ポインタならファンクタとして機能しない
スマートオブジェクトへのポインタだ
ただの関数ポインタならファンクタとして機能しない
813デフォルトの名無しさん
2020/01/27(月) 10:54:24.33ID:j8/I9hQ5 >>811
単項演算子の+だろ
単項演算子の+だろ
814デフォルトの名無しさん
2020/01/27(月) 11:22:15.92ID:PH8qw3WE815デフォルトの名無しさん
2020/01/27(月) 15:33:55.69ID:LGsyX1lU ラムダはデリゲートじゃねー。一個しか保持できんわな。
と遅レス。
と遅レス。
816デフォルトの名無しさん
2020/01/27(月) 15:47:35.27ID:uUAjQCPR ステートレスラムダって用語が出てこないんだね
stateless lambda
stateless lambda
817デフォルトの名無しさん
2020/01/27(月) 15:57:13.10ID:uUAjQCPR >>804
template <typename F>
void test(F&&) { cout << 1; }
void test(int(*)()) { cout << 2; }
int func() { return 0; }
int main()
{
test(func); //2
test([]{ return 0; }); //1
}
ステートレスラムダを関数ポインタに渡すのはconversionで
関数を関数ポインタに渡すときのlvalue translationとは違う
template <typename F>
void test(F&&) { cout << 1; }
void test(int(*)()) { cout << 2; }
int func() { return 0; }
int main()
{
test(func); //2
test([]{ return 0; }); //1
}
ステートレスラムダを関数ポインタに渡すのはconversionで
関数を関数ポインタに渡すときのlvalue translationとは違う
818デフォルトの名無しさん
2020/01/27(月) 16:03:26.06ID:uUAjQCPR lvalue transformationだ、これは失礼
820デフォルトの名無しさん
2020/01/27(月) 16:16:57.88ID:uUAjQCPR g++だと、これ通るw
auto closure = []{ return 0; };
using funcp = int(*)();
test(closure.operator funcp());
auto closure = []{ return 0; };
using funcp = int(*)();
test(closure.operator funcp());
821デフォルトの名無しさん
2020/01/27(月) 16:29:40.06ID:Xjs2F3Iq []の後()不要だっけ?
822デフォルトの名無しさん
2020/01/27(月) 16:30:47.83ID:an2yFfMH 引数がないなら省略可能
823はちみつ餃子 ◆8X2XSCHEME
2020/01/27(月) 17:56:21.86ID:e3ktUGSY >>814
ワイはどちらかというとはちみつより餃子の方にアイデンティティがあるので…・…
ワイはどちらかというとはちみつより餃子の方にアイデンティティがあるので…・…
824デフォルトの名無しさん
2020/01/27(月) 18:43:12.12ID:Be1ain3H >>822
勉強になりました。
勉強になりました。
825デフォルトの名無しさん
2020/01/27(月) 19:32:41.69ID:EVyt1Wcb826デフォルトの名無しさん
2020/01/28(火) 09:26:07.54ID:ClFSc0Tc しょうもないシンタックスシュガーの話が好きな奴多いね。
827デフォルトの名無しさん
2020/01/28(火) 10:18:33.58ID:iJMYk+LH gotoおじさんまた登場だよ
828デフォルトの名無しさん
2020/01/28(火) 10:25:01.77ID:ciqR13vi >>827
踊るポンポコリンの「インチキおじさん登場」を思い出した。あんまり間違ってないだろう。
踊るポンポコリンの「インチキおじさん登場」を思い出した。あんまり間違ってないだろう。
829デフォルトの名無しさん
2020/01/28(火) 10:44:40.68ID:wcDzWZFN ボコられるの好きなんか? 変態めw
830デフォルトの名無しさん
2020/01/28(火) 10:49:48.26ID:ivYV6JvB 物事は適切に伝えろ
それが出来ないなら口を開けるなカスども
それが出来ないなら口を開けるなカスども
831デフォルトの名無しさん
2020/01/28(火) 10:52:11.84ID:ivYV6JvB ラムダが関数ポインタとかほざいてるカスが居てびっくりしたわ
832デフォルトの名無しさん
2020/01/28(火) 11:05:50.35ID:AXFiEKC0 >>831
インライン展開されるから?
インライン展開されるから?
833デフォルトの名無しさん
2020/01/28(火) 11:12:08.47ID:tLdUC4IA834デフォルトの名無しさん
2020/01/28(火) 11:23:05.28ID:ijxMtirO 個人的にはテンプレートなのに糞のSTLよりも
マクロωのQtの方がうまくやれてる実用的だと思う
マクロωのQtの方がうまくやれてる実用的だと思う
835デフォルトの名無しさん
2020/01/28(火) 11:24:46.27ID:ijxMtirO >>758
typedefに夢観すぎ
typedefに夢観すぎ
836はちみつ餃子 ◆8X2XSCHEME
2020/01/28(火) 11:30:08.83ID:jIEBko3c まあ個人的な感想は個人的な感想だからなぁ。
俺は Qt に対してなんやこのクソはとしか思わんが、
広く使われている現実がある以上は実用性は高いんだろう。 たぶん。
俺は Qt に対してなんやこのクソはとしか思わんが、
広く使われている現実がある以上は実用性は高いんだろう。 たぶん。
837デフォルトの名無しさん
2020/01/28(火) 11:38:43.71ID:9AkNqXrr Qtのmocは何か嫌だ
838デフォルトの名無しさん
2020/01/28(火) 11:45:43.67ID:wcDzWZFN839デフォルトの名無しさん
2020/01/28(火) 12:03:55.62ID:AXFiEKC0 マクロを名前空間に閉じ込められるようになれば、マクロの害悪の何割かは減らせるはず。
840デフォルトの名無しさん
2020/01/28(火) 15:45:53.30ID:wcDzWZFN ということは名前空間をプリプロセッサが処理せにゃあかんな
translation phaseを根本的にぶっ壊さないと無理だと思うが
translation phaseを根本的にぶっ壊さないと無理だと思うが
841デフォルトの名無しさん
2020/01/28(火) 16:34:43.00ID:ogCuVxV7 typedefが駄目で、usingが好まれる理由を教えてください。
842デフォルトの名無しさん
2020/01/28(火) 16:38:19.30ID:AXFiEKC0 否定的な視点から散々な言われ方をされがちなC/C++のマクロだけど、
Java/C#/Python/Pwel/Rubyに似たテキスト変換がないことに物足りなさを感じることが多いのも事実。
Java/C#/Python/Pwel/Rubyに似たテキスト変換がないことに物足りなさを感じることが多いのも事実。
843はちみつ餃子 ◆8X2XSCHEME
2020/01/28(火) 16:39:59.59ID:jIEBko3c >>841
私が思いつくのは
・ using は名前を導入するという一巻した意味規則がわかりやすいから
・ using はテンプレートに出来るから
・ typedef だと複雑な型定義をするときに肝心の新しい名前が中の方にあって見づらい
私が思いつくのは
・ using は名前を導入するという一巻した意味規則がわかりやすいから
・ using はテンプレートに出来るから
・ typedef だと複雑な型定義をするときに肝心の新しい名前が中の方にあって見づらい
844デフォルトの名無しさん
2020/01/28(火) 16:44:17.01ID:AXFiEKC0 typo。PwelじゃなくてPerl。Perlはめっきり影が薄くなった。
PerlはGit for Windowsにバンドルされているので世の中の大部分のプログラマーがすぐに使える環境にあるのだが、
Git本体はPerl依存を減らす方向に進んでいるらしい。
PerlはGit for Windowsにバンドルされているので世の中の大部分のプログラマーがすぐに使える環境にあるのだが、
Git本体はPerl依存を減らす方向に進んでいるらしい。
845はちみつ餃子 ◆8X2XSCHEME
2020/01/28(火) 16:44:19.67ID:jIEBko3c >>842
Cプリプロセッサを Java やら Python やらにつこうてもええんやで。
そういえば cpp を使うことを (習慣的に) 想定してる言語って C/C++ を除けばHaskell (GHC) くらい?
汎用プリプロセッサとして使うなら M4 あたりの方が賢いしなぁ……。
Cプリプロセッサを Java やら Python やらにつこうてもええんやで。
そういえば cpp を使うことを (習慣的に) 想定してる言語って C/C++ を除けばHaskell (GHC) くらい?
汎用プリプロセッサとして使うなら M4 あたりの方が賢いしなぁ……。
846デフォルトの名無しさん
2020/01/28(火) 17:01:24.18ID:wcDzWZFN >>841
たとえばこういう場合
#define STR char*
STR a, b; //これ、どうなる?
もしこうなっていたら
using STR = char*;
STR a, b; //これはどうだ?
おまえさんの好みに合うのはどっちだ?
そこに答えがある
たとえばこういう場合
#define STR char*
STR a, b; //これ、どうなる?
もしこうなっていたら
using STR = char*;
STR a, b; //これはどうだ?
おまえさんの好みに合うのはどっちだ?
そこに答えがある
847デフォルトの名無しさん
2020/01/28(火) 17:02:35.33ID:wcDzWZFN848デフォルトの名無しさん
2020/01/28(火) 17:12:58.09ID:ijxMtirO typedef も using もエイリアスという点では
char * と STR の区別が出来ないから後で困る
char * と STR の区別が出来ないから後で困る
849デフォルトの名無しさん
2020/01/28(火) 17:15:55.87ID:wcDzWZFN 関数ポインタの別名を作るときなんぞ
typedef int (*funcp)(); //内容ごちゃ名前ごちゃ
using funcp = int(*)(); //名前 = 内容ごちゃごちゃ
という違いが出る
typedef int (*funcp)(); //内容ごちゃ名前ごちゃ
using funcp = int(*)(); //名前 = 内容ごちゃごちゃ
という違いが出る
850デフォルトの名無しさん
2020/01/28(火) 17:25:49.44ID:CkOmcsmE usingを使うと03脳が発狂する
851はちみつ餃子 ◆8X2XSCHEME
2020/01/28(火) 17:28:55.68ID:jIEBko3c でもまあヘッダファイルを C と C++ の両方で (マクロで少し切り分けて) 使いたいってことはあるから、
そういうときは typedef にしといた方が共用できる部分が多くて楽ってことはある。
そういうときは typedef にしといた方が共用できる部分が多くて楽ってことはある。
852デフォルトの名無しさん
2020/01/28(火) 17:34:48.43ID:ijxMtirO >>849
そこだけだと構文糖衣以上のメリットはないよね
そこだけだと構文糖衣以上のメリットはないよね
853デフォルトの名無しさん
2020/01/28(火) 17:46:32.93ID:aDOyN6/W どっちでもええやん
854はちみつ餃子 ◆8X2XSCHEME
2020/01/28(火) 17:55:35.77ID:jIEBko3c >>849
ポインタまわりはテンプレートの記法で書けば統一的でわかりやすい気がするが、
たぶん他の名前とかぶらないようにするためか長めの名前なのがちょっとなぁ……。
using funcp = std::add_pointer_t<int(void)>;
ポインタまわりはテンプレートの記法で書けば統一的でわかりやすい気がするが、
たぶん他の名前とかぶらないようにするためか長めの名前なのがちょっとなぁ……。
using funcp = std::add_pointer_t<int(void)>;
855デフォルトの名無しさん
2020/01/28(火) 18:11:09.93ID:IabgCQwH856デフォルトの名無しさん
2020/01/28(火) 18:21:36.61ID:jS595giQ >>842
PL/1はいいぞ
制御構文としてif程度しか使えないしょぼいC/C++マクロと違ってプリプロセッサでDOループやGOTOとかも使えるしサブルーチンの定義すらできるぞw
https://en.m.wikipedia.org/wiki/PL/I_preprocessor
PL/1はいいぞ
制御構文としてif程度しか使えないしょぼいC/C++マクロと違ってプリプロセッサでDOループやGOTOとかも使えるしサブルーチンの定義すらできるぞw
https://en.m.wikipedia.org/wiki/PL/I_preprocessor
857デフォルトの名無しさん
2020/01/28(火) 19:30:49.93ID:jjtOLQOh そういえば最近Boost.Preprocessorを使った楽しい黒魔術の話題を聞かない気がする
あれってまだ開発継続してるの?
あれってまだ開発継続してるの?
858デフォルトの名無しさん
2020/01/28(火) 20:01:44.11ID:KHL1SP2c859デフォルトの名無しさん
2020/01/28(火) 20:11:17.93ID:lz3/6EQt マジでか・・・
860デフォルトの名無しさん
2020/01/28(火) 20:52:12.39ID:wcDzWZFN >>852
おまえさ、usingはテンプレートにできること、まさか知らないの?
おまえさ、usingはテンプレートにできること、まさか知らないの?
861デフォルトの名無しさん
2020/01/28(火) 22:15:34.91ID:aDOyN6/W 小学生かよw
862デフォルトの名無しさん
2020/01/28(火) 23:16:15.60ID:kww99AmH CPPってもうメンテされていないようで怖い
#define FOO 123 // comment
とはとうてい恐ろしくてどうしても書けず、
#define FOO 123 /* comment */
と書いてしまうま
#define FOO 123 // comment
とはとうてい恐ろしくてどうしても書けず、
#define FOO 123 /* comment */
と書いてしまうま
863デフォルトの名無しさん
2020/01/29(水) 11:25:21.25ID:HJZ6WUGV N4713
5.2 Phases of translation
3
Each comment is replaced by one space character. New-line characters are retained.
5.2 Phases of translation
3
Each comment is replaced by one space character. New-line characters are retained.
864デフォルトの名無しさん
2020/01/29(水) 13:26:03.72ID:zE4LbE2k865デフォルトの名無しさん
2020/01/29(水) 13:40:36.68ID:HJZ6WUGV866デフォルトの名無しさん
2020/01/29(水) 14:13:02.30ID:pjwqAxyM なぜ喧嘩腰なのか。
867デフォルトの名無しさん
2020/01/29(水) 14:13:39.93ID:Yrzd5mtl 喧嘩腰がC++民のデフォだから
868865
2020/01/29(水) 14:36:19.23ID:WeNDQDRz 俺は争いは好まないが、
平和的な話し方をしないやつには
場合にもよるが嫌悪感を露にすることもある
平和的な話し方をしないやつには
場合にもよるが嫌悪感を露にすることもある
869デフォルトの名無しさん
2020/01/29(水) 16:47:35.32ID:pjwqAxyM 戦士の血がそうさせると言いたいのか。
870デフォルトの名無しさん
2020/01/29(水) 16:57:27.48ID:HJZ6WUGV 平和を愛するという点で共感が得られず
こちらが下手に出ることのベネフィットがない相手には容赦は無用ということだ
こちらが下手に出ることのベネフィットがない相手には容赦は無用ということだ
871デフォルトの名無しさん
2020/01/29(水) 17:24:59.34ID:pjwqAxyM 戦士と戦士が巡り合ってしまうと、バトル・フィールドが形成されるシステムってことか。
872デフォルトの名無しさん
2020/01/29(水) 17:32:22.00ID:YYjUIAq1 >>870=ID:VrR0aqw1
マウント取りたいだけの初心者だから相手しない方がいい
マウント取りたいだけの初心者だから相手しない方がいい
873デフォルトの名無しさん
2020/01/29(水) 17:39:26.08ID:iDUguYS7 >>867
多くのC++民が喧嘩腰なのでなく、一部の喧嘩好きの戦闘民族のレスが目立ってるだけじゃね。このスレから相手に勝つことだけが目的の無意味なレスの応酬を取り除いたら、1/10も残らないと思うぞ。
多くのC++民が喧嘩腰なのでなく、一部の喧嘩好きの戦闘民族のレスが目立ってるだけじゃね。このスレから相手に勝つことだけが目的の無意味なレスの応酬を取り除いたら、1/10も残らないと思うぞ。
874デフォルトの名無しさん
2020/01/29(水) 17:54:15.31ID:YYjUIAq1 いや最近のC++に対するちょっと否定的な意見が出ただけで
過剰反応する住民のせいでもあると思うぞ
で、そういう奴に限って間違いを素直に認めたりなどしないからな(代理戦争で議論するやつ特有のパターン
過剰反応する住民のせいでもあると思うぞ
で、そういう奴に限って間違いを素直に認めたりなどしないからな(代理戦争で議論するやつ特有のパターン
875デフォルトの名無しさん
2020/01/29(水) 17:55:39.09ID:HJZ6WUGV876デフォルトの名無しさん
2020/01/29(水) 17:59:00.62ID:YYjUIAq1 俺ID:loc7kxiYだからgotoの話はしてないよ
で、前にも聞いたけど反論まだ?
で、前にも聞いたけど反論まだ?
877デフォルトの名無しさん
2020/01/29(水) 18:07:15.67ID:HJZ6WUGV ああ、そのIDのときはSTLの話だったな
そこでマクロの話も出てきていたが
隠すべきものと隠してはならないものの区別がつかない点で
gotoの何が悪いのかわかってないやつとプロファイリングが一致するんだよ
俺の正直な気持ちを教えといてやる
マウント取りたいんじゃなく、頭からアホにしてんだよ
こんなやつをマウントできたからって偉くも何ともねえ
そこでマクロの話も出てきていたが
隠すべきものと隠してはならないものの区別がつかない点で
gotoの何が悪いのかわかってないやつとプロファイリングが一致するんだよ
俺の正直な気持ちを教えといてやる
マウント取りたいんじゃなく、頭からアホにしてんだよ
こんなやつをマウントできたからって偉くも何ともねえ
878デフォルトの名無しさん
2020/01/29(水) 18:08:48.21ID:YYjUIAq1 いやSTLじゃなくてテンプレートを持て囃しすぎって話だったんだが
まぁいいや
まぁいいや
879デフォルトの名無しさん
2020/01/29(水) 18:20:58.67ID:pjwqAxyM おまえが犯人か。
880デフォルトの名無しさん
2020/01/29(水) 18:31:24.45ID:UhF+CSx9 なんかおかしなのがいるよね
圧倒的にこっちが勝っている状態で意味不明な反論?してきて意味不明だから返せないと逃げたとか言う奴
圧倒的にこっちが勝っている状態で意味不明な反論?してきて意味不明だから返せないと逃げたとか言う奴
881デフォルトの名無しさん
2020/01/29(水) 18:33:57.19ID:8i6C3PjP 5chなんてそんなところ
何を期待してるんだか
何を期待してるんだか
882デフォルトの名無しさん
2020/01/29(水) 18:50:11.91ID:HJZ6WUGV 明日早いから失礼するとは言ったが
それを謎変換せにゃならん切羽詰まったやつがいるのかw
それを謎変換せにゃならん切羽詰まったやつがいるのかw
883デフォルトの名無しさん
2020/01/29(水) 19:02:21.51ID:pjwqAxyM gotoは初期化を飛び越えることが出来ないと聞きました。
884デフォルトの名無しさん
2020/01/29(水) 19:09:37.44ID:cVCtJzaf usingってテンプレート使えたっけ
885デフォルトの名無しさん
2020/01/29(水) 19:11:38.78ID:pjwqAxyM 使えます。
886デフォルトの名無しさん
2020/01/29(水) 19:12:44.99ID:pjwqAxyM 初期化を飛び越えることができるバーストモードgotoないでしょうか。
887デフォルトの名無しさん
2020/01/29(水) 21:34:59.03ID:QR9K5cuD longjump
888デフォルトの名無しさん
2020/01/29(水) 22:05:22.85ID:HJZ6WUGV 465のlongj【u】mp野郎まだいたのかwww
889デフォルトの名無しさん
2020/01/29(水) 22:22:07.51ID:G0q9jZbg バカほど多くの機能を使いたがるってのがプログラマーが解決しなければならん問題だな。
890デフォルトの名無しさん
2020/01/29(水) 22:27:38.33ID:pjwqAxyM なんだと!
あやまりたまえ!
あやまりたまえ!
891デフォルトの名無しさん
2020/01/29(水) 22:29:42.55ID:/kkeNUel 使いどころが悪いって指摘ならまだしも、ある機能を使い所で使うなとか言うのは結局俺が分からんからってだけだよね
892デフォルトの名無しさん
2020/01/29(水) 22:32:41.05ID:G0q9jZbg 使いどころが本当に正しいか頭使って考えてりゃね。
バカは流行りだから、なんかカッケーから以上に何も考えてないから
レガシー化するわけだ。
んでまた新しいものに飛びついていく。
バカは流行りだから、なんかカッケーから以上に何も考えてないから
レガシー化するわけだ。
んでまた新しいものに飛びついていく。
893デフォルトの名無しさん
2020/01/29(水) 22:33:49.38ID:vJ6+7lg9 仕事ならそのコードがメンテできる人が他にどれだけいるかで考える
894デフォルトの名無しさん
2020/01/29(水) 22:49:46.87ID:HJZ6WUGV メンテできるやつが「オレ」以外の全員でもか? アホwバカwww
895デフォルトの名無しさん
2020/01/29(水) 22:56:36.84ID:pjwqAxyM うむ、お前以外の全員でもだ。
896デフォルトの名無しさん
2020/01/29(水) 22:57:52.50ID:vJ6+7lg9 もうそろそろ寝る時間じゃないの?
897デフォルトの名無しさん
2020/01/29(水) 22:59:28.19ID:pjwqAxyM かなり眠いです。
898デフォルトの名無しさん
2020/01/29(水) 23:16:21.00ID:gRkDTmNL C++03しか知らないんだけど
C++17まで修めるにはつるピカ先生の御本を読めばいいですか?
C++17まで修めるにはつるピカ先生の御本を読めばいいですか?
899デフォルトの名無しさん
2020/01/30(木) 00:33:56.60ID:x7BjuJ+g cppreferenceで十分
900はちみつ餃子 ◆8X2XSCHEME
2020/01/30(木) 00:49:18.87ID:v/8wm2Cj どれかひとつじゃなきゃいかんてことはないんだ
901デフォルトの名無しさん
2020/01/30(木) 00:52:54.89ID:D1C6nROc つるぴか先生の本は聖典だ
お守りのようなものなので読まなくても買って横においときなさい
お守りのようなものなので読まなくても買って横においときなさい
902デフォルトの名無しさん
2020/01/30(木) 16:01:21.46ID:sB8XzCcn cppreferenceは循環参照みたいになってて使い辛い
903はちみつ餃子 ◆8X2XSCHEME
2020/01/30(木) 16:02:36.57ID:v/8wm2Cj 実際にお互いに連携するからそう綺麗に木構造にはならんのやで。
904デフォルトの名無しさん
2020/01/30(木) 16:09:47.86ID:6JJixhdc 1つの情報源しか見てないとサイトから脳へバグが伝染るぞ
905デフォルトの名無しさん
2020/01/30(木) 16:11:35.43ID:sB8XzCcn cppreferenceは調べるためのサイトじゃなくて
忘れてたことを思い出すためのサイトって意味なら
まあまあ同意
忘れてたことを思い出すためのサイトって意味なら
まあまあ同意
906デフォルトの名無しさん
2020/01/30(木) 17:00:38.03ID:6JJixhdc ネットじゃなく、ローカルに俺メモを作るのは基本だね
907デフォルトの名無しさん
2020/01/30(木) 17:05:52.06ID:CwICoFVZ 作らなくてもcppreferenceをcloneすればいいじゃないか
908デフォルトの名無しさん
2020/01/30(木) 17:15:03.76ID:6JJixhdc 脳内の理解を、きちんと清書してみると
自分の言ってることがおかしいのに気付くことがよくあるんだよ
自分の言ってることがおかしいのに気付くことがよくあるんだよ
909デフォルトの名無しさん
2020/01/30(木) 17:26:38.98ID:Z7o7STkD 認知症の可能性が。
910デフォルトの名無しさん
2020/01/30(木) 17:51:33.22ID:6JJixhdc 最近の俺はそう言われても仕方ないアホなことをよくやらかすが
まだ若く元気だった頃から、俺メモでセルフチェックはやってるよ
まだ若く元気だった頃から、俺メモでセルフチェックはやってるよ
911デフォルトの名無しさん
2020/01/30(木) 18:12:36.69ID:Z7o7STkD みんなのメモを集めれば・・・
912デフォルトの名無しさん
2020/01/30(木) 18:36:17.39ID:6JJixhdc 女子社員のメモを集めたら最強マニュアルができたなんてエピソード昔聞いたことある
913はちみつ餃子 ◆8X2XSCHEME
2020/01/30(木) 18:38:54.14ID:v/8wm2Cj cpprefjp にコミットしてくれ。
914デフォルトの名無しさん
2020/01/30(木) 19:00:51.60ID:AVLJabA/ ビャーネ・ストラウストラップ の第四版は、C++11までですよね?
915デフォルトの名無しさん
2020/01/30(木) 19:06:12.13ID:6JJixhdc そら当たり前でんがな
承知の上で読む分には何も問題ないけどな
承知の上で読む分には何も問題ないけどな
916デフォルトの名無しさん
2020/01/30(木) 19:27:51.04ID:AVLJabA/ 質問者は、C++17まで収めたいと思っているようですが。
917はちみつ餃子 ◆8X2XSCHEME
2020/01/30(木) 19:31:35.00ID:v/8wm2Cj C++11 までわかってればあとは cpprefjp で差分を見れば充分でしょ。
918デフォルトの名無しさん
2020/01/30(木) 19:32:19.73ID:x7BjuJ+g 03→11の乖離は大きいが14、17はそれほどでもない
20、23でまた大きく変わるが
20、23でまた大きく変わるが
919デフォルトの名無しさん
2020/01/30(木) 19:36:37.08ID:6JJixhdc >>918
御意
御意
920デフォルトの名無しさん
2020/01/30(木) 19:51:01.92ID:6JJixhdc しかしメジャー2連くるかねえ
段階的変更という大人の配慮を忘れたら
C++終わると思うが
段階的変更という大人の配慮を忘れたら
C++終わると思うが
921デフォルトの名無しさん
2020/01/30(木) 19:54:30.05ID:R974cSCc もう変える必要なんかないだろうに
922デフォルトの名無しさん
2020/01/30(木) 19:54:36.77ID:Z7o7STkD まだ終わってなかったんだ。
923はちみつ餃子 ◆8X2XSCHEME
2020/01/30(木) 19:57:26.16ID:v/8wm2Cj コンセプトとモジュールの導入は C++er の悲願だと思っていたがそうでもないの?
クソみたいなマクロを殺すのがだいぶん上手くいったから次はクソみたいな SFINAE を殺そうという動きだと理解してる。
クソみたいなマクロを殺すのがだいぶん上手くいったから次はクソみたいな SFINAE を殺そうという動きだと理解してる。
924デフォルトの名無しさん
2020/01/30(木) 20:01:14.28ID:Z7o7STkD コンセプトは欲しいです。
925デフォルトの名無しさん
2020/01/30(木) 20:25:47.17ID:/5vTOygk > ポインタライクなオブジェクトからアドレスを取得する std::to_address() 関数 (P0653R2)
> ポインタライクなオブジェクトを引数にとり、それが表すのと同じアドレスを生ポインタで返す関数
> std::to_address(p) が追加されます。オブジェクトがポインタ型の場合はその値を返し、それ以外の場合、
> std::pointer_traits<Ptr>::to_address(p) の特殊化が定義されていて使えればその戻り値を、
> そうでない場合は std::to_address(p.operator->()) の戻り値を返します。
ついにポインタのことをアドレスって言っても良くなったんだな
俺の学生時代にはポインタの事をアドレスと言って良く怒られたものだ
懐かしい思い出
> ポインタライクなオブジェクトを引数にとり、それが表すのと同じアドレスを生ポインタで返す関数
> std::to_address(p) が追加されます。オブジェクトがポインタ型の場合はその値を返し、それ以外の場合、
> std::pointer_traits<Ptr>::to_address(p) の特殊化が定義されていて使えればその戻り値を、
> そうでない場合は std::to_address(p.operator->()) の戻り値を返します。
ついにポインタのことをアドレスって言っても良くなったんだな
俺の学生時代にはポインタの事をアドレスと言って良く怒られたものだ
懐かしい思い出
926デフォルトの名無しさん
2020/01/30(木) 20:36:13.05ID:rpXeID84 変数は実は二つの値から出来ている
一つは変数の中に入っている値
もう一つは変数のアドレスの値
この二つだ
変数の二重性がC言語の理解を無駄に難しくしてる
アドレスの値が入ってるのは機械語から言えば当然だが
変数なる計算機科学の概念がそこに中途半端にドッキングすると複雑になる
ポインタで躓くヤツが多いのは機械語と高水準言語、その中間に位置するC言語の変数がもつ二重性のせいだ
一つは変数の中に入っている値
もう一つは変数のアドレスの値
この二つだ
変数の二重性がC言語の理解を無駄に難しくしてる
アドレスの値が入ってるのは機械語から言えば当然だが
変数なる計算機科学の概念がそこに中途半端にドッキングすると複雑になる
ポインタで躓くヤツが多いのは機械語と高水準言語、その中間に位置するC言語の変数がもつ二重性のせいだ
927デフォルトの名無しさん
2020/01/30(木) 21:07:45.27ID:Z7o7STkD ところでコンセプトって何ですか?
928デフォルトの名無しさん
2020/01/30(木) 21:12:58.09ID:jdq+FHbl ID:Z7o7STkD
このスレはこういう精神病みたいなやつ多くない?
このスレはこういう精神病みたいなやつ多くない?
929デフォルトの名無しさん
2020/01/30(木) 21:22:32.86ID:cFc5UMZy >>923
イキった初心者に影響受けすぎ
イキった初心者に影響受けすぎ
930デフォルトの名無しさん
2020/01/30(木) 21:34:14.92ID:r1oioh07 ハゲの悲願だろ
931898
2020/01/30(木) 21:40:54.77ID:XvvyOq64 皆さん情報ありがとう
ひとまず先生のWeb版「C++入門」をやってみることにしました
ひとまず先生のWeb版「C++入門」をやってみることにしました
932デフォルトの名無しさん
2020/01/30(木) 21:41:00.44ID:Z7o7STkD なんだと!
933デフォルトの名無しさん
2020/01/30(木) 22:11:01.65ID:6JJixhdc operatorの暗黒面を知れという実習問題
ここでみんなでやってみないか?
ここでみんなでやってみないか?
934デフォルトの名無しさん
2020/01/30(木) 22:19:13.93ID:FR6/17T7 単純なキーワード検索できないことぐらいでしょ。暗黒面。
935デフォルトの名無しさん
2020/01/30(木) 22:24:37.20ID:R974cSCc operatorは自明な場合しか使わない
構造体代入のように見えて変数の逐次代入してあって、
後で追加された変数が処理されていなかったりして気づかないとかこわい
構造体代入のように見えて変数の逐次代入してあって、
後で追加された変数が処理されていなかったりして気づかないとかこわい
936デフォルトの名無しさん
2020/01/30(木) 22:26:34.32ID:/1tMjbDQ 暗黙変換と絡んだ地獄を知らんのか
937デフォルトの名無しさん
2020/01/30(木) 22:36:05.95ID:Q1Ec3Ov8 >>933
gotoおじさんに答えさせようぜ
gotoおじさんに答えさせようぜ
938デフォルトの名無しさん
2020/01/30(木) 22:42:34.01ID:o/4wL0K/ 演算子の多重定義とテンプレートの組み合わせはチョー便利
gotoと同じで手放せない便利さ…!
gotoと同じで手放せない便利さ…!
939デフォルトの名無しさん
2020/01/30(木) 23:30:29.18ID:HitChVTH >>925
ポインタとアドレスは別物でしょ
ポインタとアドレスは別物でしょ
940デフォルトの名無しさん
2020/01/31(金) 00:09:44.31ID:3dxm9JOP 同じといや同じだし違うといやぁちがう
普通の脳味噌のやつには適当に「こまけぇことはいいから同じようなもんだ」と
いっとけば通じるが、このスレにウヨウヨいるような偏執狂タイプの連中に
うかつに「同じ」なんていうとポインタをアドレスと同じように整数を足すと
そのぶんアドレス値が進むと思いこむやつがでてくるからうかつに言えないだけ
普通の脳味噌のやつには適当に「こまけぇことはいいから同じようなもんだ」と
いっとけば通じるが、このスレにウヨウヨいるような偏執狂タイプの連中に
うかつに「同じ」なんていうとポインタをアドレスと同じように整数を足すと
そのぶんアドレス値が進むと思いこむやつがでてくるからうかつに言えないだけ
941デフォルトの名無しさん
2020/01/31(金) 00:10:58.09ID:v4E0eL1J >std::to_address()
^^^^^^^
>それが表すのと同じ「アドレス」を「生ポインタ」で返す関数
となってるので公式で
ポインタ=アドレス
^^^^^^^
>それが表すのと同じ「アドレス」を「生ポインタ」で返す関数
となってるので公式で
ポインタ=アドレス
942デフォルトの名無しさん
2020/01/31(金) 00:14:07.32ID:70BTs5bI943デフォルトの名無しさん
2020/01/31(金) 00:15:57.33ID:v4E0eL1J いや、to_address() という名前の関数が生ポインタを返すから
ポインタ=アドレスで問題ない
そうじゃないんなら、to_pointer() っていう関数名にするだろ、普通
そこが to_address() となってる
ポインタ=アドレスで問題ない
そうじゃないんなら、to_pointer() っていう関数名にするだろ、普通
そこが to_address() となってる
944デフォルトの名無しさん
2020/01/31(金) 00:21:59.86ID:88e+X9K2 オプションだし。
アドレスを返せないファンシーポインタもあるということでは。
アドレスを返せないファンシーポインタもあるということでは。
945デフォルトの名無しさん
2020/01/31(金) 00:23:11.07ID:v4E0eL1J 俺は古いタイプの人間だから俺の感覚で言うと
to_address() って言えば、生のアドレス値が整数型で帰ってくるという低レベルなイメージ
それが生ポインタが帰ってくるというなら to_pointer() としたいところ
ところが生ポインタが帰ってくるのに to_address() となってるわけだから
ああなるほど、時代は変わったなぁ、と
その辺 C++ の人たちはうるさいと思っていたんだがねぇ
もう公式で ポインタ = アドレス なのね
to_address() って言えば、生のアドレス値が整数型で帰ってくるという低レベルなイメージ
それが生ポインタが帰ってくるというなら to_pointer() としたいところ
ところが生ポインタが帰ってくるのに to_address() となってるわけだから
ああなるほど、時代は変わったなぁ、と
その辺 C++ の人たちはうるさいと思っていたんだがねぇ
もう公式で ポインタ = アドレス なのね
946デフォルトの名無しさん
2020/01/31(金) 00:24:13.53ID:MjAWY572 pointer指すもの
address指す先
じゃね
address指す先
じゃね
947デフォルトの名無しさん
2020/01/31(金) 00:25:21.16ID:88e+X9K2 addressofで返ってくるのもポインタだし。
948デフォルトの名無しさん
2020/01/31(金) 00:27:00.86ID:88e+X9K2 ファンシーポインタからポインタをとるときに使うもののような気がする。
それが不可能なこともあるからオプションなのでは。
それが不可能なこともあるからオプションなのでは。
949デフォルトの名無しさん
2020/01/31(金) 00:35:50.96ID:88e+X9K2 ポインタ→ポインタあるいはファンシーポインタ・・・pointer_to。
ポインタあるいはファンシーポインタ→ポインタ・・・to_address。
ってことで、ポインタの意味は変わっていないんじゃないのかな。
ポインタあるいはファンシーポインタ→ポインタ・・・to_address。
ってことで、ポインタの意味は変わっていないんじゃないのかな。
950デフォルトの名無しさん
2020/01/31(金) 00:42:12.84ID:v4E0eL1J 簡単に考えれば、生ポインタとスマートポインタetcを区別するために
生ポインタの事をアドレスと言ってるわけだよ
スマートポインタetc -> ポインタ
生ポインタ -> アドレス
っていう格上か格下げか知らんが、一つずらした呼び名になってるんだ
俺みたいな古い人間には受け入れがたいものもあるが
「生ポインタなんか使わねーよスマポこそがポインタであり生ポなんかアドレスとでも呼べばよい」
という今の時代に合わせた考え方なんだろう
スマポetc(ポインタ)から生ポ(アドレス)に変換するから to_address()
ちょうど Java のオブジェクトを指す変数は C++ 的には参照だが
Java の人たちはオブジェクトと言うし、そう考えてる、ってのに似てる
生ポインタの事をアドレスと言ってるわけだよ
スマートポインタetc -> ポインタ
生ポインタ -> アドレス
っていう格上か格下げか知らんが、一つずらした呼び名になってるんだ
俺みたいな古い人間には受け入れがたいものもあるが
「生ポインタなんか使わねーよスマポこそがポインタであり生ポなんかアドレスとでも呼べばよい」
という今の時代に合わせた考え方なんだろう
スマポetc(ポインタ)から生ポ(アドレス)に変換するから to_address()
ちょうど Java のオブジェクトを指す変数は C++ 的には参照だが
Java の人たちはオブジェクトと言うし、そう考えてる、ってのに似てる
951デフォルトの名無しさん
2020/01/31(金) 00:44:40.52ID:MjAWY572 javaの変数はポインタだろ
代入したら指す先が変わるし
null持てるし
まあ演算できない劣化版だが
代入したら指す先が変わるし
null持てるし
まあ演算できない劣化版だが
952デフォルトの名無しさん
2020/01/31(金) 00:46:15.67ID:S0Mdice7 常識なんかどんどん変るからな、とくにC/C++みたいな歴史が長い世界は
ピュアCの時代にはそもそもポインタといえばたしかにその値がアドレス(位置情報)
として機能する値と一致していたがファンシーポインタがある現代では
"ポインタ"の実体とそれが保持したい情報(アドレス情報)は一致すると思わない事が常識になる
"ポインタ"は情報としては何かの位置を差す値を保持はしているがそのオブジェクト
自体は保持しているアドレス情報とはまったく無関係のメモリ空間にある何かである
現代の感覚でいうともし std::to_pointer というネーミングにすると
"は?ポインタをポインタに変換するってどういう意味だよ????"とむしろ混乱の元になるってわけだ
ピュアCの時代にはそもそもポインタといえばたしかにその値がアドレス(位置情報)
として機能する値と一致していたがファンシーポインタがある現代では
"ポインタ"の実体とそれが保持したい情報(アドレス情報)は一致すると思わない事が常識になる
"ポインタ"は情報としては何かの位置を差す値を保持はしているがそのオブジェクト
自体は保持しているアドレス情報とはまったく無関係のメモリ空間にある何かである
現代の感覚でいうともし std::to_pointer というネーミングにすると
"は?ポインタをポインタに変換するってどういう意味だよ????"とむしろ混乱の元になるってわけだ
953デフォルトの名無しさん
2020/01/31(金) 00:46:56.64ID:v4E0eL1J なんか長々書いたが
今の時代、スマポこそがポインタであって、もはや生ポインタはアドレスなんだよ!
人間も父が爺になって子が父に繰り上がっていくものだから
時代と共に名実ともに出世していくのは普通の事なのかもしれない
今の時代、スマポこそがポインタであって、もはや生ポインタはアドレスなんだよ!
人間も父が爺になって子が父に繰り上がっていくものだから
時代と共に名実ともに出世していくのは普通の事なのかもしれない
954デフォルトの名無しさん
2020/01/31(金) 00:47:48.87ID:88e+X9K2 ちょっと江添呼んできて。
電車代出すから。
電車代出すから。
955デフォルトの名無しさん
2020/01/31(金) 00:51:32.98ID:v4E0eL1J ただどうしても言いたいのは
生ポインタは address じゃなくても
別に raw_pointer とか native_pointer で良くね?
address って言ったら、ただの数値のイメージがあるわ
生ポインタは address じゃなくても
別に raw_pointer とか native_pointer で良くね?
address って言ったら、ただの数値のイメージがあるわ
956デフォルトの名無しさん
2020/01/31(金) 00:54:08.51ID:88e+X9K2 アドレスに無料で型情報をつけるアイデアをひらめいたときは、俺って天才かも?って思ったんだろな。
957デフォルトの名無しさん
2020/01/31(金) 00:54:15.91ID:S0Mdice7 >>951
我々の感覚からすると実際その通りなんだが、Java脳の人々にとってはそうではない
彼等はスタックという感覚も非常にうすい
なぜならオブジェクトはスタックにはとれず、常に new (ヒープ)しかないから
我々はクラスのインスタンスがスタックにあるのかヒープにあるのかは無意識に常に
判断する事に慣れているが、これをjava脳の人に説明するのはしばしば困難なときがある
我々の感覚からすると実際その通りなんだが、Java脳の人々にとってはそうではない
彼等はスタックという感覚も非常にうすい
なぜならオブジェクトはスタックにはとれず、常に new (ヒープ)しかないから
我々はクラスのインスタンスがスタックにあるのかヒープにあるのかは無意識に常に
判断する事に慣れているが、これをjava脳の人に説明するのはしばしば困難なときがある
958はちみつ餃子 ◆8X2XSCHEME
2020/01/31(金) 00:54:31.65ID:T8rV4kLc >>929
宣言をヘッダファイルに分割する方式は C++ の意味不明さの根源のひとつじゃない?
それで宣言と定義を分ける運用がキッチリできるのならそれはそれでよかったけど、
テンプレートとインラインの活用でヘッダファイルに書く分量がだいぶん多くなってヘッダファイルってなんだっけって気持ちになる。
このあたりの仕組みは再編すべきでしょ。 モジュールは要るって。
コンセプトもなぁ、型に制約を付けるって普通にやりたいことじゃん?
ちょっとした制約を付けるためにまわりくどいメタプログラミングなんてやりたくないよ。
現代的な静的型付け言語ならあって然るべき機能が順当に入るってだけのこと……
と思ってたら延び延びになっちゃったから待たされてる感じが強い。
宣言をヘッダファイルに分割する方式は C++ の意味不明さの根源のひとつじゃない?
それで宣言と定義を分ける運用がキッチリできるのならそれはそれでよかったけど、
テンプレートとインラインの活用でヘッダファイルに書く分量がだいぶん多くなってヘッダファイルってなんだっけって気持ちになる。
このあたりの仕組みは再編すべきでしょ。 モジュールは要るって。
コンセプトもなぁ、型に制約を付けるって普通にやりたいことじゃん?
ちょっとした制約を付けるためにまわりくどいメタプログラミングなんてやりたくないよ。
現代的な静的型付け言語ならあって然るべき機能が順当に入るってだけのこと……
と思ってたら延び延びになっちゃったから待たされてる感じが強い。
959デフォルトの名無しさん
2020/01/31(金) 00:55:51.11ID:MjAWY572 javaはヌルポ出すくせにポインタじゃないのか
ポはなんの略なんだろう
ポはなんの略なんだろう
960デフォルトの名無しさん
2020/01/31(金) 01:06:28.75ID:/0JfR++J >>941
公式は "A value of a pointer type ... represents the address of the first byte ..."
「ポインタ型の値はアドレスを表す」となってる。
https://timsong-cpp.github.io/cppwp/n4659/basic.compound#3
アドレスに加えて他の情報を持つ可能性は否定されないので、いろんな人が言ってるように
厳密にはイコールではないね。
公式は "A value of a pointer type ... represents the address of the first byte ..."
「ポインタ型の値はアドレスを表す」となってる。
https://timsong-cpp.github.io/cppwp/n4659/basic.compound#3
アドレスに加えて他の情報を持つ可能性は否定されないので、いろんな人が言ってるように
厳密にはイコールではないね。
961デフォルトの名無しさん
2020/01/31(金) 01:08:43.20ID:U1PsHN2Y >>958
要らんなどと一言も言ってないぞ
言い回しがそれっぽいってだけ
だいたいモジュールはまだ20では標準ライブラリには使われないし
「コンセプトはよ来い」とか上級者ぶりたい初心者がよく言うけど、その中に「自分で実際にコンセプトを定義する奴」などほぼ居ないだろ
個人的にはこれまでSFINAEでどうにかしてたメタプログラミング用の要件チェックのコードを
全部コンセプトに直すのクソだるい(便利になるだろうけどエラーメッセージ以外で実感するのはまだまだ先)
だいたい来るのはわかってんだからもう一喜一憂するような話でもない
要らんなどと一言も言ってないぞ
言い回しがそれっぽいってだけ
だいたいモジュールはまだ20では標準ライブラリには使われないし
「コンセプトはよ来い」とか上級者ぶりたい初心者がよく言うけど、その中に「自分で実際にコンセプトを定義する奴」などほぼ居ないだろ
個人的にはこれまでSFINAEでどうにかしてたメタプログラミング用の要件チェックのコードを
全部コンセプトに直すのクソだるい(便利になるだろうけどエラーメッセージ以外で実感するのはまだまだ先)
だいたい来るのはわかってんだからもう一喜一憂するような話でもない
962デフォルトの名無しさん
2020/01/31(金) 01:08:59.37ID:70BTs5bI 今も昔もアドレスとポインタの意味は変わってないんでないの?
「アドレス」=メモリ上のオブジェクトの位置を表す番地(具体的には整数値)
「ポインタ」=
(1)何らかのアドレスを格納したT*型の変数(オブジェクト)。生ポインタ。
(2)「アドレス」と同じ意味で用いる
昔からポインタ(2)の用法でアドレスとポインタを同一視して使われるだけで、ポインタ(1)の用法で「アドレス」とは言わんでしょ。
to_addressの件も、引数として受けとるオブジェクトに対する「アドレス」の値を返すのだからto addressと言う命名で適切だろう。ここでto pointerとしたら直感的に「ポインタ」(1)の意味で解釈されかねず、下手な命名だと思う。
「アドレス」=メモリ上のオブジェクトの位置を表す番地(具体的には整数値)
「ポインタ」=
(1)何らかのアドレスを格納したT*型の変数(オブジェクト)。生ポインタ。
(2)「アドレス」と同じ意味で用いる
昔からポインタ(2)の用法でアドレスとポインタを同一視して使われるだけで、ポインタ(1)の用法で「アドレス」とは言わんでしょ。
to_addressの件も、引数として受けとるオブジェクトに対する「アドレス」の値を返すのだからto addressと言う命名で適切だろう。ここでto pointerとしたら直感的に「ポインタ」(1)の意味で解釈されかねず、下手な命名だと思う。
963デフォルトの名無しさん
2020/01/31(金) 01:50:15.23ID:kN8V6wKW 言葉遊びというか言葉の意味の違いでかみあってないだけじゃろ
こうした文脈でのアドレスという言葉を
アドレス=機械語コードで使うのと同じ表現で指定されてるメモリアドレス
の意味に無自覚に限定してるのか
アドレス=なんらかの形で指定されてるメモリアドレス
のゆるい意味で使っているかの話じゃ
ポインタはアドレスではない、は前者の意味のアドレスに対する話で
今回の話も含めたC/C++の規格レベルでのアドレスは一貫して後者の意味じゃて
こうした文脈でのアドレスという言葉を
アドレス=機械語コードで使うのと同じ表現で指定されてるメモリアドレス
の意味に無自覚に限定してるのか
アドレス=なんらかの形で指定されてるメモリアドレス
のゆるい意味で使っているかの話じゃ
ポインタはアドレスではない、は前者の意味のアドレスに対する話で
今回の話も含めたC/C++の規格レベルでのアドレスは一貫して後者の意味じゃて
964デフォルトの名無しさん
2020/01/31(金) 02:10:23.02ID:X6LytJOH >>913
管理者がアレだから♀
管理者がアレだから♀
965デフォルトの名無しさん
2020/01/31(金) 07:12:22.07ID:CZDp2h8t アドレスはオブジェクトの番地
ポインタはアドレスを格納する変数
ポインタはアドレスを格納する変数
966デフォルトの名無しさん
2020/01/31(金) 08:39:51.12ID:v4E0eL1J しかしアドレスを返すと言いながら
ポインタで返し、型情報が付いてきているわけだが
ポインタで返し、型情報が付いてきているわけだが
967デフォルトの名無しさん
2020/01/31(金) 08:42:38.23ID:v4E0eL1J 緩い意味でのどこかを指し示す意味でのアドレスと言っているなら
スマポもアドレスになるから、to_addressの意味がさらにもう何が何だか
スマポもアドレスになるから、to_addressの意味がさらにもう何が何だか
968デフォルトの名無しさん
2020/01/31(金) 08:50:06.41ID:1ZJZZZs9 ポインタというよりvoid*だね
void以外のポインタは実体の型により訳が変わる点が
単なるアドレスと違うところで
void以外のポインタは実体の型により訳が変わる点が
単なるアドレスと違うところで
969デフォルトの名無しさん
2020/01/31(金) 10:02:33.89ID:v4E0eL1J いやでも、to_address() の戻り値の型は
void* ではなくて、ちゃんとした型情報を持った普通のポインタ型だよ
void* にはならないよ
void* ではなくて、ちゃんとした型情報を持った普通のポインタ型だよ
void* にはならないよ
970デフォルトの名無しさん
2020/01/31(金) 10:06:23.45ID:yrj+fbAX またつまんない話で盛り上がってんのな
971デフォルトの名無しさん
2020/01/31(金) 10:42:46.16ID:70BTs5bI >>966
返されるのはあくまでアドレス(番地)の値だろう。型情報としてT*型を持つが、それはC/C++ではすべての式や値が型を持つから当たり前の話であって、型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
返されるのはあくまでアドレス(番地)の値だろう。型情報としてT*型を持つが、それはC/C++ではすべての式や値が型を持つから当たり前の話であって、型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
972デフォルトの名無しさん
2020/01/31(金) 11:36:09.10ID:v4E0eL1J >型を持つからアドレスとは呼ばないというのはおかしな話だと思う。
つまりは ポインタ=アドレス って事ね
つまりは ポインタ=アドレス って事ね
973デフォルトの名無しさん
2020/01/31(金) 11:45:36.21ID:GGrzMUVS ポインタってのは変数のことでその中身はアドレスって第3版の時点ではっきり書かれてるぞ
型を持ってるのもあくまで変数の方だ
型を持ってるのもあくまで変数の方だ
974デフォルトの名無しさん
2020/01/31(金) 12:34:07.30ID:AatGgooz ヌルポ
975デフォルトの名無しさん
2020/01/31(金) 12:35:25.45ID:v4E0eL1J それは当たり前
そういう話ではなく
う〜ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば
まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
そういう話ではなく
う〜ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば
まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
976デフォルトの名無しさん
2020/01/31(金) 12:37:15.21ID:v4E0eL1J なんか途中で送信してしまった
それは当たり前
そういう話ではなく
う〜ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address() と何が違うか
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば、まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
それは当たり前
そういう話ではなく
う〜ん、どういえばいいか
例えば、年齢を得る関数 int get_age() ってのがあったとして
俺は別にこれに疑問を持たんし、何とも思わない
to_address() と何が違うか
それは int に対して age の方が高度で抽象的な概念になってるから
ところが pointer to_address() の場合はこれが逆になってて
pointer の方が address より高度で抽象的な概念になってる
だからこう、本質的に気持ち悪いというか
先の例で言えば、まぁ適切な例かは分からないが
age_t get_int()
ってなってたらキモイだろう
977デフォルトの名無しさん
2020/01/31(金) 12:45:36.65ID:GGrzMUVS なんか勝手に幻想抱いてるけどポインタに入れるものは常にアドレスだから
何もおかしくない
何もおかしくない
978デフォルトの名無しさん
2020/01/31(金) 12:46:08.71ID:YmbKsQW3 VLTのto_addressは欲しい
979デフォルトの名無しさん
2020/01/31(金) 12:46:37.74ID:v4E0eL1J でさ、
age_t get_int() ってのを見たとき
「age_t の中身は int だし
int を get してそれが age_t に入っているのだから
解釈としては問題ない」
って感じのことを言ってるレスが結構あったけど
俺はなんか違うような気がするって言ってるわけ
age_t get_int() ってのを見たとき
「age_t の中身は int だし
int を get してそれが age_t に入っているのだから
解釈としては問題ない」
って感じのことを言ってるレスが結構あったけど
俺はなんか違うような気がするって言ってるわけ
980デフォルトの名無しさん
2020/01/31(金) 12:48:59.87ID:v4E0eL1J981デフォルトの名無しさん
2020/01/31(金) 13:07:50.38ID:AatGgooz アドレスとポインタってのは
ageとage_tの関係
ageとage_tの関係
982デフォルトの名無しさん
2020/01/31(金) 13:13:53.02ID:GGrzMUVS じゃあint *p = &a;の&もアドレスを取る演算子じゃなくて
ポインタを取る演算子に名前変えてもらうようにお願いしたら?
ポインタを取る演算子に名前変えてもらうようにお願いしたら?
983デフォルトの名無しさん
2020/01/31(金) 17:37:24.29ID:aVH6lH01 アドレスはデコーダに入力するビット列 (ハードウエアの概念)
ポインタはアドレスを扱うことを目的とするデータ型 (プログラム言語の概念)
IEEE754とdoubleのような関係だ
ポインタはアドレスを扱うことを目的とするデータ型 (プログラム言語の概念)
IEEE754とdoubleのような関係だ
984デフォルトの名無しさん
2020/01/31(金) 17:44:13.04ID:MQmpFGUT 通常はポインタが数値であることなんてのは意識せんわな。
リングバッファなんかを取り扱うなら嫌でも意識することになるが。
リングバッファなんかを取り扱うなら嫌でも意識することになるが。
985デフォルトの名無しさん
2020/01/31(金) 18:16:27.29ID:HzrC4w9c ポインタが数値がどうか意識しないと
リングバッファも作れないようなのが
C++を使うのか
リングバッファも作れないようなのが
C++を使うのか
986デフォルトの名無しさん
2020/01/31(金) 18:34:36.50ID:Dscz4LHl 分岐無くす高速化でもしているんじゃね
987デフォルトの名無しさん
2020/01/31(金) 18:37:20.08ID:CZDp2h8t >>976
その例は逆
アドレスとポインタは本質(イデア)とその表現の関係にある
(イデア <-> 表現)
年齢 <-> 整数
色 <-> RGB値
アドレス <-> ポインタ
この関係に照らせば、年齢を取得する場合は
int get_age();
だし、色を取得する場合は
RGB get_color();
だし、アドレスを取得する場合は
T* get_address();
になる
その例は逆
アドレスとポインタは本質(イデア)とその表現の関係にある
(イデア <-> 表現)
年齢 <-> 整数
色 <-> RGB値
アドレス <-> ポインタ
この関係に照らせば、年齢を取得する場合は
int get_age();
だし、色を取得する場合は
RGB get_color();
だし、アドレスを取得する場合は
T* get_address();
になる
988デフォルトの名無しさん
2020/01/31(金) 18:53:37.33ID:Nt0XFA2s その哲学続けるの
989デフォルトの名無しさん
2020/01/31(金) 19:10:20.77ID:xOuBGXY8990デフォルトの名無しさん
2020/01/31(金) 19:13:50.70ID:MjAWY572 ハードウェアとのDMAならポインタにいれるアドレス自体は気にしないだろ
特定の物理メモリを適当な仮想アドレスにマップして使うのだし
特定の物理メモリを適当な仮想アドレスにマップして使うのだし
991デフォルトの名無しさん
2020/01/31(金) 19:35:40.34ID:xOuBGXY8 DMAが扱うのは物理アドレス
992デフォルトの名無しさん
2020/01/31(金) 19:42:13.08ID:xOuBGXY8 じゃないのもあったりするのか?
チープなマイコンのDMAしか直接扱ったことがなくて
チープなマイコンのDMAしか直接扱ったことがなくて
993デフォルトの名無しさん
2020/01/31(金) 19:51:22.09ID:aVH6lH01 仮想アドレスってことはページフォールトがあるってことだろ
OSによってページインされるまで待つことになるが
そこまでペリフェラルで面倒見る必要あるか考えてみそ
OSによってページインされるまで待つことになるが
そこまでペリフェラルで面倒見る必要あるか考えてみそ
995デフォルトの名無しさん
2020/01/31(金) 19:53:30.58ID:aVH6lH01 未練
996デフォルトの名無しさん
2020/01/31(金) 19:54:58.34ID:xOuBGXY8997デフォルトの名無しさん
2020/01/31(金) 19:55:32.42ID:yrj+fbAX 最近はIOMMUが一般的
998デフォルトの名無しさん
2020/01/31(金) 20:02:09.40ID:yrj+fbAX999デフォルトの名無しさん
2020/01/31(金) 20:34:35.43ID:aVH6lH011000デフォルトの名無しさん
2020/01/31(金) 20:54:47.19ID:Nt0XFA2s C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 44日 2時間 57分 54秒
新しいスレッドを立ててください。
life time: 44日 2時間 57分 54秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 清涼飲料水から麻薬成分東京都が注意喚起 [おっさん友の会★]
- 生活保護廃止、公務員の給与に最低賃金を適用⇦これをやるだけで国民の9割の不満が解消されるのにやらない理由 [218488394]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 【動画】男女混合レスリングのガチ試合の様子がこちら [738130642]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 【日刊】暇空茜、また敗訴🥸 [359965264]
- 台湾政党が高市首相「存立危機事態」発言に感謝の書簡「我々の心を強く奮い立たせるものでした」 [834922174]
