C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
探検
C++相談室 part148
レス数が1000を超えています。これ以上書き込みはできません。
2020/01/31(金) 20:54:06.26ID:Nt0XFA2s
2デフォルトの名無しさん
2020/01/31(金) 21:08:18.93ID:88e+X9K2 >>2
2get乙。
2get乙。
2020/01/31(金) 21:13:28.27ID:70BTs5bI
前スレの>1000は有能
4デフォルトの名無しさん
2020/01/31(金) 21:28:55.62ID:88e+X9K2 >>1
1get乙。
1get乙。
2020/01/31(金) 21:32:42.96ID:aVH6lH01
gotoの話でもするか? それともマクロ? ハード絡みのところなんか俺的にはオモロイが
2020/01/31(金) 21:35:23.06ID:yrj+fbAX
前スレ999だけと循環してないよ
仮想アドレス使ったら必ずページフォルトするわけじゃない
MMUの仕組みわかってる?
仮想アドレス使ったら必ずページフォルトするわけじゃない
MMUの仕組みわかってる?
2020/01/31(金) 21:47:35.65ID:aVH6lH01
こらこら、前スレ999は俺だぞ
なりすましすんなカス
なりすましすんなカス
8デフォルトの名無しさん
2020/01/31(金) 21:48:10.26ID:88e+X9K2 https://ja.cppreference.com/w/cpp/io/ios_base/sync_with_stdio
これ使うとだいぶ早くなるらしいですよ。
これ使うとだいぶ早くなるらしいですよ。
9デフォルトの名無しさん
2020/01/31(金) 21:48:37.69ID:88e+X9K2 じゃあ俺も前スレ999です。
2020/01/31(金) 21:59:36.62ID:yrj+fbAX
2020/01/31(金) 22:13:11.58ID:HzrC4w9c
環境を限定しないならこれ以上続けても無駄
全ての環境を知ってるヤツでない限り
全ての環境を知ってるヤツでない限り
12デフォルトの名無しさん
2020/01/31(金) 22:16:13.72ID:88e+X9K2 すべての環境を知っている。
2020/01/31(金) 22:50:18.80ID:aVH6lH01
>>10
全然わかんねえ! 何言ってんの?
全然わかんねえ! 何言ってんの?
14デフォルトの名無しさん
2020/01/31(金) 22:56:57.70ID:88e+X9K2 >>13
俺はわかった。
俺はわかった。
2020/01/31(金) 22:58:17.72ID:yrj+fbAX
>>13
どこが循環してるか言ってみなよ
どこが循環してるか言ってみなよ
16蟻人間 ◆T6xkBnTXz7B0
2020/01/31(金) 23:38:50.35ID:r/XM8LG1 struct AutoDeleteFile {
const WCHAR *m_file;
AutoDeleteFile(const WCHAR *file) : m_file(file) { }
~AutoDeleteFile()
{ DeleteFileW(m_file); }
};
const WCHAR *m_file;
AutoDeleteFile(const WCHAR *file) : m_file(file) { }
~AutoDeleteFile()
{ DeleteFileW(m_file); }
};
2020/01/31(金) 23:42:29.75ID:wt6xD5wE
それではおじいちゃんのaddress談義
続きをどうぞ
続きをどうぞ
2020/01/31(金) 23:56:13.21ID:v4E0eL1J
ともかく最初に思ってることがあって
要は荒らしてやろうと
今回は結構うまくいった方かな
この前は
「std::deque には begin() end() clear() があるのに
std::queue と std::stack にそれらが無いのは何故?
有ったほうが便利なのでは?」
って質問で大分いい感じにスレを流した
そら、有ったほうが便利に違いないし、無いことに合理的な理由など無いわけだから荒れる
そういう、荒れそうなネタ考えるのに毎回結構頭使う
ただ、ちょっと前の goto のやつ、あれはダメ
初心者がワーワー騒いでるだけで、ほとんどのベテラン連中は静観してたと思う
俺の狙いはそれじゃない
あと、妹大好きです
要は荒らしてやろうと
今回は結構うまくいった方かな
この前は
「std::deque には begin() end() clear() があるのに
std::queue と std::stack にそれらが無いのは何故?
有ったほうが便利なのでは?」
って質問で大分いい感じにスレを流した
そら、有ったほうが便利に違いないし、無いことに合理的な理由など無いわけだから荒れる
そういう、荒れそうなネタ考えるのに毎回結構頭使う
ただ、ちょっと前の goto のやつ、あれはダメ
初心者がワーワー騒いでるだけで、ほとんどのベテラン連中は静観してたと思う
俺の狙いはそれじゃない
あと、妹大好きです
2020/01/31(金) 23:56:45.81ID:v4E0eL1J
まぁ、もうすぐID変わるからね
2020/02/01(土) 00:02:42.91ID:9soosqUN
ネタばらし興醒めだな
C++erそうゆうとこだぞ
C++erそうゆうとこだぞ
21デフォルトの名無しさん
2020/02/01(土) 00:03:19.42ID:K9hiSYW1 なんだと!
22蟻人間 ◆T6xkBnTXz7B0
2020/02/01(土) 00:05:22.38ID:l1s2tvQy 何か難しそうなC++コード、ここに貼ってくれよ。
2020/02/01(土) 00:37:10.49ID:pUJoLXPw
はいはい狙った通りになった宣言ねw
2020/02/01(土) 00:41:09.21ID:P+PaZ5tD
全然荒れずにコテンパンにのされてたじゃん
25デフォルトの名無しさん
2020/02/01(土) 00:44:51.53ID:K9hiSYW1 でも、もともと主張がおかしかったから、釣りだったのはホントじゃないの。
2020/02/01(土) 00:49:11.46ID:pUJoLXPw
釣りっていうかただの構ってちゃんな。何か深い考えがあるというわけでもないし。
27デフォルトの名無しさん
2020/02/01(土) 00:49:56.15ID:K9hiSYW1 釣りじゃなかったら相当痛い人だし。
釣りならちょっと痛い人で済むよ。
釣りならちょっと痛い人で済むよ。
28デフォルトの名無しさん
2020/02/01(土) 00:52:13.74ID:K9hiSYW1 ところで僕は自分の職業の板ってまったく見ないんだけど。
ここは職業プログラマが多いの?
ここは職業プログラマが多いの?
29デフォルトの名無しさん
2020/02/01(土) 00:53:02.37ID:K9hiSYW1 なんで見ないかというと得るものが全くないから。
2020/02/01(土) 01:09:30.45ID:50MDw/OE
goto ふとん;
2020/02/01(土) 02:05:11.46ID:efnE+DyP
わしも見ない
あそこは仕事のグチを書きこむとこやん
こっちは言語仕様のグチを書きこむとこや
あそこは仕事のグチを書きこむとこやん
こっちは言語仕様のグチを書きこむとこや
2020/02/01(土) 02:37:59.97ID:tav2AwxI
break break;
bresk break break;
break continue;
こんな書き方ができたら嬉しい?
bresk break break;
break continue;
こんな書き方ができたら嬉しい?
2020/02/01(土) 09:17:35.95ID:9lmFlpKY
export importよりひどいw
2020/02/01(土) 10:06:12.21ID:+WgC03YT
途中friskみたいのも混じってるしな
36デフォルトの名無しさん
2020/02/01(土) 10:19:22.01ID:Bc9LjLbW ネアンデルタール人はホモサピエンスの基底クラスであったか。
ネアンデルタール人のDNA、アフリカの現生人類からも検出 新研究
https://www.cnn.co.jp/fringe/35148770.html
2020.01.31 Fri posted at 13:15 JST
ネアンデルタール人のDNA、アフリカの現生人類からも検出 新研究
https://www.cnn.co.jp/fringe/35148770.html
2020.01.31 Fri posted at 13:15 JST
2020/02/01(土) 11:58:10.08ID:YFAnTUnh
多重ループを抜ける方法
ループに名前は名前を考えるのがイヤ
break [数字] は数えるのがイヤ
関数を分けてreturn はもっとイヤ
変数を使ってbreakで抜けるのは論外
でもgotoはなんとなくイヤ
全ての要望に答えたのが >>32
ループに名前は名前を考えるのがイヤ
break [数字] は数えるのがイヤ
関数を分けてreturn はもっとイヤ
変数を使ってbreakで抜けるのは論外
でもgotoはなんとなくイヤ
全ての要望に答えたのが >>32
2020/02/01(土) 12:17:12.69ID:pUJoLXPw
バカの要望を聞いてさらにロクでもない方向に行ってしまうっていう
わかりやすい例を提供してくれてありがとう。
わかりやすい例を提供してくれてありがとう。
2020/02/01(土) 12:30:47.94ID:+WgC03YT
多重ループにする設計が悪い
2020/02/01(土) 12:31:58.09ID:YFAnTUnh
ん?
皮肉のつもりで書いたんだけど
真面目な書き込みととらえられるとは思わなかった
皮肉のつもりで書いたんだけど
真面目な書き込みととらえられるとは思わなかった
2020/02/01(土) 12:34:39.38ID:YFAnTUnh
主に>>39みたいなアホに対する皮肉
2020/02/01(土) 12:40:18.47ID:+WgC03YT
は?オメェだろアホ
2020/02/01(土) 12:41:53.34ID:pUJoLXPw
あえて説明してるところで恥ずかしいことになってる奴w
2020/02/01(土) 13:00:03.90ID:TULylXcw
>>37
おれはおもしろいアイデアと思う
他に考えるとしたら
やはり名前があった方が変更に強いと思うのでその線でいくと
大抵ループにはイテレータやカウンタが紐づいてるから
それを使って
for (auto& x : なんとか) {
for (auto& y : なんとか) {
.break x;
}
}
とかどうだろ?
for以外で使えないしforでも宣言空だとだめだけど
頻繁に使うわけじゃないだろうから妥協できるかなと
おれはおもしろいアイデアと思う
他に考えるとしたら
やはり名前があった方が変更に強いと思うのでその線でいくと
大抵ループにはイテレータやカウンタが紐づいてるから
それを使って
for (auto& x : なんとか) {
for (auto& y : なんとか) {
.break x;
}
}
とかどうだろ?
for以外で使えないしforでも宣言空だとだめだけど
頻繁に使うわけじゃないだろうから妥協できるかなと
2020/02/01(土) 13:02:13.36ID:YFAnTUnh
BASIC
2020/02/01(土) 13:03:32.19ID:+WgC03YT
なにそのセンスの欠片もない気持ち悪いコード
47デフォルトの名無しさん
2020/02/01(土) 13:19:23.65ID:fiLTG5Nb while(){} や do{}while(); で使えないので却下
2020/02/01(土) 15:04:44.31ID:7G0Z2VlM
for(int x = 0; i < ... )
{
int y = 0;
LOOP:
a[x][y]...
++y;
if(...){ break; /*多重ループ脱出*/ }
goto LOOP;
}
{
int y = 0;
LOOP:
a[x][y]...
++y;
if(...){ break; /*多重ループ脱出*/ }
goto LOOP;
}
2020/02/01(土) 16:42:25.84ID:hd+by06W
2020/02/01(土) 17:21:08.52ID:9BMLg08w
2020/02/01(土) 17:34:30.73ID:pUJoLXPw
こういうしょーもないシンタックスの話って馬鹿でもしやすいのが盛り上がる理由なんだろうな。
2020/02/01(土) 17:48:52.85ID:YFAnTUnh
特定の言語のスレ
シンタックスを語らずに何を語る?
シンタックスを語らずに何を語る?
2020/02/01(土) 17:51:10.61ID:YFAnTUnh
>>50
じゃあそれで
じゃあそれで
2020/02/01(土) 17:55:08.95ID:YFAnTUnh
break 9;
を数えたく無いとか言ってたヤツがいたけど
そういう時は素直にgotoを使えば良い
を数えたく無いとか言ってたヤツがいたけど
そういう時は素直にgotoを使えば良い
2020/02/01(土) 17:55:47.26ID:rsRLlL5x
てか継続が欲しい
56はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 18:08:11.40ID:6nnXKMBq >>55
C++ ではオブジェクトの寿命の管理と辻褄を合わせなきゃならないんだから full continuation は無理だぞ。
C++ ではオブジェクトの寿命の管理と辻褄を合わせなきゃならないんだから full continuation は無理だぞ。
2020/02/01(土) 18:09:32.76ID:YFAnTUnh
継続とは?
2020/02/01(土) 18:12:05.70ID:YFAnTUnh
setjmp のことか
59デフォルトの名無しさん
2020/02/01(土) 18:12:34.25ID:Bc9LjLbW ループに名前を付け、その名前で離脱や継続を行う。
ループA {
ループA {
60デフォルトの名無しさん
2020/02/01(土) 18:16:20.88ID:Bc9LjLbW 途中で送信してしまった。面倒だから書き直さないが、
breakやcontinueはキーワードが紛らわしいのでPerlのlastとnextを拝借する。
last ループA; とか next ループA; みたいな感じ。
breakやcontinueはキーワードが紛らわしいのでPerlのlastとnextを拝借する。
last ループA; とか next ループA; みたいな感じ。
2020/02/01(土) 18:16:45.14ID:YFAnTUnh
わざわざ名前を付けるならgotoで良いんでは?
2020/02/01(土) 18:18:49.32ID:vKrtBnhX
gcc5ぐらいから一気にgcc10にしたらエラー表示とかデフォルトの警告とか色々変わっててわろた
63デフォルトの名無しさん
2020/02/01(土) 18:19:46.95ID:Bc9LjLbW >>61
まあね。だけどgotoはフリーダムすぎて良くないでしょ。
まあね。だけどgotoはフリーダムすぎて良くないでしょ。
2020/02/01(土) 18:34:11.57ID:YFAnTUnh
いや全然そう思わない
gotoで何か不都合がある?
gotoで何か不都合がある?
2020/02/01(土) 18:52:41.69ID:pUJoLXPw
>>52
コンパイラ毎の最適化における癖とか、例外の実装についての差異なんかも語ってもいいんだぞ。
コンパイラ毎の最適化における癖とか、例外の実装についての差異なんかも語ってもいいんだぞ。
66はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 18:56:33.52ID:6nnXKMBq >>63
goto は自由すぎるけども、ループを何段階も一気に抜けたいとかいう状況がすでにだいぶん自由だと思うぞ。
そういう状況が生まれたらもう駄目なんだよ。
ごちゃごちゃとした使い分けを考えるよりおとなしく goto した方が「そこが悪い」ってのが目立って良い。
goto は自由すぎるけども、ループを何段階も一気に抜けたいとかいう状況がすでにだいぶん自由だと思うぞ。
そういう状況が生まれたらもう駄目なんだよ。
ごちゃごちゃとした使い分けを考えるよりおとなしく goto した方が「そこが悪い」ってのが目立って良い。
2020/02/01(土) 19:01:47.00ID:YFAnTUnh
一番使いたいのは2段break
行列や画像など2次元構造では当たり前のように2重ループになる
2重ループを抜けたい状況は設計が悪い
と思う感覚が全く理解できない
行列や画像など2次元構造では当たり前のように2重ループになる
2重ループを抜けたい状況は設計が悪い
と思う感覚が全く理解できない
2020/02/01(土) 19:01:49.68ID:TULylXcw
構造化を壊さないことを保証した仕組みで脱出したいってことでしょ
2020/02/01(土) 19:04:12.92ID:YFAnTUnh
2次元構造の2個のループを抜ける為に
非常に関連のある2個のループを別関数に分ける
この方が設計が悪い
というのがおれの感覚
非常に関連のある2個のループを別関数に分ける
この方が設計が悪い
というのがおれの感覚
2020/02/01(土) 19:07:14.52ID:JWECbGc7
>>67
gotoは悪、多重ループは悪、みたいなどこかで聞いたルールを杓子定規に常に遵守すべき絶対ルールのように考える人が少なからずいるんだろうね。声が大きいだけかもしれないけど。
gotoは悪、多重ループは悪、みたいなどこかで聞いたルールを杓子定規に常に遵守すべき絶対ルールのように考える人が少なからずいるんだろうね。声が大きいだけかもしれないけど。
2020/02/01(土) 19:09:12.42ID:PjJtYhAX
gotoの利用にコンパイラの補佐があればよかったのに
2020/02/01(土) 19:10:50.63ID:PjJtYhAX
中カッコ、変数の有効範囲含め
スコープ内に飛び込むジャンプを一切禁止、前方のみと決めれば
なかなか直観的でわかりやすいキーワード
だとおもうのに
スコープ内に飛び込むジャンプを一切禁止、前方のみと決めれば
なかなか直観的でわかりやすいキーワード
だとおもうのに
2020/02/01(土) 19:19:24.65ID:YFAnTUnh
一切禁止とか言うから
それが絶対だと初心者が思って思考停止する
この典型がgoto
使った方が良い時は使う
再帰も生ポもグローバル変数も多重継承も多重ループも
それが絶対だと初心者が思って思考停止する
この典型がgoto
使った方が良い時は使う
再帰も生ポもグローバル変数も多重継承も多重ループも
74はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 19:25:00.72ID:6nnXKMBq >>67
ここでワイが「悪い」って言ってるのは使うなとか別の方法がとれるとかいうほどの強い意味じゃなくてさ、
気を付けなきゃならないポイントとして目立ってもらわなきゃ困るって程度の意味。
だけど、日常的にそこら中でそういうポイントがあるのならやっぱり悪いとは思うけど……。
ここでワイが「悪い」って言ってるのは使うなとか別の方法がとれるとかいうほどの強い意味じゃなくてさ、
気を付けなきゃならないポイントとして目立ってもらわなきゃ困るって程度の意味。
だけど、日常的にそこら中でそういうポイントがあるのならやっぱり悪いとは思うけど……。
2020/02/01(土) 19:26:16.45ID:j/qpVk5O
二重ループの脱出は
[&]{
for(){
for(){
return;
}
}}();
で結論出たはずだが
[&]{
for(){
for(){
return;
}
}}();
で結論出たはずだが
2020/02/01(土) 19:29:49.61ID:YFAnTUnh
これはひどい
2020/02/01(土) 19:44:49.47ID:PjJtYhAX
それオーバーヘッドかからんの?
2020/02/01(土) 19:47:58.86ID:j/qpVk5O
関数オブジェクトはまともなコンパイラならインライン展開される
2020/02/01(土) 19:48:45.53ID:7G0Z2VlM
贅沢言いすぎだね
素のPascalなんてreturnすら無いからね
もはやどうやってプログラムを書いたらいいか分からないレベル
素のPascalなんてreturnすら無いからね
もはやどうやってプログラムを書いたらいいか分からないレベル
2020/02/01(土) 19:53:54.21ID:7G0Z2VlM
Pascalは完璧な構造化言語を目指したから
入口と出口を常に一つずつにするというポリシーがあって
それゆえreturnが無いんだよね
returnがあると出口があちこちに散らばるので
構造化じゃない、汚い、という考え
なお、breakは有るもよう
入口と出口を常に一つずつにするというポリシーがあって
それゆえreturnが無いんだよね
returnがあると出口があちこちに散らばるので
構造化じゃない、汚い、という考え
なお、breakは有るもよう
2020/02/01(土) 19:58:58.33ID:+WgC03YT
[&]{
try{
for(){
for(){
throw 0;
}
}catch(...){}
}}();
try{
for(){
for(){
throw 0;
}
}catch(...){}
}}();
82はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 20:02:08.79ID:6nnXKMBq 抽象的なレベルで考えたら break は
「残りの文が if 式で囲まれていると見なして暗黙のフラグを設定する (そのフラグは暗黙にループの終了条件でもある)」
とも考えられるから、構文糖だといえば構造化は壊れていない。
だけどなぁ、プログラムは人が書くものだし、人にとってどう見えるかも大事なんだよな。
そこらへんは見方によってどうとでも理屈を付けられてしまう。
「残りの文が if 式で囲まれていると見なして暗黙のフラグを設定する (そのフラグは暗黙にループの終了条件でもある)」
とも考えられるから、構文糖だといえば構造化は壊れていない。
だけどなぁ、プログラムは人が書くものだし、人にとってどう見えるかも大事なんだよな。
そこらへんは見方によってどうとでも理屈を付けられてしまう。
2020/02/01(土) 20:04:46.46ID:+WgC03YT
[&]{
try{
for(){
for(){
throw 2;
}
}
}catch(int d)
{printf("%d段階ジャンプしたお¥n",d);}
}();
try{
for(){
for(){
throw 2;
}
}
}catch(int d)
{printf("%d段階ジャンプしたお¥n",d);}
}();
2020/02/01(土) 20:10:07.66ID:tav2AwxI
>>82
break 2 も gotoでループを抜けるのも同じ
break 2 も gotoでループを抜けるのも同じ
2020/02/01(土) 20:24:42.41ID:iBA7Xa3w
2020/02/01(土) 20:47:35.89ID:BhmlSyWc
>>67
3重ループは? 4重ループは? なんで2だけなの?
3重ループは? 4重ループは? なんで2だけなの?
2020/02/01(土) 20:52:34.51ID:TULylXcw
たまに国語力が心配になるやつがいるよな
2020/02/01(土) 20:53:59.21ID:+WgC03YT
[&]{
try{
for(){
for(){
throw "リレミト";
}
}
}catch(const char*s)
{printf("%sの呪文を唱えた¥n",s);}
}();
try{
for(){
for(){
throw "リレミト";
}
}
}catch(const char*s)
{printf("%sの呪文を唱えた¥n",s);}
}();
2020/02/01(土) 20:56:56.11ID:BhmlSyWc
2020/02/01(土) 21:07:19.54ID:vKrtBnhX
for () {
for () {
goto done;
}
}
done:
どう考えてもこちらのほうが綺麗
for () {
goto done;
}
}
done:
どう考えてもこちらのほうが綺麗
2020/02/01(土) 21:09:23.19ID:BhmlSyWc
92はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 21:14:53.51ID:6nnXKMBq ほんまになぁ。
そんな簡単なことをラベル付き break だのなんだのって面倒なだけとしか思えぬ。
もう構造化は破綻してるんだからおとなしく goto しとけよな!
そんな簡単なことをラベル付き break だのなんだのって面倒なだけとしか思えぬ。
もう構造化は破綻してるんだからおとなしく goto しとけよな!
2020/02/01(土) 21:19:44.00ID:dP/tym/A
2020/02/01(土) 21:22:30.66ID:BhmlSyWc
2020/02/01(土) 21:25:42.92ID:dP/tym/A
>>94
It's purely kindness for non-Japanese speaker. Did you not like it?
It's purely kindness for non-Japanese speaker. Did you not like it?
2020/02/01(土) 21:26:06.76ID:tav2AwxI
2020/02/01(土) 21:26:27.45ID:BhmlSyWc
Пожалуйста, говорите по-японски.
2020/02/01(土) 21:29:34.25ID:dP/tym/A
なんだロシア人か
Я не понимаю >>67, потому что я не понимаю японский?
Я не понимаю >>67, потому что я не понимаю японский?
2020/02/01(土) 21:32:56.91ID:tav2AwxI
100はちみつ餃子 ◆8X2XSCHEME
2020/02/01(土) 21:34:56.10ID:6nnXKMBq >>96
同じだからそれ以上に新しい文法を持ち込んでもそれほど綺麗にならんって! ということを言いたい。
同じだからそれ以上に新しい文法を持ち込んでもそれほど綺麗にならんって! ということを言いたい。
101デフォルトの名無しさん
2020/02/01(土) 21:36:54.68ID:BhmlSyWc >>98
Mimi ni Kijapani.
Mimi ni Kijapani.
102デフォルトの名無しさん
2020/02/01(土) 21:38:38.94ID:TULylXcw103デフォルトの名無しさん
2020/02/01(土) 21:40:19.97ID:BhmlSyWc >>96
ほんこれ
ほんこれ
104デフォルトの名無しさん
2020/02/01(土) 21:42:54.84ID:tav2AwxI105デフォルトの名無しさん
2020/02/01(土) 21:43:54.40ID:BhmlSyWc >>104
ほんこれ
ほんこれ
106デフォルトの名無しさん
2020/02/01(土) 21:48:36.93ID:7G0Z2VlM 危ない操作はできないようにしようってのが言語の進化だからな
それ無視して、安全に使うのが前提とか、正しく使うのが前提とか、それ言っちゃね
なんかおかしな方向へ行くよね
それ無視して、安全に使うのが前提とか、正しく使うのが前提とか、それ言っちゃね
なんかおかしな方向へ行くよね
107デフォルトの名無しさん
2020/02/01(土) 21:48:59.21ID:TULylXcw >>104
構造化プログラミングの概念は知ってるんだよね?
構造化プログラミングの概念は知ってるんだよね?
108デフォルトの名無しさん
2020/02/01(土) 21:50:07.81ID:7G0Z2VlM gotoを正しくしか使えないように改良したのがreturn、break、continue
ってことも忘れずに
ってことも忘れずに
109デフォルトの名無しさん
2020/02/01(土) 21:54:44.41ID:BhmlSyWc110デフォルトの名無しさん
2020/02/01(土) 21:57:47.27ID:7G0Z2VlM 見てください皆さん、ID:BhmlSyWc ← ひどいですよ
まず何言ってるか分からない
このレベルはきついな
まず何言ってるか分からない
このレベルはきついな
111デフォルトの名無しさん
2020/02/01(土) 22:02:32.59ID:tav2AwxI >>106
どの辺からgotoが危ない操作だと思うの?
どの辺からgotoが危ない操作だと思うの?
112デフォルトの名無しさん
2020/02/01(土) 22:06:43.33ID:vKrtBnhX まあ1万行ある関数の中で、5千行目ぐらいにgotoがあって、ラベルが関数の先頭付近にあるとか、それに近いのは見たことあるが、あれはどう考えてもgotoの悪い例だからな
包丁で味噌汁食ってるようなもん
包丁で味噌汁食ってるようなもん
113デフォルトの名無しさん
2020/02/01(土) 22:06:57.37ID:BhmlSyWc114デフォルトの名無しさん
2020/02/01(土) 22:08:59.52ID:BhmlSyWc115デフォルトの名無しさん
2020/02/01(土) 22:11:31.06ID:tav2AwxI 不定値や無限ループの危険はgotoに限ったことじゃないし
ループを抜けるgotoには関係ない話
goto特有の危険な場面
何を心配してるんだろう
酸っぱいブドウ?
ループを抜けるgotoには関係ない話
goto特有の危険な場面
何を心配してるんだろう
酸っぱいブドウ?
116デフォルトの名無しさん
2020/02/01(土) 22:16:09.36ID:TULylXcw だめだこりゃ
117デフォルトの名無しさん
2020/02/01(土) 22:19:01.58ID:7G0Z2VlM gotoはどこへ飛ぶか分からないから読みにくいんだよ
前に飛ぶのか、後ろに飛ぶのか、それすら分からない
飛び先を分かりやすく改良したのがreturn、break、continue
それぞれ飛び先が決まっているから追うのが楽
その英知が分からんっていうならreturn、break、continueを使わずに
全部gotoでやれば?って話
前に飛ぶのか、後ろに飛ぶのか、それすら分からない
飛び先を分かりやすく改良したのがreturn、break、continue
それぞれ飛び先が決まっているから追うのが楽
その英知が分からんっていうならreturn、break、continueを使わずに
全部gotoでやれば?って話
118デフォルトの名無しさん
2020/02/01(土) 22:22:45.11ID:tav2AwxI 関数なんてもっとどこに飛ぶかわからんぞ
119デフォルトの名無しさん
2020/02/01(土) 22:25:22.98ID:tav2AwxI どこに飛ぶかわかる名前にするってのが普通の発想
意味でも構造でも文章でも好きな名前を付けられる
関数も変数も名前空間も全てそう
意味でも構造でも文章でも好きな名前を付けられる
関数も変数も名前空間も全てそう
120デフォルトの名無しさん
2020/02/01(土) 22:25:32.73ID:TULylXcw gotoは中にも飛べるの知らないんじゃないこの人
121デフォルトの名無しさん
2020/02/01(土) 22:25:55.92ID:BhmlSyWc >>117
飛び先じゃなく飛ぶこと自体の問題なんだがw
飛び先じゃなく飛ぶこと自体の問題なんだがw
122デフォルトの名無しさん
2020/02/01(土) 22:26:20.90ID:7G0Z2VlM つまりはそういう話で、追いやすいように飛び先を制限したいよねーってのが根底に有って
(当然そういうのが念頭にあってreturn,break,continueは生まれたわけで、前例に倣いたい所)
それでブロックに名前を付けるだのbreak 2だのって書き込んでいる人がいるわけで
gotoでいいんじゃね?っていうなら、return,break,continueもgotoでいいんじゃね?
むしろforやwhileもgotoでいいんじゃね?gotoを正しく使えばいいんだろ?ってなる
(当然そういうのが念頭にあってreturn,break,continueは生まれたわけで、前例に倣いたい所)
それでブロックに名前を付けるだのbreak 2だのって書き込んでいる人がいるわけで
gotoでいいんじゃね?っていうなら、return,break,continueもgotoでいいんじゃね?
むしろforやwhileもgotoでいいんじゃね?gotoを正しく使えばいいんだろ?ってなる
123デフォルトの名無しさん
2020/02/01(土) 22:26:36.74ID:TULylXcw 構造化プログラミング知らずにgotoいきって使うのはさすがにやばい
124デフォルトの名無しさん
2020/02/01(土) 22:28:23.87ID:BhmlSyWc125デフォルトの名無しさん
2020/02/01(土) 22:31:09.71ID:7G0Z2VlM 巻数はどこに飛ぶか分からないが、必ず元に戻ってくる(のが基本)
行きっぱなしというか、ただのジャンプのgotoやらbreakやらとは違うのだよ
関数のコールは入口と出口が一つになってて非常に構造化されてる好例
こういうところ分からないってのはセンスないよ
行きっぱなしというか、ただのジャンプのgotoやらbreakやらとは違うのだよ
関数のコールは入口と出口が一つになってて非常に構造化されてる好例
こういうところ分からないってのはセンスないよ
126デフォルトの名無しさん
2020/02/01(土) 22:32:56.84ID:7G0Z2VlM 巻数→関数
127デフォルトの名無しさん
2020/02/01(土) 22:35:10.84ID:tav2AwxI 使い所でgotoが使えないのはセンス無い
使い所でgptoを使わないのはコードが見にくい
使い所でgotoを使わないのは危険なコード
goto否定派にレベルを合わせた主張をするとこんな感じ
使い所でgptoを使わないのはコードが見にくい
使い所でgotoを使わないのは危険なコード
goto否定派にレベルを合わせた主張をするとこんな感じ
128デフォルトの名無しさん
2020/02/01(土) 22:42:27.15ID:TULylXcw やっぱりこいつダメだな
知性がない
知性がない
129デフォルトの名無しさん
2020/02/01(土) 22:44:49.19ID:tav2AwxI 使い所でgotoを使わないのは知性が無い
130デフォルトの名無しさん
2020/02/01(土) 22:45:34.37ID:7G0Z2VlM 本心では誰もgotoは否定していないんじゃないかな
今は多段breakの機能が無いんだからgotoを使えばいいだろう
しかし、もしgotoを使わないで済む多段breakの新機能があったのなら
それを使ったほうがいいだろうし
じゃーその新機能はどんなものが考えられるか?って遊びだろ?
ブロックに名前付けるだとかbreak nだとかは
今は多段breakの機能が無いんだからgotoを使えばいいだろう
しかし、もしgotoを使わないで済む多段breakの新機能があったのなら
それを使ったほうがいいだろうし
じゃーその新機能はどんなものが考えられるか?って遊びだろ?
ブロックに名前付けるだとかbreak nだとかは
131デフォルトの名無しさん
2020/02/01(土) 22:50:41.91ID:wBNP08tW 多段breakは考えた奴は脳味噌が糞すぐる…
ループの深さを変えたとたんにバグるじゃん?
ループの深さは金輪際変えないとか
ループの深さを変えるとき必ずループ全体を机上確認するとかだったら
gotoでも逝けるじゃん??
ループの深さを変えたとたんにバグるじゃん?
ループの深さは金輪際変えないとか
ループの深さを変えるとき必ずループ全体を机上確認するとかだったら
gotoでも逝けるじゃん??
132デフォルトの名無しさん
2020/02/01(土) 22:53:08.37ID:vKrtBnhX ああ、そうだな
break 2だとfor文が3重になったときにバグるな
個人的には面白いと思ったが
break 2だとfor文が3重になったときにバグるな
個人的には面白いと思ったが
133デフォルトの名無しさん
2020/02/01(土) 22:53:40.31ID:tav2AwxI 使い所は2次元構造の2重ループとかだよ
134デフォルトの名無しさん
2020/02/01(土) 22:55:40.65ID:rsRLlL5x 画像処理とかで2重ループ良く書くけど、最近2段階breakしたくなった記憶がないな
実は要らないんじゃね
実は要らないんじゃね
135デフォルトの名無しさん
2020/02/01(土) 22:56:47.94ID:tav2AwxI じゃあbreakもいらないんじゃない?
136デフォルトの名無しさん
2020/02/01(土) 22:59:11.96ID:7G0Z2VlM まーC++がプリプロセッサを殺すために進化しているのと同様
Cはgotoを殺すために進化したともいえるわけで
たとえば、関数、for、return、などなど、制御構造にかかわるほとんどの物が
gotoを殺すために有るといってもよい
だから、もっとgotoを殺すにはどうすればよいか、考えるのは自然な発想かと
C++でもテンプレートなどで出来ないことはプリプロセッサでしなければならないし
ただ、同じことがテンプレートとかで出来るならそのほうが良いだろうし
もっとプリプロセッサを殺すためにはどういう機能を追加すればよいか考えるのは自然な事だろう
同じ同じ
Cはgotoを殺すために進化したともいえるわけで
たとえば、関数、for、return、などなど、制御構造にかかわるほとんどの物が
gotoを殺すために有るといってもよい
だから、もっとgotoを殺すにはどうすればよいか、考えるのは自然な発想かと
C++でもテンプレートなどで出来ないことはプリプロセッサでしなければならないし
ただ、同じことがテンプレートとかで出来るならそのほうが良いだろうし
もっとプリプロセッサを殺すためにはどういう機能を追加すればよいか考えるのは自然な事だろう
同じ同じ
goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね
C/C++ の goto とかはどう頑張っても関数の中でだけしか跳べないのだから、BASIC の GOTO ほどにはスパゲッティ状態を招けないのではと考えます
無論、その関数が異様にデカければ別ですが、そんなデカい関数を書くほうが問題であって goto が問題なのではないかと
C/C++ の goto とかはどう頑張っても関数の中でだけしか跳べないのだから、BASIC の GOTO ほどにはスパゲッティ状態を招けないのではと考えます
無論、その関数が異様にデカければ別ですが、そんなデカい関数を書くほうが問題であって goto が問題なのではないかと
138デフォルトの名無しさん
2020/02/01(土) 23:11:38.33ID:tav2AwxI ループを抜ける為にだけ使われる変数を使ったループ抜け
世の中にはたくさんこういうコードがある
たくさんのコードを見る機会がある人なら
たくさん見たことがあるはず
gotoネガティブキャンペーンのせいだよ
世の中にはたくさんこういうコードがある
たくさんのコードを見る機会がある人なら
たくさん見たことがあるはず
gotoネガティブキャンペーンのせいだよ
139デフォルトの名無しさん
2020/02/01(土) 23:11:46.92ID:JWECbGc7 >>136
gotoが使わないで済むように進化してくのは期待している。
ただ現状として、多重ループを抜ける場合みたいにgotoを使うのがシンプルで分かりやすいならば、毛嫌いしたり盲目的に原則振りかざすよりgoto使えばいいだけのことだと思うよ。
gotoが使わないで済むように進化してくのは期待している。
ただ現状として、多重ループを抜ける場合みたいにgotoを使うのがシンプルで分かりやすいならば、毛嫌いしたり盲目的に原則振りかざすよりgoto使えばいいだけのことだと思うよ。
140デフォルトの名無しさん
2020/02/01(土) 23:32:29.85ID:TULylXcw >>138
お前ほんとに病気だな
多重ループ脱出でgotoが簡潔なのはみなわかってる
でもgotoは自由度が高すぎて構造を壊す可能性があるわけ
だから改善するとしたら何があるかという話をしてるだけであって
別にgoto禁止とかの話はしてない
好きなだけ使ってろよ
あと構造化プログラミングぐらい知っとけ
お前ほんとに病気だな
多重ループ脱出でgotoが簡潔なのはみなわかってる
でもgotoは自由度が高すぎて構造を壊す可能性があるわけ
だから改善するとしたら何があるかという話をしてるだけであって
別にgoto禁止とかの話はしてない
好きなだけ使ってろよ
あと構造化プログラミングぐらい知っとけ
141デフォルトの名無しさん
2020/02/01(土) 23:45:45.20ID:tav2AwxI >>140
色々と違う
色々と違う
142デフォルトの名無しさん
2020/02/01(土) 23:46:54.20ID:vKrtBnhX for () {
break label;
} label;
for () {
for () {
break label1
} label2;
} label1;
こういう風にfor文のお尻にラベルを付けられるようにすれば局所化したgoto風のbreakが使えるのでは
break label;
} label;
for () {
for () {
break label1
} label2;
} label1;
こういう風にfor文のお尻にラベルを付けられるようにすれば局所化したgoto風のbreakが使えるのでは
143デフォルトの名無しさん
2020/02/01(土) 23:48:30.11ID:tav2AwxI for () {
goto label;
} label:;
for () {
for () {
goto label1;
} label2:;
} label1:;
goto label;
} label:;
for () {
for () {
goto label1;
} label2:;
} label1:;
144デフォルトの名無しさん
2020/02/01(土) 23:49:00.26ID:tav2AwxI 今でも出来る
145デフォルトの名無しさん
2020/02/01(土) 23:49:30.89ID:wBNP08tW Pythonはループにラベルをつける手が使えた
と思った(幻覚でなければ
と思った(幻覚でなければ
146デフォルトの名無しさん
2020/02/01(土) 23:52:18.24ID:pUJoLXPw またgotoの話になってんのかよ。。
だからいっそ禁止にと思ったが、それよりもさらにクソな構文の提案が出てたり。。
想定を超えた馬鹿どもばっかりじゃねーか。
だからいっそ禁止にと思ったが、それよりもさらにクソな構文の提案が出てたり。。
想定を超えた馬鹿どもばっかりじゃねーか。
147デフォルトの名無しさん
2020/02/01(土) 23:54:48.66ID:tav2AwxI 無理に会話に入って来なくて良いよ
148デフォルトの名無しさん
2020/02/01(土) 23:59:22.03ID:7G0Z2VlM ただ、凝りに凝った複雑怪奇なテンプレートより
シンプルに作ったマクロの方が読みやすいって事例も当然あるだろうよ
てか、わりと、最近、残念ながらその傾向が・・・で、C++が嫌われる理由にも・・・
だからgotoを殺すのも上手くやらないとむしろ酷くなる
そこが腕の振るいどころで面白い部分でもあるし、言語作ってる連中もそんなことで頭いっぱい
変なゲーム性が有って、逆にそれがまたダメな部分でもあって
あと、妹大好き
シンプルに作ったマクロの方が読みやすいって事例も当然あるだろうよ
てか、わりと、最近、残念ながらその傾向が・・・で、C++が嫌われる理由にも・・・
だからgotoを殺すのも上手くやらないとむしろ酷くなる
そこが腕の振るいどころで面白い部分でもあるし、言語作ってる連中もそんなことで頭いっぱい
変なゲーム性が有って、逆にそれがまたダメな部分でもあって
あと、妹大好き
149デフォルトの名無しさん
2020/02/02(日) 00:17:33.29ID:rWwvB4I9 多段breakの使用頻度がそれほど多くないことを加味すれば
break n;方式が妥当だろうね
これだと2重ループを3重ループに書き換えたときにバグる、とか
意味不明なことを言ってる奴もいるが
それは1重ループをbreakで抜けてたのを2重ループに書き換えたらバグった
と言ってるのと同じであって、当たり前の話だし、今でも同じことだ
break n;が一番シンプルで妥当だと思うね
break n;方式が妥当だろうね
これだと2重ループを3重ループに書き換えたときにバグる、とか
意味不明なことを言ってる奴もいるが
それは1重ループをbreakで抜けてたのを2重ループに書き換えたらバグった
と言ってるのと同じであって、当たり前の話だし、今でも同じことだ
break n;が一番シンプルで妥当だと思うね
150デフォルトの名無しさん
2020/02/02(日) 00:32:21.06ID:7b/FZYuN breakの後にマジックナンバーを書くのが気に入らない
定数には意味のわかる名前を付けたい
定数には意味のわかる名前を付けたい
151デフォルトの名無しさん
2020/02/02(日) 00:33:00.49ID:rWwvB4I9 ただし、break n;のnの部分が変数でもOKとかなってたらかなりウザいが
そこはnは定数と定めたいね、でもC++の場合は定数と言っても・・・
複雑にしようと思えばいくらでも複雑にできるわなー
普通に使う分には問題ないかと
明日からbreak n;が入っても、たぶん誰も困らないし、混乱も起きないだろう
割のいい賭けだし、俺はアリだと思うね
そこはnは定数と定めたいね、でもC++の場合は定数と言っても・・・
複雑にしようと思えばいくらでも複雑にできるわなー
普通に使う分には問題ないかと
明日からbreak n;が入っても、たぶん誰も困らないし、混乱も起きないだろう
割のいい賭けだし、俺はアリだと思うね
152デフォルトの名無しさん
2020/02/02(日) 00:33:32.69ID:7b/FZYuN breakとbreak nが同じとか意味不明な主張をなさる御仁がいらっしゃるが
じゃあcontinueがcontinue nになったらどんな地獄が発生するか
考えてみたら良い
じゃあcontinueがcontinue nになったらどんな地獄が発生するか
考えてみたら良い
153デフォルトの名無しさん
2020/02/02(日) 00:48:04.23ID:rWwvB4I9 別にcontinue n;
全然ありでしょ
これと同等の事を、何か別の方法でやるよりスマート
for(;;){
bool do_continue = false;
for(;;){
if(...){ do_continue = true; break;}
}
if( do_continue ){ continue; }
}
↓
for(;;){
for(;;){
if(...){ continue 2; }
}
}
全然ありでしょ
これと同等の事を、何か別の方法でやるよりスマート
for(;;){
bool do_continue = false;
for(;;){
if(...){ do_continue = true; break;}
}
if( do_continue ){ continue; }
}
↓
for(;;){
for(;;){
if(...){ continue 2; }
}
}
154デフォルトの名無しさん
2020/02/02(日) 01:00:22.64ID:7b/FZYuN do {
do {
...
if (cond) {
continue 2;
}
} while (副作用の有る式1);
} while (副作用の有る式2);
とから?
do {
...
if (cond) {
continue 2;
}
} while (副作用の有る式1);
} while (副作用の有る式2);
とから?
155デフォルトの名無しさん
2020/02/02(日) 01:03:23.27ID:0Gqmr542 break nなんてやるくらいならbreak label で抜けるループを明示的に指定したいな
↓
ループにラベルをつけるとして、先頭では見づらくて邪魔だな
↓
ループの末尾にラベルを付ければ見やすいけど、それだとlabelついたループを抜けると言うよりlabelの指す位置へのジャンプだな
↓
なんだgotoでいいじゃん
個人的には breakto label という記法でループ出口に書いたラベルに飛べるとするのが分かりやすいと思うけど、こんなことに新しい予約語を導入するくらいならgotoで十分だと思う。
↓
ループにラベルをつけるとして、先頭では見づらくて邪魔だな
↓
ループの末尾にラベルを付ければ見やすいけど、それだとlabelついたループを抜けると言うよりlabelの指す位置へのジャンプだな
↓
なんだgotoでいいじゃん
個人的には breakto label という記法でループ出口に書いたラベルに飛べるとするのが分かりやすいと思うけど、こんなことに新しい予約語を導入するくらいならgotoで十分だと思う。
156デフォルトの名無しさん
2020/02/02(日) 01:06:28.34ID:7b/FZYuN break nが良いとか言ってる椰子は
ついでに行番号も復活してほしいと思っているに違いナス
ついでに行番号も復活してほしいと思っているに違いナス
157デフォルトの名無しさん
2020/02/02(日) 01:15:40.31ID:rWwvB4I9 do{
do{
if(...) goto NEXT;
}while(...);
NEXT;
}while(...);
と等価だろう
要はこういうgotoを置き換えるために作られたのが
continueなのだから、そのルールに従うのが普通だろうね
もしくはgoto使わずにフラグでやっても、どのみち内側のループの条件式は実行されないわけで
do{
bool do_continue = false;
do{
if(...){ do_continue = true; break; }
}while(...);
if(do_continue) continue;
}while(...);
これ以外の解釈ってのは難しい
do{
if(...) goto NEXT;
}while(...);
NEXT;
}while(...);
と等価だろう
要はこういうgotoを置き換えるために作られたのが
continueなのだから、そのルールに従うのが普通だろうね
もしくはgoto使わずにフラグでやっても、どのみち内側のループの条件式は実行されないわけで
do{
bool do_continue = false;
do{
if(...){ do_continue = true; break; }
}while(...);
if(do_continue) continue;
}while(...);
これ以外の解釈ってのは難しい
158デフォルトの名無しさん
2020/02/02(日) 02:23:51.88ID:93obPCeA gotoの話題って今でもこんなに盛り上がるのか
159デフォルトの名無しさん
2020/02/02(日) 02:49:52.74ID:LC7cWz9a 老害が多いから
160デフォルトの名無しさん
2020/02/02(日) 03:26:54.49ID:EDNK6zQt そういう機能要望みたいなのここでやる意味ある?
C++Slackでやった方がよくない?
C++Slackでやった方がよくない?
161デフォルトの名無しさん
2020/02/02(日) 03:45:22.96ID:mzCY/+E0 英語は敷居が高いよ。
162デフォルトの名無しさん
2020/02/02(日) 05:06:46.10ID:DTIMfhpJ ,,-―--、
|:::::::::::::;;;ノ
|::::::::::( 」 <もう構造化は破綻してるんだからおとなしく goto しとけよな!
ノノノ ヽ_l
,,-┴―┴- 、 ∩_
/,|┌-[]─┐| \ ( ノ
/ ヽ| | バ | '、/\ / /
/ `./| | カ | |\ /
\ ヽ| lゝ | | \__/
\ |  ̄ ̄ ̄ |
⊂|______|
|l_l i l_l |
| ┬ |
|:::::::::::::;;;ノ
|::::::::::( 」 <もう構造化は破綻してるんだからおとなしく goto しとけよな!
ノノノ ヽ_l
,,-┴―┴- 、 ∩_
/,|┌-[]─┐| \ ( ノ
/ ヽ| | バ | '、/\ / /
/ `./| | カ | |\ /
\ ヽ| lゝ | | \__/
\ |  ̄ ̄ ̄ |
⊂|______|
|l_l i l_l |
| ┬ |
163デフォルトの名無しさん
2020/02/02(日) 06:40:45.35ID:mzCY/+E0 じゃあswitchも要らないって事じゃないか。
>>149
break n なんて間抜けの極みだと思いますね
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
break n なんて間抜けの極みだと思いますね
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
165デフォルトの名無しさん
2020/02/02(日) 07:37:33.82ID:SWo7Ruqh >>136
Cはgoto殺すために進化してねえよ
Cのgotoが関数外に飛べないのはスタック巻戻しのような仕掛けが複雑になりすぎるからで
構造化プログラミングで否定されるからという理由ではない
構造化プログラミングで否定される制御構造を持たないことにするなら
breakやlongjmpは存在できないはずだ
Cはgoto殺すために進化してねえよ
Cのgotoが関数外に飛べないのはスタック巻戻しのような仕掛けが複雑になりすぎるからで
構造化プログラミングで否定されるからという理由ではない
構造化プログラミングで否定される制御構造を持たないことにするなら
breakやlongjmpは存在できないはずだ
166デフォルトの名無しさん
2020/02/02(日) 07:44:05.46ID:pBPOCWQ5 結論が先にあって理由が後付けだから支離滅裂、一貫性の欠片もない事を書く
もはや宗教
もはや宗教
167デフォルトの名無しさん
2020/02/02(日) 07:46:45.45ID:SWo7Ruqh ほんと、宗教だね
洗脳されてるやつは強固に思考停止していて
何を言おうが馬の耳に念仏だ
洗脳されてるやつは強固に思考停止していて
何を言おうが馬の耳に念仏だ
168デフォルトの名無しさん
2020/02/02(日) 08:06:14.41ID:SWo7Ruqh >>159
根底がわかってねえやつが多いからだよ
古典的な基本がわかってねえやつは若造と爺のどっちに多いだろうね
頓珍漢なことを書いて袋叩きにされたからって逆恨みする精神性なやつはどっちに多いだろうね
根底がわかってねえやつが多いからだよ
古典的な基本がわかってねえやつは若造と爺のどっちに多いだろうね
頓珍漢なことを書いて袋叩きにされたからって逆恨みする精神性なやつはどっちに多いだろうね
169デフォルトの名無しさん
2020/02/02(日) 08:18:25.64ID:9aZda2U6 break labelでいいんじゃね
gotoと同じだが、labelがbreak的な位置にない場合コンパイルエラーになれば良い
gotoと同じだが、labelがbreak的な位置にない場合コンパイルエラーになれば良い
170デフォルトの名無しさん
2020/02/02(日) 08:27:24.30ID:DTIMfhpJ label貼るくらいならgoto使う
171デフォルトの名無しさん
2020/02/02(日) 09:22:07.84ID:mzCY/+E0 gotoは便利なswitchだからね。
便利すぎるわこれ。
これからも積極的に使っていこうと思います。
便利すぎるわこれ。
これからも積極的に使っていこうと思います。
172デフォルトの名無しさん
2020/02/02(日) 09:40:59.69ID:7b/FZYuN さすがにgotoでジャンプテーブル化の最適化までやる処理系は
まれだと思う
まれだと思う
173デフォルトの名無しさん
2020/02/02(日) 09:43:27.45ID:mzCY/+E0 アドレス直接指定なのに、テーブル必要ないんじゃないの。
テーブル必要ない分、switchより有利なんじゃないかと思いました。
テーブル必要ない分、switchより有利なんじゃないかと思いました。
174デフォルトの名無しさん
2020/02/02(日) 09:51:12.60ID:7b/FZYuN (条件分岐無しの素のgotoだけでどうやってswitchの便利な代替品にするつもりなのやら…
175デフォルトの名無しさん
2020/02/02(日) 09:53:50.90ID:mzCY/+E0 頑張ってひねり出した!!
けどウンコにしか見えない。
納得できるものを頼む。
けどウンコにしか見えない。
納得できるものを頼む。
176デフォルトの名無しさん
2020/02/02(日) 09:55:31.36ID:0Gqmr542 >>175
お前が何をいってるのか、何を考えてるのか理解できないのに、お前を納得させられる奴なんていないぞw
お前が何をいってるのか、何を考えてるのか理解できないのに、お前を納得させられる奴なんていないぞw
177デフォルトの名無しさん
2020/02/02(日) 10:10:20.38ID:o79zkFFu お尻にラベルつけて break ラベル; がいいとか言ってる奴は構造化の意味がわかってなさ過ぎ
ラベルは飛び先じゃなくてループに付けて break ラベル; でそのループから抜けるんだよ
なので break ラベル が使える言語はたいていループの頭にラベルをつけるようになってる
あと break レベル数 とか言ってる老害は早く滅びろ
ラベルは飛び先じゃなくてループに付けて break ラベル; でそのループから抜けるんだよ
なので break ラベル が使える言語はたいていループの頭にラベルをつけるようになってる
あと break レベル数 とか言ってる老害は早く滅びろ
178デフォルトの名無しさん
2020/02/02(日) 10:28:45.43ID:DTIMfhpJ 名前使うならこんな感じか
void main(){
auto scope1 {
for(;;){
for(){
break scope1;
}
}
}
void main(){
auto scope1 {
for(;;){
for(){
break scope1;
}
}
}
179デフォルトの名無しさん
2020/02/02(日) 10:29:18.43ID:mzCY/+E0 >>176
俺自身何を言っているのかよくわからないのだが。
俺自身何を言っているのかよくわからないのだが。
180デフォルトの名無しさん
2020/02/02(日) 10:31:44.19ID:DTIMfhpJ もしくは、forの直後
void main(){
for(;;)scope1{
for(;;){
break scope1;
}
}
}
void main(){
for(;;)scope1{
for(;;){
break scope1;
}
}
}
181デフォルトの名無しさん
2020/02/02(日) 10:58:10.77ID:MNdu0823 void main()の時点で読む気失せた
182デフォルトの名無しさん
2020/02/02(日) 11:16:46.30ID:DTIMfhpJ んだこんにゃろ
183デフォルトの名無しさん
2020/02/02(日) 11:22:39.21ID:D8WvcGqJ ループの先頭にラベルを書くくらいなら
gotoの方が分かりやすい
gotoの方が分かりやすい
184デフォルトの名無しさん
2020/02/02(日) 11:25:45.57ID:mzCY/+E0 あの、スレとは全然関係ないんだけど。
Boostでデバッグとリリース判別するマクロってありますか?
イテレータを1億回ほど回すのでデバッグだけテストを迂回したいんですが。
Boostでデバッグとリリース判別するマクロってありますか?
イテレータを1億回ほど回すのでデバッグだけテストを迂回したいんですが。
185デフォルトの名無しさん
2020/02/02(日) 11:30:31.96ID:9aZda2U6 なぜboost?
186デフォルトの名無しさん
2020/02/02(日) 11:34:47.86ID:mzCY/+E0 NDEBUGを知らなかったからです。
おまえらおせーよ。
おまえらおせーよ。
187デフォルトの名無しさん
2020/02/02(日) 11:39:04.55ID:SWo7Ruqh NDEBUGってISO/IEC9899やん
おまえさんがboostっていうから
レスポンス鈍かったんだよ
おまえさんがboostっていうから
レスポンス鈍かったんだよ
188デフォルトの名無しさん
2020/02/02(日) 11:48:10.68ID:mzCY/+E0 だよね。
そうだと思いました。
そうだと思いました。
189デフォルトの名無しさん
2020/02/02(日) 11:49:31.89ID:mzCY/+E0 今度からはよく考えて質問しようと思います。
190デフォルトの名無しさん
2020/02/02(日) 14:38:02.14ID:rWwvB4I9 今の一重ループを抜けるときの普通のbreakにはラベルを付けないのに
多重ループを抜けるためのbreakにはラベルが無いと読みにくくなるっていう
発想というか対称性というか整合性というか必然性が全く見えないんだが
今ラベル無しの一重breakで誰も発狂することもなく普通に使えているのに
多重breakになった瞬間にラベルが無きゃダメってなるのはなんか弱い
同じことを二回書いたけども
ラベル無しでも別に普通に読めるでしょ、今まで読めてるんだから
大体ラベル付けるんならgotoと手間自体は変わりないしな
多重ループを抜けるためのbreakにはラベルが無いと読みにくくなるっていう
発想というか対称性というか整合性というか必然性が全く見えないんだが
今ラベル無しの一重breakで誰も発狂することもなく普通に使えているのに
多重breakになった瞬間にラベルが無きゃダメってなるのはなんか弱い
同じことを二回書いたけども
ラベル無しでも別に普通に読めるでしょ、今まで読めてるんだから
大体ラベル付けるんならgotoと手間自体は変わりないしな
191デフォルトの名無しさん
2020/02/02(日) 14:40:18.63ID:mzCY/+E0 今多発今多動ラ大
読み解けなかった。
読み解けなかった。
192デフォルトの名無しさん
2020/02/02(日) 14:41:51.46ID:gkoi3ncl >>190
同意
同意
193デフォルトの名無しさん
2020/02/02(日) 14:43:14.46ID:mzCY/+E0 え、わかるんだ。
すげー。
すげー。
194デフォルトの名無しさん
2020/02/02(日) 14:47:27.35ID:gXxB23XL 下方向にだけ飛べるgoto相当機能があればgotoは要らなくなるんじゃない?
195デフォルトの名無しさん
2020/02/02(日) 14:53:57.04ID:7b/FZYuN >>190は、Cにgoto <label>とbreakがあるのになぜCはbreak nを設けるところまで踏み込まなかったのか、とか
break <n>で即値<n>に行き当たったコード閲覧者が行き先を知るために何をせねばならないかとか、
考えた方が良いので
は…
break <n>で即値<n>に行き当たったコード閲覧者が行き先を知るために何をせねばならないかとか、
考えた方が良いので
は…
196デフォルトの名無しさん
2020/02/02(日) 14:55:47.03ID:0Gqmr542 >>190
break nを勧めている人?
対象が1段なのと複数段とでは大きなギャップがあるでしょ。単純に対称性があると言えるものではないと思う。
ラベルつけるならgotoと手間が変わらないというのは同意。ただ、重要なのは手間が減ることではなく、複数段のループの外に出ることが明示されることだから、gotoと意味が混同されず同じ程度の手間でできる記法があるならそれは嬉しい。
break nを勧めている人?
対象が1段なのと複数段とでは大きなギャップがあるでしょ。単純に対称性があると言えるものではないと思う。
ラベルつけるならgotoと手間が変わらないというのは同意。ただ、重要なのは手間が減ることではなく、複数段のループの外に出ることが明示されることだから、gotoと意味が混同されず同じ程度の手間でできる記法があるならそれは嬉しい。
197デフォルトの名無しさん
2020/02/02(日) 14:56:57.31ID:EDNK6zQt 現実のC++について話せ
ここで新機能の導入について議論しても無駄だ
フォーラムでやれ
ここで新機能の導入について議論しても無駄だ
フォーラムでやれ
198デフォルトの名無しさん
2020/02/02(日) 14:57:45.57ID:gkoi3ncl 手間が減ることは重要だよ
ラベル名を考える手間をかけて良いならgotoで良い
ラベル名を考える手間をかけて良いならgotoで良い
199デフォルトの名無しさん
2020/02/02(日) 15:01:24.88ID:rWwvB4I9 大体だよ、多重ループはbreakで抜けれないので、仕方なくgoto使うときの
そのgotoを使う都合で必要になった、そのラベルをだよ
じゃーブロックにラベルをつけましょう、ってなんでそーなんだよ
元々のbreakにはラベルなんかねーのに
breakにラベルが無くて混乱したやつ居るか?
ご飯が無いからパンを食べてた状況なのに
すり替わってパンありきになって、パンが無きゃ話にならないとか言い出す始末
別にパン(ラベル)なんかなくても、ご飯があるならご飯食べろよ
ラヘルラベルって、そのラベルがどこ由来か考えてみろよ、gotoだろ?
もう一度言うが、もともとのbreakにはラベルなんかないし、それでみんな普通に過ごせてるし、混乱も起きてない
ただ、gotoで抜けるためには文法上/機能上ラベルが必要だったねってだけで、そこに着目しても仕方がない
本質的には無くても別に困らない
そのgotoを使う都合で必要になった、そのラベルをだよ
じゃーブロックにラベルをつけましょう、ってなんでそーなんだよ
元々のbreakにはラベルなんかねーのに
breakにラベルが無くて混乱したやつ居るか?
ご飯が無いからパンを食べてた状況なのに
すり替わってパンありきになって、パンが無きゃ話にならないとか言い出す始末
別にパン(ラベル)なんかなくても、ご飯があるならご飯食べろよ
ラヘルラベルって、そのラベルがどこ由来か考えてみろよ、gotoだろ?
もう一度言うが、もともとのbreakにはラベルなんかないし、それでみんな普通に過ごせてるし、混乱も起きてない
ただ、gotoで抜けるためには文法上/機能上ラベルが必要だったねってだけで、そこに着目しても仕方がない
本質的には無くても別に困らない
200デフォルトの名無しさん
2020/02/02(日) 15:05:16.61ID:jVWLSRwc ソースコードチェック目的でプログラム読むとき、gotoが出てきたら
そのgotoの使用方法が問題ないものなのか、いちいちチェックしないといけない。
breakならループ抜けるという意図が明白なので、チェックしなくてよい。
そのgotoの使用方法が問題ないものなのか、いちいちチェックしないといけない。
breakならループ抜けるという意図が明白なので、チェックしなくてよい。
201デフォルトの名無しさん
2020/02/02(日) 15:11:47.92ID:rWwvB4I9 そんなに名前が無いと発狂するんならもうgoto使えば?って思うし
なんなら関数化して正式に名前付ければって思うし
そこまでしたくないってときにbreak nが便利なわけだ
やりたいことは「多重ループから抜けたい」であって
「名前を付けたい」ではない!!
なんなら関数化して正式に名前付ければって思うし
そこまでしたくないってときにbreak nが便利なわけだ
やりたいことは「多重ループから抜けたい」であって
「名前を付けたい」ではない!!
202デフォルトの名無しさん
2020/02/02(日) 15:11:53.90ID:gkoi3ncl 関数コールも問題のないコールかどうかチェックしないといけないから
使わない方が良い
使わない方が良い
203デフォルトの名無しさん
2020/02/02(日) 15:14:22.99ID:EDNK6zQt それならもうポインタもグローバル変数もマルチスレッドも大量のチェックが必要だから使ってはいけないってことで
>>199
私と認識が似ていますね
>>137
>goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね
>>164
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
私と認識が似ていますね
>>137
>goto とか break とか continue とか、他の言語(javaとか)でもいろいろ小手先的に弄られているけれども、それに何の意味があるのかいつも不思議におもいますね
>>164
java にはラベル付き break が存在して、ほとんど goto です https://www.sejuku.net/blog/20100
205デフォルトの名無しさん
2020/02/02(日) 15:15:16.61ID:7b/FZYuN 現行のC/C++にはgoto <label>がある一方、break <n>は無い
もしbreak <n>の追加がgoto <label>の実装より難しかったからやらなかったのだとしたら、
break <n>の飛び先がgoto <label>の飛び先より簡単にワカルから優れているという主張は根拠を失う
break <n>はわかりにくいか、さもなくばgoto <label>と同等なんである
もしbreak <n>の追加がgoto <label>の実装より難しかったからやらなかったのだとしたら、
break <n>の飛び先がgoto <label>の飛び先より簡単にワカルから優れているという主張は根拠を失う
break <n>はわかりにくいか、さもなくばgoto <label>と同等なんである
206デフォルトの名無しさん
2020/02/02(日) 15:16:38.00ID:mzCY/+E0 constがスレッドセーフなのも困った。
207デフォルトの名無しさん
2020/02/02(日) 15:24:46.36ID:jpTipLln >>201
現実ありえないのは重々承知したうえで書くけど
100重ループを脱出するとき数を数えたくないだろうなって思うじゃん
ほかにも3重ループとかで2ndと3rdのループから共通の脱出先ラベルにもできるわけじゃん
文法を拡張する前提ならそこまで想定すべきだと思うね
粗野な即値の数字じゃなくて意味ごとに名前をつけられるようにしてきたのが
プログラミング言語の進化の歴史なのでおれは自然だと思うよ
というかそういう観点からラベル付きbreakというのは他の言語にはあるわけで
で今話してるのはもっと書きやすく読みやすくできないかというトピックでしょ
break Nは使えるだろうけど洗練されてない感じ
現実ありえないのは重々承知したうえで書くけど
100重ループを脱出するとき数を数えたくないだろうなって思うじゃん
ほかにも3重ループとかで2ndと3rdのループから共通の脱出先ラベルにもできるわけじゃん
文法を拡張する前提ならそこまで想定すべきだと思うね
粗野な即値の数字じゃなくて意味ごとに名前をつけられるようにしてきたのが
プログラミング言語の進化の歴史なのでおれは自然だと思うよ
というかそういう観点からラベル付きbreakというのは他の言語にはあるわけで
で今話してるのはもっと書きやすく読みやすくできないかというトピックでしょ
break Nは使えるだろうけど洗練されてない感じ
208デフォルトの名無しさん
2020/02/02(日) 15:27:11.67ID:gkoi3ncl break [n] はラベル名を考えなくて良い利点がある
使えるなら使いたい
ラベル名を考える必要があるならgotoで良い
ループの先頭で名前を付けるのはgotoより見づらいから使わない
使えるなら使いたい
ラベル名を考える必要があるならgotoで良い
ループの先頭で名前を付けるのはgotoより見づらいから使わない
209デフォルトの名無しさん
2020/02/02(日) 16:01:27.30ID:o79zkFFu break n とか言ってる奴は何故か>>150をスルーしてて笑うわ
210デフォルトの名無しさん
2020/02/02(日) 16:07:52.43ID:nz0OxFB3 他の人は「マジックナンバー」だと思わなかったからでは。
211デフォルトの名無しさん
2020/02/02(日) 16:20:03.66ID:gXxB23XL foobarやhogeを超える人気なダミー文字列を考えたほうがよほど建設的だぞ、君たち。
212デフォルトの名無しさん
2020/02/02(日) 16:35:55.51ID:SWo7Ruqh break 5; //C
GOTO 5 : REM BASIC
GOTO 5 : REM BASIC
213デフォルトの名無しさん
2020/02/02(日) 16:37:04.55ID:gkoi3ncl マジックナンバーがイヤなら
break break;
break break;
214デフォルトの名無しさん
2020/02/02(日) 16:50:03.80ID:DTIMfhpJ 関数で置き換える
引数がめんどうならラムダで置き換える
returnが多重breakの代わりになる
引数がめんどうならラムダで置き換える
returnが多重breakの代わりになる
215デフォルトの名無しさん
2020/02/02(日) 16:58:55.02ID:SWo7Ruqh >>214
多重ループを単一関数に書くって前提だね
多重ループを単一関数に書くって前提だね
216デフォルトの名無しさん
2020/02/02(日) 17:03:09.93ID:7b/FZYuN >引数がめんどうならラムダで置き換える ←New!
これは場合による
for (i=0; i<INT_MAX; i++) {
for (j=0; j<INT_MAX; j++) {
(何がしかの処理)
}
}
を
for (i=0; i<INT_MAX; i++) {
for (j=0; j<INT_MAX; j++) {
((何がしかの処理)を行うラムダ式fを定義)
f();
}
}
とするのではご利益が無いが、
((何がしかの処理)を行うラムダ式fを定義)
for (i=0; i<INT_MAX; i++) {
for (j=0; j<INT_MAX; j++) {
f();
}
}
とするのではラムダ式定義時点でループ内の変数を参照できないから場合によっては詰む
結局f()は引数がぞろぞろ並ばねばならない
これは場合による
for (i=0; i<INT_MAX; i++) {
for (j=0; j<INT_MAX; j++) {
(何がしかの処理)
}
}
を
for (i=0; i<INT_MAX; i++) {
for (j=0; j<INT_MAX; j++) {
((何がしかの処理)を行うラムダ式fを定義)
f();
}
}
とするのではご利益が無いが、
((何がしかの処理)を行うラムダ式fを定義)
for (i=0; i<INT_MAX; i++) {
for (j=0; j<INT_MAX; j++) {
f();
}
}
とするのではラムダ式定義時点でループ内の変数を参照できないから場合によっては詰む
結局f()は引数がぞろぞろ並ばねばならない
217デフォルトの名無しさん
2020/02/02(日) 17:05:11.10ID:+9zyTEwm218デフォルトの名無しさん
2020/02/02(日) 17:06:58.49ID:7b/FZYuN219デフォルトの名無しさん
2020/02/02(日) 17:15:36.03ID:SWo7Ruqh ジーオーティーオーというスペルでなければ
制御構造はそのままでいいと言うクソ論法
制御構造はそのままでいいと言うクソ論法
220デフォルトの名無しさん
2020/02/02(日) 17:52:12.55ID:mzCY/+E0 スレとはあまり関係ないんだけど、nodiscard属性を無視するにはどうしたらいいですか?
221デフォルトの名無しさん
2020/02/02(日) 17:59:47.60ID:MNdu0823 変数で受けといてその変数をガン無視すればいいんじゃないの
未使用変数の警告出るだろうけど
未使用変数の警告出るだろうけど
222デフォルトの名無しさん
2020/02/02(日) 18:00:14.37ID:mzCY/+E0 やってみます。
アリガト。
アリガト。
223デフォルトの名無しさん
2020/02/02(日) 18:11:02.03ID:o79zkFFu224デフォルトの名無しさん
2020/02/02(日) 18:13:54.31ID:mzCY/+E0 あと三日くらいしたらお前より出来るようになってるから。
225デフォルトの名無しさん
2020/02/02(日) 18:24:38.31ID:jpTipLln >>220
(void)func();
(void)func();
226デフォルトの名無しさん
2020/02/02(日) 18:28:22.08ID:x1m+isRG >>208
昔のBASICは、行番号を勝手に付けてくれていたのでgotoでもラベル名を考えなくて済んだのでとても便利だった。
昔のBASICは、行番号を勝手に付けてくれていたのでgotoでもラベル名を考えなくて済んだのでとても便利だった。
227デフォルトの名無しさん
2020/02/02(日) 18:30:04.52ID:x1m+isRG >>226
なお、アセンブラでは行番号がなかったのでラベル名を考える必要があったが、
意味のあるラベル名を考え出すのは大変だったので、分かり易い場所以外は、
多くの人が、lab1: lab2: lab3: のような連番を使う傾向があった。
なお、アセンブラでは行番号がなかったのでラベル名を考える必要があったが、
意味のあるラベル名を考え出すのは大変だったので、分かり易い場所以外は、
多くの人が、lab1: lab2: lab3: のような連番を使う傾向があった。
228デフォルトの名無しさん
2020/02/02(日) 18:30:14.15ID:mzCY/+E0230デフォルトの名無しさん
2020/02/02(日) 19:36:27.12ID:7b/FZYuN VB6には行番号は無かった
231デフォルトの名無しさん
2020/02/02(日) 20:26:55.80ID:GV9CDSqK みんなってc++で何を作ってるの?
ゲーム?
ゲーム?
232デフォルトの名無しさん
2020/02/02(日) 21:07:54.17ID:YP+sfqkD 何も作ってないやつがほとんどだろ
233デフォルトの名無しさん
2020/02/02(日) 21:15:29.52ID:GV9CDSqK すまん俺の聞き方が悪かったのかもしれん
最近プログラミングの勉強始めて、各言語の用途とか調べたんだけど、ここでも一応聞いてみたかったの
何を作ってるって言うより、どんな開発に携わってるかっていうのを聞きたかった
最近プログラミングの勉強始めて、各言語の用途とか調べたんだけど、ここでも一応聞いてみたかったの
何を作ってるって言うより、どんな開発に携わってるかっていうのを聞きたかった
234デフォルトの名無しさん
2020/02/02(日) 21:21:43.96ID:DTIMfhpJ テキストエディター
3Dモデラー
メーラー
3Dモデラー
メーラー
235デフォルトの名無しさん
2020/02/02(日) 21:25:09.08ID:vTjBAXNr 競技プログラミング
236デフォルトの名無しさん
2020/02/02(日) 21:39:16.36ID:GV9CDSqK アプリ開発にも使われるのかー
あざした
あざした
237デフォルトの名無しさん
2020/02/02(日) 22:06:04.81ID:mzCY/+E0 いまダブルアレイやってる。
238デフォルトの名無しさん
2020/02/02(日) 22:08:30.12ID:mzCY/+E0 検索はstd::setやstd::unorderd_setより速いけど、挿入が一桁遅い。
静的構築が速いというので、それもやってみたけど、2/3くらいにしかならなかった。
静的構築が速いというので、それもやってみたけど、2/3くらいにしかならなかった。
239デフォルトの名無しさん
2020/02/02(日) 22:10:09.36ID:mzCY/+E0 検索はstd::setの10倍くらい早いな。
240デフォルトの名無しさん
2020/02/02(日) 22:15:25.20ID:0Gqmr542 >>239
相談ができたらまた来い
相談ができたらまた来い
241デフォルトの名無しさん
2020/02/02(日) 22:54:22.23ID:mzCY/+E0 >>240
よろしくお願いします。
よろしくお願いします。
初学者的な質問です、よろしくお願いいたします。
バイナリーファイルを
std::fstream f;
f.open(filename, std::ios::in | std::ios::out | std::ios::binary);
でオープンし、同一ファイルのオープン中に
f.read(), f.seekg() でガンガン読むと同時に
f.write(), f.seekp() でガンガン書き込む
を試しているのですが、seekg(), tellg() と seekp() tellp() は名前は別でもあるにもかかわらず、実はファイルポインタの実体は両者で同一なのでは?
という疑いが発生しました。つまり、seekg()/tellg() と seekp()/tellp() とは独立でない、と推測しています
@この解釈で正しいですか?
Aこういうのは、C++ iostream レファレンスのどこを見て洞察するべきなのでしょうか?
実際のお題は相変わらずエラトステネスのふるいです https://ideone.com/6Ww9nq
バイナリーファイルを
std::fstream f;
f.open(filename, std::ios::in | std::ios::out | std::ios::binary);
でオープンし、同一ファイルのオープン中に
f.read(), f.seekg() でガンガン読むと同時に
f.write(), f.seekp() でガンガン書き込む
を試しているのですが、seekg(), tellg() と seekp() tellp() は名前は別でもあるにもかかわらず、実はファイルポインタの実体は両者で同一なのでは?
という疑いが発生しました。つまり、seekg()/tellg() と seekp()/tellp() とは独立でない、と推測しています
@この解釈で正しいですか?
Aこういうのは、C++ iostream レファレンスのどこを見て洞察するべきなのでしょうか?
実際のお題は相変わらずエラトステネスのふるいです https://ideone.com/6Ww9nq
>>231,233
私は今のところエラトステネスの篩にご執心、という体たらくです…
私は今のところエラトステネスの篩にご執心、という体たらくです…
244デフォルトの名無しさん
2020/02/03(月) 00:01:01.18ID:8riGTZSm エラトステネスのふるいで
なんでファイルのリードが必要?
なんでファイルのリードが必要?
>>244
結構昔から
http://www.asahi-net.or.jp/~KC2H-MSM/pbsb/pbsbm006.htm
にとても興味を持っていたのです、二つの隣り合った素数の差を「素数のギャップ」と呼ぶことにしたとき、
『素数のギャップが取りうる値の頻度。はじめは2、4が多いが、そのうち、6の方が多くなる。』
『6がチャンピオンの座を降りるのはいつか。』
『少なくとも 10^14 以下では6がトップであり、それ以降、いつ、6以外の数がトップになるかは、知られていない。』
10^14 までの数であっても全部、篩としてメモリに載せられないので、さてどうしたものかと思案中です、最終的には年スパンでずっと計算させ続けるのに耐えられるようにしたい、と
結構昔から
http://www.asahi-net.or.jp/~KC2H-MSM/pbsb/pbsbm006.htm
にとても興味を持っていたのです、二つの隣り合った素数の差を「素数のギャップ」と呼ぶことにしたとき、
『素数のギャップが取りうる値の頻度。はじめは2、4が多いが、そのうち、6の方が多くなる。』
『6がチャンピオンの座を降りるのはいつか。』
『少なくとも 10^14 以下では6がトップであり、それ以降、いつ、6以外の数がトップになるかは、知られていない。』
10^14 までの数であっても全部、篩としてメモリに載せられないので、さてどうしたものかと思案中です、最終的には年スパンでずっと計算させ続けるのに耐えられるようにしたい、と
246デフォルトの名無しさん
2020/02/03(月) 00:38:27.28ID:e9E2NTEb その問題だけなら
2次キャッシュに収まるくらいに分けてふるえば速い
間隔も大して大きくならないので
ヒストグラムはオンメモリで済む
スレッドも簡単に分割出来るので
論理コア数と同じだけスレッドを作って回す
2次キャッシュに収まるくらいに分けてふるえば速い
間隔も大して大きくならないので
ヒストグラムはオンメモリで済む
スレッドも簡単に分割出来るので
論理コア数と同じだけスレッドを作って回す
>>246
コメントありがとうございます
>間隔も大して大きくならないのでヒストグラムはオンメモリで済む
確かに 10^10 まででも最大 354 というのには驚きました、案外密に分布しているんですね
>2次キャッシュに収まるくらいに分けてふるえば速い
constexpr unsigned int windowSize_Default = 30 * 5000000; はでかすぎ、ですか
いただいたアイディアは、どれも私には難易度が高いのですが、ぼちぼち書いていきます…
コメントありがとうございます
>間隔も大して大きくならないのでヒストグラムはオンメモリで済む
確かに 10^10 まででも最大 354 というのには驚きました、案外密に分布しているんですね
>2次キャッシュに収まるくらいに分けてふるえば速い
constexpr unsigned int windowSize_Default = 30 * 5000000; はでかすぎ、ですか
いただいたアイディアは、どれも私には難易度が高いのですが、ぼちぼち書いていきます…
248デフォルトの名無しさん
2020/02/03(月) 00:44:55.23ID:e9E2NTEb AVXレジスタを使って小さな素数の倍数を消して
ビット命令で大きな素数の倍数を消す
大きな素数の倍数は210ずつ処理する
昔素数の数を数えるプログラムを書いたことがあって
記憶に残ってる範囲ではこんな感じ
ビット命令で大きな素数の倍数を消す
大きな素数の倍数は210ずつ処理する
昔素数の数を数えるプログラムを書いたことがあって
記憶に残ってる範囲ではこんな感じ
249デフォルトの名無しさん
2020/02/03(月) 00:55:53.66ID:jdU9ROmC >>229
100 WIDTH 80,25:CONSOLE 0,25,0,1:SCREEN 1:CLS 3
110 XXX
120 XXX
130 IF XXX = XXX GOTO 110
のようなもので、最初に入れるときは自分で行番号も手で打つのが基本ではありました。
115 YYY と入れると、110と120の間に行が挿入されると言う仕組みです。
それだと9個以上は挿入できなくなるので RENUM 命令を使うと行番号を自動的に
振り直すことができました。その場合、GOTOやGOSUBの行番号も連動して変わる
仕組みです。
100 WIDTH 80,25:CONSOLE 0,25,0,1:SCREEN 1:CLS 3
110 XXX
120 XXX
130 IF XXX = XXX GOTO 110
のようなもので、最初に入れるときは自分で行番号も手で打つのが基本ではありました。
115 YYY と入れると、110と120の間に行が挿入されると言う仕組みです。
それだと9個以上は挿入できなくなるので RENUM 命令を使うと行番号を自動的に
振り直すことができました。その場合、GOTOやGOSUBの行番号も連動して変わる
仕組みです。
252デフォルトの名無しさん
2020/02/03(月) 01:52:57.35ID:YoBHNt10 素数は、6n ± 1 か。
6n + 1, 6n + 5 だけ
6n + 3 は、3の倍数だから、素数じゃない
6n + 1, 6n + 5 だけ
6n + 3 は、3の倍数だから、素数じゃない
253252
2020/02/03(月) 01:58:12.48ID:YoBHNt10 A = 6n + 1, B = 6n + 5 とすると、
AA の並びなら、差は6
AB なら、4
BA なら、2
BB なら、6
A,B になる確率がランダムとすると、6 になる確率が2倍!
AA の並びなら、差は6
AB なら、4
BA なら、2
BB なら、6
A,B になる確率がランダムとすると、6 になる確率が2倍!
254はちみつ餃子 ◆8X2XSCHEME
2020/02/03(月) 11:14:43.40ID:HBzF0G80 >>242
たぶんこの一文。
> A joint file position is maintained for both the input sequence and the output sequence.
N3337 だと 27.9.1.1 の第 3 段落にある。
あくまでも std::basic_filebuf ではそうなってるってだけなので、
ストリームバッファ全般に言えるわけではなくて、
独立した位置情報を持つようなものも作れないわけではない。
FILE の fseek のラッピングとして実装することを想定したんじゃないかなぁ。
たぶんこの一文。
> A joint file position is maintained for both the input sequence and the output sequence.
N3337 だと 27.9.1.1 の第 3 段落にある。
あくまでも std::basic_filebuf ではそうなってるってだけなので、
ストリームバッファ全般に言えるわけではなくて、
独立した位置情報を持つようなものも作れないわけではない。
FILE の fseek のラッピングとして実装することを想定したんじゃないかなぁ。
255デフォルトの名無しさん
2020/02/03(月) 12:59:28.21ID:jOrmfTQL257デフォルトの名無しさん
2020/02/03(月) 21:17:59.99ID:Exvuz9nd258はちみつ餃子 ◆8X2XSCHEME
2020/02/03(月) 21:26:54.32ID:HBzF0G80259はちみつ餃子 ◆8X2XSCHEME
2020/02/03(月) 22:20:22.51ID:HBzF0G80 >>256
ググってみたら iostream まわりの継承関係を表した図がすぐ見つかったわ。
https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html
だけど継承関係の他にストリームがバッファとロケールを所有しているという関係もあるのが分かり難いかも。
cpprefjp の rdbuf の項目を見たらストリームのバッファを入れ替える例が載ってる。
https://cpprefjp.github.io/reference/ios/basic_ios/rdbuf.html
本当に「入出力」を司っているのはバッファであって、
ストリームはそれに書式化の機能をかぶせている感じ。
ググってみたら iostream まわりの継承関係を表した図がすぐ見つかったわ。
https://www.ntu.edu.sg/home/ehchua/programming/cpp/cp10_IO.html
だけど継承関係の他にストリームがバッファとロケールを所有しているという関係もあるのが分かり難いかも。
cpprefjp の rdbuf の項目を見たらストリームのバッファを入れ替える例が載ってる。
https://cpprefjp.github.io/reference/ios/basic_ios/rdbuf.html
本当に「入出力」を司っているのはバッファであって、
ストリームはそれに書式化の機能をかぶせている感じ。
261デフォルトの名無しさん
2020/02/05(水) 22:31:00.17ID:zWcxLf4u 最初から最大ファイルサイズにしとくとか
262はちみつ餃子 ◆8X2XSCHEME
2020/02/05(水) 22:32:01.15ID:85RuEno5 >>260
そんな制限があるんか。
連続した巨大なメモリを予約しておいて、
適当な大きさに区切ってファイルにマッピングすればええで。
ファイルを複数に分けることになるけど、
見かけ上は巨大なメモリとして扱えるし、
容量が増加する都度に新しいファイルを作って割り当てればええ。
というやり方を思いついたので具体的に出来るんかいなと思って調べてみたら
MapViewOfFileEx の最後の要素でアドレスを指定する機能がある。
VirtualAlloc で予約した範囲は MapViewOfFileEx で使えないので、
どうやって空いているメモリ空間を探せばええんやろと思ったら
VirtualAlloc で予約した直後に VirtualFree をつこうたらええんやて。
https://stackoverflow.com/questions/12121843/mapviewoffileex-valid-lpbaseaddress
なんという泥臭い方法や……。
てなわけで、若干の面倒くさい手順が要るけどそれっぽいことは出来る。
この手順をいい感じに抽象化するクラスを作ったら色々と使えそうやな。
期待してるで!
そんな制限があるんか。
連続した巨大なメモリを予約しておいて、
適当な大きさに区切ってファイルにマッピングすればええで。
ファイルを複数に分けることになるけど、
見かけ上は巨大なメモリとして扱えるし、
容量が増加する都度に新しいファイルを作って割り当てればええ。
というやり方を思いついたので具体的に出来るんかいなと思って調べてみたら
MapViewOfFileEx の最後の要素でアドレスを指定する機能がある。
VirtualAlloc で予約した範囲は MapViewOfFileEx で使えないので、
どうやって空いているメモリ空間を探せばええんやろと思ったら
VirtualAlloc で予約した直後に VirtualFree をつこうたらええんやて。
https://stackoverflow.com/questions/12121843/mapviewoffileex-valid-lpbaseaddress
なんという泥臭い方法や……。
てなわけで、若干の面倒くさい手順が要るけどそれっぽいことは出来る。
この手順をいい感じに抽象化するクラスを作ったら色々と使えそうやな。
期待してるで!
263デフォルトの名無しさん
2020/02/05(水) 22:35:23.33ID:bIRSo9XQ 普通にAPIで巨大ファイル作れてるけど
CreateFile / WriteFile
CreateFile / WriteFile
264はちみつ餃子 ◆8X2XSCHEME
2020/02/05(水) 22:50:53.65ID:85RuEno5 最初からどでかいファイルを作る余裕があるならその方が簡単ではあるわな。
どんくらいデカいのがいるんや?
せいぜい数十ギガとかそんなもんやろ?
ケチらんと行くっちゅうのもアリや。
どんくらいデカいのがいるんや?
せいぜい数十ギガとかそんなもんやろ?
ケチらんと行くっちゅうのもアリや。
265デフォルトの名無しさん
2020/02/05(水) 23:33:50.77ID:bIRSo9XQ CreateFile
WriteFile
ReadFile
SetFilePointerEx
SetEndOfFile
WriteFile
ReadFile
SetFilePointerEx
SetEndOfFile
266デフォルトの名無しさん
2020/02/06(木) 13:03:55.59ID:sNihMBVC こんな感じ?
.... 0101 0000 0100 0101 0001 0100 0101 0110
.... 0101 0000 0100 0101 0001 0100 0101 0110
267デフォルトの名無しさん
2020/02/06(木) 16:50:43.13ID:zCd4f5nI STLコンテナ (仮にvとする) のサイズの分だけfor文を回したいってときに
for(int i=0; i<v.size(); i++)
と書くことが多いんだが、v.size()はintじゃないので警告が出る。
警告を一つ残らず潰したいタチだから毎回こういうのはintにキャストしてるんだが、キャストのコストってどんなもんなんだろ。
「大したことないからOK」って立場と「そもそもv.size()が毎回呼ばれてる時点でナンセンスだから改善すべき」って立場と「その警告は無視しなさい」って立場などがあると思うが、皆はどうしてる?
逆順にしたいことなどがよくあるので、範囲for文を使えってのは今回はナシで。
特定の環境、コードでのテストはできるが、一般論として、あるいは皆さんのスタンスとしてはどうですか。
for(int i=0; i<v.size(); i++)
と書くことが多いんだが、v.size()はintじゃないので警告が出る。
警告を一つ残らず潰したいタチだから毎回こういうのはintにキャストしてるんだが、キャストのコストってどんなもんなんだろ。
「大したことないからOK」って立場と「そもそもv.size()が毎回呼ばれてる時点でナンセンスだから改善すべき」って立場と「その警告は無視しなさい」って立場などがあると思うが、皆はどうしてる?
逆順にしたいことなどがよくあるので、範囲for文を使えってのは今回はナシで。
特定の環境、コードでのテストはできるが、一般論として、あるいは皆さんのスタンスとしてはどうですか。
268デフォルトの名無しさん
2020/02/06(木) 17:11:56.16ID:v+RXRHu+ コンパイルの警告のためだけだから
実行時コストは0じゃね
実行時コストは0じゃね
269デフォルトの名無しさん
2020/02/06(木) 17:13:00.89ID:v+RXRHu+ 手でタイプするコストうんぬん言うなら
マクロで #define LEN(s) ((int)s.size())
マクロで #define LEN(s) ((int)s.size())
270はちみつ餃子 ◆8X2XSCHEME
2020/02/06(木) 17:18:31.70ID:jSrTrJa0 >>267
最も正統派なのはこうかな?
for(decltype(v)::size_type i=0; i<v.size(); i++)
常識的に考えてコンテナの size_type が std::size_t より大きいことはあまりない (大抵は等しい) と思うので、面倒なときは std::size_t を使う。
本当に上限が限られていてその上限が変更されることがあり得ないほどそのプログラムにとって
本質的なものだと判断すれば int でいいやってこともあるといえばあるだろうし、
同じようなパターンが何度も現れるならアダプタを作った上で範囲forというのも考えられる。
状況によるでしょ。
最も正統派なのはこうかな?
for(decltype(v)::size_type i=0; i<v.size(); i++)
常識的に考えてコンテナの size_type が std::size_t より大きいことはあまりない (大抵は等しい) と思うので、面倒なときは std::size_t を使う。
本当に上限が限られていてその上限が変更されることがあり得ないほどそのプログラムにとって
本質的なものだと判断すれば int でいいやってこともあるといえばあるだろうし、
同じようなパターンが何度も現れるならアダプタを作った上で範囲forというのも考えられる。
状況によるでしょ。
271デフォルトの名無しさん
2020/02/06(木) 17:24:46.97ID:2fVM4odH int i = 0; と書かずに size_t i = 0; と書くのはどうだい?
v.size() が本当に size_t を返すか、という問題はあるが。
for (decltype(v.size()) i = 0; i < v.size(); i++)
と書くこともできるね。
i の型が int でないと不味いのかも知れんけど。
v.size() が本当に size_t を返すか、という問題はあるが。
for (decltype(v.size()) i = 0; i < v.size(); i++)
と書くこともできるね。
i の型が int でないと不味いのかも知れんけど。
272デフォルトの名無しさん
2020/02/06(木) 17:39:05.78ID:/W9iMVJD273デフォルトの名無しさん
2020/02/06(木) 17:43:47.39ID:/W9iMVJD >>269は色々な理由で無い
274デフォルトの名無しさん
2020/02/06(木) 17:44:41.65ID:v+RXRHu+ for(unsigned int i=0, len=v.size(); i<len; i++)
これもよく見るか
これもよく見るか
275デフォルトの名無しさん
2020/02/06(木) 17:46:58.02ID:5ihPHl5F auto i=0uにしてるな
276デフォルトの名無しさん
2020/02/06(木) 17:48:08.30ID:VEO7DUBt >>269
template <typename T> inline auto len(T s) { return s.size(); }
template <typename T> inline auto len(T s) { return s.size(); }
277デフォルトの名無しさん
2020/02/06(木) 17:48:51.04ID:VEO7DUBt あ、右辺値参照わすれたw わりーわりー
278デフォルトの名無しさん
2020/02/06(木) 17:49:18.67ID:/W9iMVJD 警告を消す為だけなら設定を変えるのが良い
279デフォルトの名無しさん
2020/02/06(木) 17:50:35.38ID:/W9iMVJD >>276
何の解決にもなってない
何の解決にもなってない
281デフォルトの名無しさん
2020/02/06(木) 18:09:13.09ID:3IyMYliq282デフォルトの名無しさん
2020/02/06(木) 18:11:29.18ID:3IyMYliq v.size()の値が、ループ内で変化しない「ループ定数」であると判断するのは
コンパイラにとってはものすごく難しい場合がある。
ループ定数であると判断された場合にのみ、>>274のような最適化が行われる可能性が出てくるが、判定できなければループするたびに毎回評価されてしまうのでループの実行速度が遅くなってしまう。
コンパイラにとってはものすごく難しい場合がある。
ループ定数であると判断された場合にのみ、>>274のような最適化が行われる可能性が出てくるが、判定できなければループするたびに毎回評価されてしまうのでループの実行速度が遅くなってしまう。
283デフォルトの名無しさん
2020/02/06(木) 18:30:55.84ID:F7wYIGq0 マクロってそんなに危険なんですか。
284デフォルトの名無しさん
2020/02/06(木) 18:33:27.11ID:3IyMYliq >>283
本人だけが開発していて、記憶力が優れていて絶対に使い方を間違いなければ特に問題ないと思うが、使い方を間違うと危険なことがある。
エラーも出ずに変な動作をしてしまうことがある。
でもそれさえ気を付けていれば特に問題ないとも言える。
本人だけが開発していて、記憶力が優れていて絶対に使い方を間違いなければ特に問題ないと思うが、使い方を間違うと危険なことがある。
エラーも出ずに変な動作をしてしまうことがある。
でもそれさえ気を付けていれば特に問題ないとも言える。
285デフォルトの名無しさん
2020/02/06(木) 18:37:31.86ID:3IyMYliq >>269
マクロで書く場合、
#define LEN(_s_) ((int)((_s_).size()))
と書いたほうが良い。
特に、s や _s_ を()で囲むのは必須。
sを_s_と書くのは、ミスタイプがあった場合の備え。
例えば、マクロの仮引数にsと書いているのに、マクロの定義部分をtと
書き間違えていて、かつ、マクロを使う場所に t という変数がたまたま使われて
いたとすれば、エラーにならないのに間違った動作をしてしまう。
_s_と書いていれば、_s_という変数は絶対に使われないのでこの心配がない。
そのため、マクロの引数は伝統的に、_s_などのように書くことが推奨されている。
マクロで書く場合、
#define LEN(_s_) ((int)((_s_).size()))
と書いたほうが良い。
特に、s や _s_ を()で囲むのは必須。
sを_s_と書くのは、ミスタイプがあった場合の備え。
例えば、マクロの仮引数にsと書いているのに、マクロの定義部分をtと
書き間違えていて、かつ、マクロを使う場所に t という変数がたまたま使われて
いたとすれば、エラーにならないのに間違った動作をしてしまう。
_s_と書いていれば、_s_という変数は絶対に使われないのでこの心配がない。
そのため、マクロの引数は伝統的に、_s_などのように書くことが推奨されている。
287デフォルトの名無しさん
2020/02/06(木) 19:30:05.95ID:/W9iMVJD288デフォルトの名無しさん
2020/02/06(木) 19:38:40.11ID:zCd4f5nI 皆さんありがとうごさいます。
結構難しいですね。
>>274
> for(unsigned int i=0, len=v.size(); i<len; i++)
これは
for(int i=0, len=(int)v.size(); i<len; i++)
としても性能上そう変わらないですよね?
ループ変数はintであってほしいと思うので、これが自分には向いているように思いました。
結構難しいですね。
>>274
> for(unsigned int i=0, len=v.size(); i<len; i++)
これは
for(int i=0, len=(int)v.size(); i<len; i++)
としても性能上そう変わらないですよね?
ループ変数はintであってほしいと思うので、これが自分には向いているように思いました。
289デフォルトの名無しさん
2020/02/06(木) 19:42:58.30ID:bk3hpXlE >>275に一票
290デフォルトの名無しさん
2020/02/06(木) 20:10:32.24ID:9e+8kNR/ キャスト一回って機械語4つくらいじゃあないの?
そこまでシビアってのは競技プログラミングか脳手術ロボットでも作ってんの?
そこまでシビアってのは競技プログラミングか脳手術ロボットでも作ってんの?
291デフォルトの名無しさん
2020/02/06(木) 20:24:03.42ID:/W9iMVJD 4個もいらん
292デフォルトの名無しさん
2020/02/06(木) 20:29:38.17ID:/W9iMVJD293デフォルトの名無しさん
2020/02/06(木) 20:40:31.72ID:3IyMYliq >>290
同じBIT数やBIT数が少なくなる場合の整数型から整数型へのcastは、マシン語では0命令(命令が出力されない)。
高級言語では違う型でもマシン語レベルでは変わらないため。
BIT数が多くなる場合には、x86の場合は、movzx や movsx が使われる。
同じBIT数やBIT数が少なくなる場合の整数型から整数型へのcastは、マシン語では0命令(命令が出力されない)。
高級言語では違う型でもマシン語レベルでは変わらないため。
BIT数が多くなる場合には、x86の場合は、movzx や movsx が使われる。
294デフォルトの名無しさん
2020/02/06(木) 20:41:12.62ID:3IyMYliq >>292
実際には、最適化が上手く行かないことも多いので差が出てくることは多い。
実際には、最適化が上手く行かないことも多いので差が出てくることは多い。
295デフォルトの名無しさん
2020/02/06(木) 20:42:39.58ID:3IyMYliq296デフォルトの名無しさん
2020/02/06(木) 20:49:08.28ID:VEO7DUBt 素直にrange-based-for
これが出てきたことの影響のでかさがわかってないやつ多すぎ
禿4にはfor_eachを使う前にもっと適した関数を探せとあるが
本当にそうか自分の頭で考えろ
これが出てきたことの影響のでかさがわかってないやつ多すぎ
禿4にはfor_eachを使う前にもっと適した関数を探せとあるが
本当にそうか自分の頭で考えろ
297デフォルトの名無しさん
2020/02/06(木) 20:56:38.87ID:/W9iMVJD コストを気にしてる人に対してトンチンカン
298デフォルトの名無しさん
2020/02/06(木) 21:03:18.93ID:/W9iMVJD 普通のコンパイラなら
コンパイル単位内の関数は一緒に最適化するので
.size() の中で値を返してるだけなら
ループの外に追い出してくれる
ターゲットがPCなら気にするな
それよりv[i]の方が重い
コンパイル単位内の関数は一緒に最適化するので
.size() の中で値を返してるだけなら
ループの外に追い出してくれる
ターゲットがPCなら気にするな
それよりv[i]の方が重い
299デフォルトの名無しさん
2020/02/06(木) 21:03:40.80ID:VEO7DUBt 何もわかってねえやつ
300デフォルトの名無しさん
2020/02/06(木) 21:17:40.42ID:X3a4Tx/S302デフォルトの名無しさん
2020/02/06(木) 22:16:59.41ID:cE8ku0Th templete<typename T>auto LEN(const T& v)->signed T{return (signed T)v;}
303デフォルトの名無しさん
2020/02/06(木) 22:22:15.30ID:j/UITOXa とりあえず大きい方に合わせとけば間違いないんだからsize_tでいいじゃん
そのvの要素が将来に渡って21億個を超えない保証がどこにある?
そのvの要素が将来に渡って21億個を超えない保証がどこにある?
304デフォルトの名無しさん
2020/02/06(木) 22:45:07.03ID:/W9iMVJD305デフォルトの名無しさん
2020/02/06(木) 22:53:37.31ID:sigCaOr9 x86なら32bit命令使った方がバイナリ小さい
306デフォルトの名無しさん
2020/02/06(木) 22:57:14.86ID:sigCaOr9307デフォルトの名無しさん
2020/02/06(木) 23:03:20.12ID:YUB/hFRs >>300
range-basedはiterator
c++のiteratorはindexが速くなる連続アドレスのコンテナならpointerと同じコンパイル結果になる
indexアクセスがpointerより遅くないなら、それはコンパイラの最適化のお陰
range-basedはiterator
c++のiteratorはindexが速くなる連続アドレスのコンテナならpointerと同じコンパイル結果になる
indexアクセスがpointerより遅くないなら、それはコンパイラの最適化のお陰
308デフォルトの名無しさん
2020/02/06(木) 23:13:46.15ID:/W9iMVJD >>306
生ポと変わらなきゃ良いんだけど
変わるんだよ
VisualStudioやチープなコンパイラだと
いずれにしろここから先は
具体的な環境とループ回数やループの中身全体で考えないと意味がない
なんせ1クロックレベルのことを気にしてるようなので
実はメモリアクセスが支配的で
他の最適化は全く意味がないとか
生ポと変わらなきゃ良いんだけど
変わるんだよ
VisualStudioやチープなコンパイラだと
いずれにしろここから先は
具体的な環境とループ回数やループの中身全体で考えないと意味がない
なんせ1クロックレベルのことを気にしてるようなので
実はメモリアクセスが支配的で
他の最適化は全く意味がないとか
309デフォルトの名無しさん
2020/02/06(木) 23:20:09.64ID:/W9iMVJD SIMD命令 / DSP命令 / スレッド分け / GPU
他のループと合わせる / ループを分ける
ループアンロール
依存性の削減 / 式変形
アルゴリズムの改善
キャッシュ化 / テーブル化
いろんな最適化がある
他のループと合わせる / ループを分ける
ループアンロール
依存性の削減 / 式変形
アルゴリズムの改善
キャッシュ化 / テーブル化
いろんな最適化がある
310デフォルトの名無しさん
2020/02/06(木) 23:45:25.65ID:f00f0WlE vectorの[]は定数時間
311はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 01:10:19.15ID:BIRgOLIs ところで元々の質問の >>267 は整数の型が合わないのどのくらい気にする?
っていうのを「一般論として」聞いてるので、これに対しての選択肢を派閥系統樹形式にしてみた
├→ きちんと合わせる派
│ ├→ その環境で合ってれば良いよ派 (移植性は気にしない派)
│ ├→ コンパイラの警告は潰す派
│ │ ├→ 理解しなくてもキャストで合わせるので十分派
│ │ └→ 警告される箇所は仕様の詳細を調べる派
│ └→ size_t とか size_type とか使え派 (言語仕様原理主義派)
├→ 問題がなければ気にしない派
│ ├→ 問題に気づかない派 (鈍感派)
│ ├→ 実行コストに敏感派
│ │ ├→ 最適化はあてにする派 (モダン開発環境派)
│ │ └→ 最適化はあてになんないよ派
│ │ ├→ 低レイヤ派
│ │ ├→ 老害派
│ │ ├→ 諦め派
│ │ └→ ベータ開発環境追いかけ派
│ └→ 状況と程度による派 (柔軟派)
└→ えっ、それって駄目だったん? 派
├→ 初心者派
└→ 無知派
っていうのを「一般論として」聞いてるので、これに対しての選択肢を派閥系統樹形式にしてみた
├→ きちんと合わせる派
│ ├→ その環境で合ってれば良いよ派 (移植性は気にしない派)
│ ├→ コンパイラの警告は潰す派
│ │ ├→ 理解しなくてもキャストで合わせるので十分派
│ │ └→ 警告される箇所は仕様の詳細を調べる派
│ └→ size_t とか size_type とか使え派 (言語仕様原理主義派)
├→ 問題がなければ気にしない派
│ ├→ 問題に気づかない派 (鈍感派)
│ ├→ 実行コストに敏感派
│ │ ├→ 最適化はあてにする派 (モダン開発環境派)
│ │ └→ 最適化はあてになんないよ派
│ │ ├→ 低レイヤ派
│ │ ├→ 老害派
│ │ ├→ 諦め派
│ │ └→ ベータ開発環境追いかけ派
│ └→ 状況と程度による派 (柔軟派)
└→ えっ、それって駄目だったん? 派
├→ 初心者派
└→ 無知派
312デフォルトの名無しさん
2020/02/07(金) 02:51:26.03ID:dGY48don313デフォルトの名無しさん
2020/02/07(金) 03:23:36.63ID:yxrGSGnH じゃあ俺、えっ、それって駄目だったん? 派でお願いします。
314デフォルトの名無しさん
2020/02/07(金) 03:50:27.48ID:yxrGSGnH テストの品質がすべてを決めるような気がしてきた。
315デフォルトの名無しさん
2020/02/07(金) 03:57:04.21ID:plErZoHk316デフォルトの名無しさん
2020/02/07(金) 04:00:36.65ID:yxrGSGnH Boostは警告を無視する派、GoogleはMicrosoftの問題なので修正する予定はない派。
ってことは、警告だしっぱなしで構わないって事では?
ってことは、警告だしっぱなしで構わないって事では?
317デフォルトの名無しさん
2020/02/07(金) 04:01:58.31ID:yxrGSGnH 目grepが難しいので、警告は消すしかないんだけど。
318デフォルトの名無しさん
2020/02/07(金) 04:04:17.66ID:yxrGSGnH 変数の大きさが変わると同じ値のビット表現が変わるのはしんどいので、符号が一番右端にあったほうが良かったんじゃないの。
右端ならビット表現が変わらない。
右端ならビット表現が変わらない。
319デフォルトの名無しさん
2020/02/07(金) 05:13:16.79ID:zrCiCWWN 型違い面倒だからautoにしても警告出るから何でやおもたらi=0でintだったでござる派
320デフォルトの名無しさん
2020/02/07(金) 06:00:43.94ID:yxrGSGnH HTMLにしろコンパイラにしろ、Microsoft案のほうが合理的と思うけどな。
規格は政治だよね。
規格は政治だよね。
321デフォルトの名無しさん
2020/02/07(金) 06:42:07.56ID:52vnIbYM322デフォルトの名無しさん
2020/02/07(金) 06:57:58.73ID:52vnIbYM > コンパイラの警告は潰す派
キャストつーか、#pragmaを使ったりもするね
もち、規格票で自分が悪いのかコンパイラのお節介かはっきりさせてからだけど
キャストつーか、#pragmaを使ったりもするね
もち、規格票で自分が悪いのかコンパイラのお節介かはっきりさせてからだけど
323デフォルトの名無しさん
2020/02/07(金) 07:21:23.65ID:9DO99WJ1 基本的にはsize_tとかsize_typeとか使え派
面倒でもちゃんとやった方が後のテストや検証は楽なんだよ
まあ無理だったり異様に面倒だったりする場合も現実的にはあるからそこは仕方ないけど
面倒でもちゃんとやった方が後のテストや検証は楽なんだよ
まあ無理だったり異様に面倒だったりする場合も現実的にはあるからそこは仕方ないけど
324デフォルトの名無しさん
2020/02/07(金) 07:52:22.31ID:+bDqT2Wz i は int にしたいって言ってるんだから
ここの型をsize()に合わせたら
キャストが他に移るだけ
ここの型をsize()に合わせたら
キャストが他に移るだけ
325デフォルトの名無しさん
2020/02/07(金) 08:31:14.28ID:z6HtA7Ca >>288
いえいえ
いえいえ
326デフォルトの名無しさん
2020/02/07(金) 10:49:20.82ID:/rNOv2pQ >>298
vがグローバルなオブジェクトである場合や、ヒープから確保されたオブジェクトの参照型である場合、コンパイラには v.size() がループ定数であるかどうかを判定するのは難しいことが多い。
このスレでもグローバルに確保された構造体型のメンバを参照する場合、最適化され無い事が指摘されていたが、それと同じことが原因。
C/C++ではポインタや参照があるのでグローバル変数やグローバルなオブジェクトのメンバ変数が変化しないことをコンパイラが見極めるのが難しい。
vがグローバルなオブジェクトである場合や、ヒープから確保されたオブジェクトの参照型である場合、コンパイラには v.size() がループ定数であるかどうかを判定するのは難しいことが多い。
このスレでもグローバルに確保された構造体型のメンバを参照する場合、最適化され無い事が指摘されていたが、それと同じことが原因。
C/C++ではポインタや参照があるのでグローバル変数やグローバルなオブジェクトのメンバ変数が変化しないことをコンパイラが見極めるのが難しい。
327デフォルトの名無しさん
2020/02/07(金) 10:52:27.65ID:VWyX2qgb for(auto i=v.size()+1; 0<len; --i)
for(auto i : my_range(v.size())
for(auto i : my_range(v.size())
328デフォルトの名無しさん
2020/02/07(金) 11:01:57.61ID:52vnIbYM reverse_iterator first(v.end()), last(v.begin());
for_each(first, last, [](auto& x) { cout << x; });
for_each(first, last, [](auto& x) { cout << x; });
329デフォルトの名無しさん
2020/02/07(金) 11:41:09.54ID:jtk/IwGo 64bit/32bitまたぎできるソース汎用性を考えれば、負の数が必要ないなら size_tを使うのが最善でしょ。
330デフォルトの名無しさん
2020/02/07(金) 12:00:59.89ID:VWyX2qgb size_tはunsignedなのがうざい
c言語初心者が決めただろこれ
c言語初心者が決めただろこれ
331デフォルトの名無しさん
2020/02/07(金) 12:07:12.14ID:VWyX2qgb あ、上にかいたやつ+1は間違いや
332デフォルトの名無しさん
2020/02/07(金) 12:12:42.12ID:52vnIbYM ポインタ + size_t == ポインタ
ポインタ - ポインタ == ptrdiff_t
おかしいね
ポインタ - ポインタ == ptrdiff_t
おかしいね
333デフォルトの名無しさん
2020/02/07(金) 12:33:14.78ID:8FC0VQS8334デフォルトの名無しさん
2020/02/07(金) 12:48:40.15ID:Nrn3Ov0h indexにintはlp64環境だと怖すぎる
335デフォルトの名無しさん
2020/02/07(金) 12:51:13.27ID:cytAyAiU そんなバカでかいインデックス作る方が怖い
336デフォルトの名無しさん
2020/02/07(金) 13:01:32.69ID:jtk/IwGo ファイルポインタは4GB越えが当たり前だし。
337デフォルトの名無しさん
2020/02/07(金) 13:18:28.90ID:8FC0VQS8 ばかでかいループをたくさん作るなら
性能を心配した方が良い
中身にもよるが、ほぼメモリアクセス時間になりかねない
帯域の無駄遣い
ループをまとめるとか細切れにするとか
キャッシュを有効に使う処理にしないと
キャストのコストとか完全に誤差
性能を心配した方が良い
中身にもよるが、ほぼメモリアクセス時間になりかねない
帯域の無駄遣い
ループをまとめるとか細切れにするとか
キャッシュを有効に使う処理にしないと
キャストのコストとか完全に誤差
338デフォルトの名無しさん
2020/02/07(金) 13:30:18.43ID:QoBXk/kf メモリポインタも4GB超えは当たり前だしな
339デフォルトの名無しさん
2020/02/07(金) 13:33:10.28ID:52vnIbYM 8086時代の苦しみを知っている人なら
リニアでないポインタやインデックスが
どんなにウザいものかよく知っている
64bit空間なら64bitを使っとけって悪いこと言わないから
リニアでないポインタやインデックスが
どんなにウザいものかよく知っている
64bit空間なら64bitを使っとけって悪いこと言わないから
340デフォルトの名無しさん
2020/02/07(金) 13:45:59.17ID:8FC0VQS8 ループの中身も知らないで良く言うね
int変換必須なら問題点の場所を移動させただけ
int変換必須なら問題点の場所を移動させただけ
341デフォルトの名無しさん
2020/02/07(金) 13:58:09.08ID:jtk/IwGo 今日日4GB越えとかWindowsNT4.0サービスパックですか、と。
342デフォルトの名無しさん
2020/02/07(金) 14:12:43.62ID:PWhN+bN7 納品したときに
コンパイルで警告出るんですが消してって言われて
それ無視して良い警告ですよって言っても
理解してもらえなかった派
コンパイルで警告出るんですが消してって言われて
それ無視して良い警告ですよって言っても
理解してもらえなかった派
343デフォルトの名無しさん
2020/02/07(金) 14:19:34.17ID:PWhN+bN7 あと警告が出ないからと言って
正しく動くと保証されている訳でもなんでもないのに
正しく動くと保証されている訳でもなんでもないのに
344デフォルトの名無しさん
2020/02/07(金) 14:32:07.46ID:VWyX2qgb345デフォルトの名無しさん
2020/02/07(金) 14:34:22.92ID:jtk/IwGo 客先と同じビルド環境で警告対応しないのは落ち度だね。次の仕事なくなるでしょ。
346デフォルトの名無しさん
2020/02/07(金) 14:40:57.67ID:/rNOv2pQ >>333
BYTE v[数値];
のような生配列の場合、ループの中のv[i]は、最適化が効いてものすごく効率の良いコードになることが多い。
この場合、vがグローバルに確保されたオブジェクトや参照型であったとしても最適化には余り悪影響はない。
vがstd::vector 型の場合で、かつ、vがグローバル・オブジェクトや、参照型の場合は、コンパイラはv[i]を上手く最適化できないかもしれない。
BYTE v[数値];
のような生配列の場合、ループの中のv[i]は、最適化が効いてものすごく効率の良いコードになることが多い。
この場合、vがグローバルに確保されたオブジェクトや参照型であったとしても最適化には余り悪影響はない。
vがstd::vector 型の場合で、かつ、vがグローバル・オブジェクトや、参照型の場合は、コンパイラはv[i]を上手く最適化できないかもしれない。
347デフォルトの名無しさん
2020/02/07(金) 14:42:08.26ID:/rNOv2pQ348デフォルトの名無しさん
2020/02/07(金) 14:47:50.81ID:5UxOF8qK >>346
VCはvectorでも生ポインタに近い最適化はしてくれてるみたいだぞ
VCはvectorでも生ポインタに近い最適化はしてくれてるみたいだぞ
349デフォルトの名無しさん
2020/02/07(金) 15:03:24.58ID:jtk/IwGo 客や同僚から使えないプログラマ認定されていることに気づけず独りよがりな考えに凝り固まる人いるよね・・・
かわいそうではあるけど、かかわりたくないタイプの人。
かわいそうではあるけど、かかわりたくないタイプの人。
350はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 15:15:12.08ID:BIRgOLIs 標準ライブラリのコンテナのイテレータを sizeof で見ればわかるが、ほとんどの場合で void* と同じ大きさ。
要するにポインタ一個分の情報しかないし、実際ポインタが入ってるし、ポインタの操作になってる。
しいて言えば操作がメンバ関数経由になる分のコストはあるといえばあるけど、
それくらいのインライン展開はするのが普通でしょ。
vector の場合だと領域が連続する保証があるのでインライン展開だけでイテレータはポインタと同じになる。
VC のコンテナだとデバッグモードではイテレータが少し大きい (のと範囲チェックとかする) ってなことらしいんだが、
処理系をインストールしてないから試してない。
要するにポインタ一個分の情報しかないし、実際ポインタが入ってるし、ポインタの操作になってる。
しいて言えば操作がメンバ関数経由になる分のコストはあるといえばあるけど、
それくらいのインライン展開はするのが普通でしょ。
vector の場合だと領域が連続する保証があるのでインライン展開だけでイテレータはポインタと同じになる。
VC のコンテナだとデバッグモードではイテレータが少し大きい (のと範囲チェックとかする) ってなことらしいんだが、
処理系をインストールしてないから試してない。
351デフォルトの名無しさん
2020/02/07(金) 15:20:21.87ID:E/TdO4KU >>349
おまえがきちんとした仕様を提案できないで投げっぱにしてるからそんなことになってんじゃないの?
おまえがきちんとした仕様を提案できないで投げっぱにしてるからそんなことになってんじゃないの?
352デフォルトの名無しさん
2020/02/07(金) 17:16:18.19ID:52vnIbYM353デフォルトの名無しさん
2020/02/07(金) 17:31:01.39ID:Nrn3Ov0h intだとたったの2G要素でオーバーフローして無限ループになるのが怖い
354デフォルトの名無しさん
2020/02/07(金) 17:31:33.35ID:yxrGSGnH イテレータよりポインタのほうが速いよ。
ホントだよ。
いまベンチとってるから。
偶然だけど。
ホントだよ。
いまベンチとってるから。
偶然だけど。
355デフォルトの名無しさん
2020/02/07(金) 17:34:39.39ID:jtk/IwGo >>351
「無視して良い警告」とか勝手に判断する困ったPGにきちんと仕様を提案しても無駄でしょ。解雇するわ。
「無視して良い警告」とか勝手に判断する困ったPGにきちんと仕様を提案しても無駄でしょ。解雇するわ。
356デフォルトの名無しさん
2020/02/07(金) 17:37:50.00ID:PWhN+bN7 unsigned だと
for(unsigned i = s.size(); --i >= 0; ){...}
みたいなので警告出るんだっけ
for(unsigned i = s.size(); --i >= 0; ){...}
みたいなので警告出るんだっけ
357デフォルトの名無しさん
2020/02/07(金) 17:41:09.31ID:Nrn3Ov0h 警告で指摘された問題点に対処もせずに、キャストやらで無理やり消す位なら、出たまま放置の方が100倍マシ
358デフォルトの名無しさん
2020/02/07(金) 17:43:22.94ID:yxrGSGnH ヒープ作るとき、マイナスの値は空きノードのリンクリストに使ったりするので、その手の比較は多発する。
359はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 17:43:55.24ID:BIRgOLIs うーん、近頃はちょっとした作法レベルのところまで警告として口出しすることがあるからなぁ。
完全に規格に沿って書いてるわ! ってときにはイラッとすることもある。
個別に警告オプションを設定するのも面倒くせぇし、直してしまう方が手っ取り早かったりもするんだけど、
何がなんでも警告をゼロにしろって言われたら警告レベルを低くする対処をしちゃうかも。
完全に規格に沿って書いてるわ! ってときにはイラッとすることもある。
個別に警告オプションを設定するのも面倒くせぇし、直してしまう方が手っ取り早かったりもするんだけど、
何がなんでも警告をゼロにしろって言われたら警告レベルを低くする対処をしちゃうかも。
360デフォルトの名無しさん
2020/02/07(金) 17:52:14.97ID:VWyX2qgb 仕事ではやってんなら手を抜くなぼけ
pragmaとかでなんとでもなるだろ
pragmaとかでなんとでもなるだろ
361デフォルトの名無しさん
2020/02/07(金) 17:55:05.15ID:yxrGSGnH タモリさんは遊びで手を抜くなって言ってた。
362デフォルトの名無しさん
2020/02/07(金) 17:57:41.44ID:jtk/IwGo 従来cppcheckなどの静的解析ツールが出していた警告をコンパイラも出すようになってくれたのは良い動き。
親切なコンパイラに感謝して警告箇所の修正をやればいい。
修正に工数がかかることが懸念されるなら、依頼主にその旨を伝えればいい。
親切なコンパイラに感謝して警告箇所の修正をやればいい。
修正に工数がかかることが懸念されるなら、依頼主にその旨を伝えればいい。
363デフォルトの名無しさん
2020/02/07(金) 18:05:13.97ID:kNxPhPNR364デフォルトの名無しさん
2020/02/07(金) 18:14:59.44ID:CaNLgYal 雑魚ほどイキがるのはプログラマも同じ
365デフォルトの名無しさん
2020/02/07(金) 18:23:59.39ID:yxrGSGnH カバレッジ測定のツールって安いの無いのかな。
366はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 18:36:35.61ID:BIRgOLIs >>360
俺はプログラミングについては趣味者だから実務のことは知らんのだわ。
すまんな。
しかしな、必要以上の品質にするくらいなら手抜きで安くしろって言う客の方が多いと思うぞ。
必要より下になったらあかんのでそこを制御していい感じの
手抜き具合にするのが難しいわけだが、そこを上手くやるのが
手抜きしないことよりもプロに必要な資質じゃね?
手抜きしないよりも適切に手を抜く、どうやって手抜きするか知っていることが大事だ。
仕事は経済的に割に合う形でしか継続できないんだからさ。
そりゃあいつも十全な仕事が出来る時間的・経済的余裕があるならうれしいが、
現実はそうではないだろ。
俺はプログラミングについては趣味者だから実務のことは知らんのだわ。
すまんな。
しかしな、必要以上の品質にするくらいなら手抜きで安くしろって言う客の方が多いと思うぞ。
必要より下になったらあかんのでそこを制御していい感じの
手抜き具合にするのが難しいわけだが、そこを上手くやるのが
手抜きしないことよりもプロに必要な資質じゃね?
手抜きしないよりも適切に手を抜く、どうやって手抜きするか知っていることが大事だ。
仕事は経済的に割に合う形でしか継続できないんだからさ。
そりゃあいつも十全な仕事が出来る時間的・経済的余裕があるならうれしいが、
現実はそうではないだろ。
367デフォルトの名無しさん
2020/02/07(金) 18:40:56.99ID:jtk/IwGo369デフォルトの名無しさん
2020/02/07(金) 18:51:12.38ID:ZYtSuiu/ DirectX関連使ってるとenumよりenum classを優先しますという警告出るんだけど、ライブラリ変えるわけにもいかなく、どう対応するのが正解なんだろ?
370デフォルトの名無しさん
2020/02/07(金) 18:58:20.00ID:HVBpNa40 そもそも警告って規格で定められている訳でもなく、コンパイラが独自の基準で勝手に出してくる物だからね
mutableは悪だってconst付いてない変数全てに警告出すコンパイラとか出てきたらどうするんだろう
mutableは悪だってconst付いてない変数全てに警告出すコンパイラとか出てきたらどうするんだろう
371デフォルトの名無しさん
2020/02/07(金) 19:03:54.90ID:jtk/IwGo >>370
議論のための議論とか、言いがかりのような仮定の話に、いちいち付き合わないことが重要。
議論のための議論とか、言いがかりのような仮定の話に、いちいち付き合わないことが重要。
372デフォルトの名無しさん
2020/02/07(金) 19:04:25.00ID:/AlUflk/ >>365
とりあえずgprofでいいんじゃね?
とりあえずgprofでいいんじゃね?
373デフォルトの名無しさん
2020/02/07(金) 19:08:56.34ID:yxrGSGnH >>372
見てみます。
見てみます。
374はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 19:25:21.94ID:BIRgOLIs375デフォルトの名無しさん
2020/02/07(金) 19:30:53.52ID:9DO99WJ1 いやそれはカッコ付けろよ
376デフォルトの名無しさん
2020/02/07(金) 19:33:08.02ID:jtk/IwGo >>374
趣味でしかやってない人の意見なんて無視しろ、というが私の回答です。
趣味でしかやってない人の意見なんて無視しろ、というが私の回答です。
377デフォルトの名無しさん
2020/02/07(金) 19:39:25.14ID:1PiYJQ+8 >>374
それは括弧つけろよ
それは括弧つけろよ
379デフォルトの名無しさん
2020/02/07(金) 19:55:08.75ID:yxrGSGnH はちみつ先生は何を作ってるんですか?
380はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 20:28:02.80ID:BIRgOLIs >>379
ゲームのチートツールとか。
汎用的な便利なツールは色々とあるけど、個別のソフトをいじるには行き届かないこともあるので。
念のため言っとくけど買い切りの RPG かフリーゲームだけ。 ネットゲームはやってないよ。
ちなみにそのツールは公開してない。
その他に作った有用そうなものは公開してるんで、身バレするから言えない。
ゲームのチートツールとか。
汎用的な便利なツールは色々とあるけど、個別のソフトをいじるには行き届かないこともあるので。
念のため言っとくけど買い切りの RPG かフリーゲームだけ。 ネットゲームはやってないよ。
ちなみにそのツールは公開してない。
その他に作った有用そうなものは公開してるんで、身バレするから言えない。
381デフォルトの名無しさん
2020/02/07(金) 20:52:16.35ID:yxrGSGnH382デフォルトの名無しさん
2020/02/07(金) 20:56:00.11ID:jtk/IwGo つまり、はちみつ某は、なんの思い入れもない他人のソースを読まされる身になった経験が少ないわけか。
383デフォルトの名無しさん
2020/02/07(金) 21:02:52.46ID:yxrGSGnH アルゴリズム考えるときは、図を必ず書くと思うんだけど、皆さんは何を使ってますか?
いまは紙と鉛筆使ってるんだけど、探すの大変だから、ソフトに変えたい。
いまは紙と鉛筆使ってるんだけど、探すの大変だから、ソフトに変えたい。
384はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 21:05:36.03ID:BIRgOLIs >>382
せやな。
そんなわけで、他人のバイナリを見る機会はあるけどソースはそれほどでもって感じかも。
結果的に読まなきゃならないことはあるけど、所詮は趣味だから嫌になったらいつでも止められるし、急がなくてもいいし。
プレッシャーに晒されながらクソみたいなソースを読むってことはない。
せやな。
そんなわけで、他人のバイナリを見る機会はあるけどソースはそれほどでもって感じかも。
結果的に読まなきゃならないことはあるけど、所詮は趣味だから嫌になったらいつでも止められるし、急がなくてもいいし。
プレッシャーに晒されながらクソみたいなソースを読むってことはない。
385デフォルトの名無しさん
2020/02/07(金) 21:05:49.82ID:E/TdO4KU たまに書く方がいい
字を忘れる
字を忘れる
386デフォルトの名無しさん
2020/02/07(金) 21:09:26.55ID:y0pPi+zA C++なんざ仕事で嫌々書かされるだけの言語だと思ったけど
趣味で使っちゃう子もおるんやな
趣味で使っちゃう子もおるんやな
387はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 21:12:24.23ID:BIRgOLIs >>383
曖昧なところから思考を整理するなら紙と鉛筆でいいと思うけど、
それなりに書式の整ったようにするなら PlantUML とか。
GUI で自由にってことなら Dynamic Draw くらいが手頃かもしれない。
曖昧なところから思考を整理するなら紙と鉛筆でいいと思うけど、
それなりに書式の整ったようにするなら PlantUML とか。
GUI で自由にってことなら Dynamic Draw くらいが手頃かもしれない。
388デフォルトの名無しさん
2020/02/07(金) 21:15:03.53ID:jtk/IwGo 完全な趣味目的でC++を触る変態はそうそういないと思う。
389デフォルトの名無しさん
2020/02/07(金) 21:16:30.24ID:52vnIbYM >>386
禿1読んで信者になった変態もおるんやで
禿1読んで信者になった変態もおるんやで
390はちみつ餃子 ◆8X2XSCHEME
2020/02/07(金) 21:16:36.84ID:BIRgOLIs >>386
ゲームのチートとかするために
既存のプロセスに割り込んだりする処理を書こうと思うと C か C++ くらいしかまともな選択肢なくね?
C で足りるなら C で済ませることもあるけど、もうちょっと高級なことがしたくなったら C++
ってのは妥当な選択肢というか、唯一解でしょ。
まあ近頃は Rust にも興味があるけど……。
ゲームのチートとかするために
既存のプロセスに割り込んだりする処理を書こうと思うと C か C++ くらいしかまともな選択肢なくね?
C で足りるなら C で済ませることもあるけど、もうちょっと高級なことがしたくなったら C++
ってのは妥当な選択肢というか、唯一解でしょ。
まあ近頃は Rust にも興味があるけど……。
391デフォルトの名無しさん
2020/02/07(金) 21:37:46.79ID:yxrGSGnH >>387
見てみます。
見てみます。
392デフォルトの名無しさん
2020/02/07(金) 22:05:07.56ID:8FC0VQS8393デフォルトの名無しさん
2020/02/07(金) 22:14:56.42ID:8FC0VQS8 カッコつけろって人
付ける付けないの基準はコンパイラの警告?
完全に優先順位を覚えてる人から見ると
カッコが多いと見にくいんだよ
a == 0 || b != 0
a * b + 1
*a[i]
*a++
こんなのにカッコつけてたら
えっ?何か意味があるの?って考えてしまう
付ける付けないの基準はコンパイラの警告?
完全に優先順位を覚えてる人から見ると
カッコが多いと見にくいんだよ
a == 0 || b != 0
a * b + 1
*a[i]
*a++
こんなのにカッコつけてたら
えっ?何か意味があるの?って考えてしまう
394デフォルトの名無しさん
2020/02/07(金) 22:26:24.78ID:52vnIbYM > えっ?何か意味があるの?
いや、「あーまた面倒くさいやつ来やがった」だよ
いや、「あーまた面倒くさいやつ来やがった」だよ
395デフォルトの名無しさん
2020/02/07(金) 22:52:28.44ID:GxNDg+Fe 実務経験1年で月収80万稼げるエンジニアになった理由
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
https://www.youtube.com/watch?v=DrbbyGsHQic
意識が低いエンジニアこそフリーランスになれ
https://www.youtube.com/watch?v=nSEaAJlgjbQ
フリーランスエンジニアの週3労働ってどんな感じ?
https://www.youtube.com/watch?v=8yjoDCdbzMc
ぼくがスキルのない社畜ならこうやって脱する
https://www.youtube.com/watch?v=aae8xxbUlMM
初めて人を雇ったらもう二度とサラリーマンをやりたくないと思った話
https://www.youtube.com/watch?v=U0OCGRVLFsM
プログラミングは文系でも余裕で出来ます!理由を現役プログラマーが解説
https://www.youtube.com/watch?v=iBOeiSKBIW8
貧乏人こそ社会不適合者
https://www.youtube.com/watch?v=O3BT72BIBJI
元ド貧乏が教える】貧乏を抜け出すための2つの考え方
https://www.youtube.com/watch?v=IRrCgTy3ckc
より良いオファー貰ってるのに転職しないとか何考えてるの?
https://www.youtube.com/watch?v=i0J6uRhlj7o
396デフォルトの名無しさん
2020/02/07(金) 22:55:11.74ID:NUR9HIfz 優先順位を完全に把握しているなら機能的には意味のない括弧だと理解しているんだろうが
そのうえで疑問に思った「意味」って、どんなものを想定しているんだろう。
「優先順位を完全に把握していない人が間違えないように」くらいの意味しか思いつかないが。
そのうえで疑問に思った「意味」って、どんなものを想定しているんだろう。
「優先順位を完全に把握していない人が間違えないように」くらいの意味しか思いつかないが。
397デフォルトの名無しさん
2020/02/07(金) 22:59:52.10ID:8FC0VQS8 (a + b + c) + (d + e)
同じ型の整数5個を足すのにこんなカッコが付いてたらどう思う?
同じ型の整数5個を足すのにこんなカッコが付いてたらどう思う?
398デフォルトの名無しさん
2020/02/07(金) 23:17:13.31ID:NUR9HIfz399デフォルトの名無しさん
2020/02/07(金) 23:24:04.71ID:8FC0VQS8400デフォルトの名無しさん
2020/02/07(金) 23:24:42.60ID:jtk/IwGo 協業できない人があれこれC++について論じるのは害でしかない。
401デフォルトの名無しさん
2020/02/07(金) 23:31:57.60ID:Uosz/SQM まずプログラム言語っての読み書きする人間のためにあるって大前提忘れてるか自覚してないやつ多いな
402デフォルトの名無しさん
2020/02/07(金) 23:34:58.95ID:NUR9HIfz403デフォルトの名無しさん
2020/02/07(金) 23:36:27.96ID:Fqx20dQ+ >>397のようなコードを見てどう思う?
404デフォルトの名無しさん
2020/02/07(金) 23:39:04.16ID:jtk/IwGo 見やすいかどうかは主観なので、他人や未来の自分が読んで誤解しないようにすることが肝でしょ。
まさか、「数値リテラルの桁区切り文字」にまでかみついたりしないよね?
https://cpprefjp.github.io/lang/cpp14/digit_separators.html
まさか、「数値リテラルの桁区切り文字」にまでかみついたりしないよね?
https://cpprefjp.github.io/lang/cpp14/digit_separators.html
405デフォルトの名無しさん
2020/02/07(金) 23:41:49.81ID:yMJLmx4v 主観で見やすい表記にする
その為にコンパイラの警告を無視したり切ったりする
何も問題無い
その為にコンパイラの警告を無視したり切ったりする
何も問題無い
406い
2020/02/08(土) 00:06:08.38ID:Wxs8WSK9 >>374
> >>371
> 変な作法が追加されることなんて良くあるんだぞ。
> 今じゃ gcc や clang で -Wall オプションを付けたら
> a || b && c
> みたいな式にすら警告が出る。
> 優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
> 演算子の優先順位くらい把握しとるわ!
把握してても間違えやすいからだと思うね
実際にはa,b,cには比較演算子を使った式が入ることが多いだろう
そうするとけっこうな長さになったりする
で全体の構造が見えにくくなる
そりゃ書いてる真っ最中は問題ないさ
しかし後から読んだときにすぐ理解できなかったり、手を加えるときに間違えたりする
warningを出すべきかは議論の余地があると思うけど、
出すべきと考える理由はわかる
> >>371
> 変な作法が追加されることなんて良くあるんだぞ。
> 今じゃ gcc や clang で -Wall オプションを付けたら
> a || b && c
> みたいな式にすら警告が出る。
> 優先順位を間違えやすいとこだから括弧で明示した方が良いんだと!
> 演算子の優先順位くらい把握しとるわ!
把握してても間違えやすいからだと思うね
実際にはa,b,cには比較演算子を使った式が入ることが多いだろう
そうするとけっこうな長さになったりする
で全体の構造が見えにくくなる
そりゃ書いてる真っ最中は問題ないさ
しかし後から読んだときにすぐ理解できなかったり、手を加えるときに間違えたりする
warningを出すべきかは議論の余地があると思うけど、
出すべきと考える理由はわかる
407デフォルトの名無しさん
2020/02/08(土) 00:38:17.76ID:RKzyJDHj それはエディタの機能でかっこを表示したら良いのでは。
408デフォルトの名無しさん
2020/02/08(土) 00:57:11.32ID:GuOhFnKw 主観は重要だろう。
重要でないなら全部アセンブラで書けや。
客観的には最も性能の出る言語だぞ。
重要でないなら全部アセンブラで書けや。
客観的には最も性能の出る言語だぞ。
409デフォルトの名無しさん
2020/02/08(土) 01:23:28.05ID:Mdfh1mSi &,|とか&&,||は*,+の関係と同じだから括弧つける方が冗長で分かりづらくなると思うんだが
410デフォルトの名無しさん
2020/02/08(土) 01:29:21.53ID:zzucbZgG 一度書いた四則演算の数式を書き換えることはほとんどないけど、bool論理演算は頻繁に書き換えるでしょ。
411デフォルトの名無しさん
2020/02/08(土) 01:30:14.91ID:zzucbZgG 素人多いね、このスレ。
412デフォルトの名無しさん
2020/02/08(土) 01:45:08.63ID:RKzyJDHj >>411
プロの意見だとどうなりますか?
プロの意見だとどうなりますか?
413デフォルトの名無しさん
2020/02/08(土) 01:52:50.03ID:JKzazDKJ 数式を遅延評価するオブジェクトを作れば
演算子のオーバーロードで演算子の優先順位を変えられるも同然
演算子のオーバーロードで演算子の優先順位を変えられるも同然
414デフォルトの名無しさん
2020/02/08(土) 01:53:57.02ID:JKzazDKJ テクニックの限りを尽くしてbetter C++を実現したら良い
415デフォルトの名無しさん
2020/02/08(土) 01:54:26.60ID:zzucbZgG プロなら抽象的な質問には回答しないでしょ。時間泥棒にあう。
「もっと具体的に書いてくれ」と逆質問する義理がないならなおのこと。
「もっと具体的に書いてくれ」と逆質問する義理がないならなおのこと。
416デフォルトの名無しさん
2020/02/08(土) 02:00:57.81ID:RKzyJDHj 自分の職業の板には一切いかないから、ここも職業プログラマはいないと思う。
ここに書き込む意味が無いと思うんだよな。
ここに書き込む意味が無いと思うんだよな。
417デフォルトの名無しさん
2020/02/08(土) 02:02:06.13ID:uvgcwZ2m >>395
グロ
グロ
418デフォルトの名無しさん
2020/02/08(土) 02:06:09.28ID:Mdfh1mSi 職業プログラマって?
仕事でソフト作るし、客先に納入したりもするけどプログラマではないな
仕事でソフト作るし、客先に納入したりもするけどプログラマではないな
419デフォルトの名無しさん
2020/02/08(土) 02:08:10.84ID:RKzyJDHj たとえば、外科医が匿名の掲示板で効果的な治療法について話し合ったりしないでしょ。
治療法について話し合ってる人は患者だ。
だから、ここにもプログラマはいないはず。
治療法について話し合ってる人は患者だ。
だから、ここにもプログラマはいないはず。
420デフォルトの名無しさん
2020/02/08(土) 02:28:45.19ID:zzucbZgG プロの対義語はアマ。素人の対義語は玄人。
今時点のこのスレの回答者が素人同然の低いレベルであることは、否定できない。
例えば一週間後は違うかもしれない。もっともまともな回答者がこのスレに常駐するようになるかもしれない。
今時点のこのスレの回答者が素人同然の低いレベルであることは、否定できない。
例えば一週間後は違うかもしれない。もっともまともな回答者がこのスレに常駐するようになるかもしれない。
421デフォルトの名無しさん
2020/02/08(土) 06:55:22.73ID:ARbKbNEu >>374
-Wallとは別に「お節介は一切禁止」というオプション欲しいね
-Wallとは別に「お節介は一切禁止」というオプション欲しいね
422デフォルトの名無しさん
2020/02/08(土) 07:15:13.17ID:N5LmiSOJ 特定の警告だけ無効に出来るのが普通だよ
423デフォルトの名無しさん
2020/02/08(土) 07:33:56.27ID:gtTyaGQ0 警告は全ておせっかい
424デフォルトの名無しさん
2020/02/08(土) 07:53:55.28ID:+X9VZvVK425デフォルトの名無しさん
2020/02/08(土) 08:04:33.44ID:gtTyaGQ0 私も見たことは無い
でも他の演算子でも同じこと
1u << n+1
こんなのは良く使う
いちいちカッコを付けた方が分かりにくい
でも他の演算子でも同じこと
1u << n+1
こんなのは良く使う
いちいちカッコを付けた方が分かりにくい
426デフォルトの名無しさん
2020/02/08(土) 08:11:34.30ID:gtTyaGQ0 カッコを付けろって結局警告が出るから付けろってことで
見やすさとか無視した意見が多い
if ((a==(b + 1))||(a==(b + 2)))
こんな感じに書くヤツがいるんだよ実際
見やすさとか無視した意見が多い
if ((a==(b + 1))||(a==(b + 2)))
こんな感じに書くヤツがいるんだよ実際
427デフォルトの名無しさん
2020/02/08(土) 08:14:44.94ID:ARbKbNEu 警告の出方がコンパイラによって違うわけで
特定のコンパイラの警告に対応するということなら
#pragma使うのと同じだね
特定のコンパイラの警告に対応するということなら
#pragma使うのと同じだね
428デフォルトの名無しさん
2020/02/08(土) 08:26:00.28ID:GuOhFnKw429デフォルトの名無しさん
2020/02/08(土) 08:42:00.85ID:gtTyaGQ0 えっ?
まじで言ってる?
if (a == b+1 || a == b+2)
これだと一瞬で理読める
俺が特殊?
まじで言ってる?
if (a == b+1 || a == b+2)
これだと一瞬で理読める
俺が特殊?
430デフォルトの名無しさん
2020/02/08(土) 09:05:35.53ID:LleYumKd431デフォルトの名無しさん
2020/02/08(土) 09:08:26.73ID:LleYumKd >>408
やはりアホだったかコイツw
やはりアホだったかコイツw
432デフォルトの名無しさん
2020/02/08(土) 09:10:24.21ID:ktYbgjbO433デフォルトの名無しさん
2020/02/08(土) 09:29:30.06ID:JKzazDKJ 256倍バグを出しても256倍早く潰したら
問題無くね?
問題無くね?
434デフォルトの名無しさん
2020/02/08(土) 09:30:03.39ID:GuOhFnKw if( a == (b+1) || a == (b+2) )
これくらい書いてもバチ当たらんだろ。
しょうもないことでドヤってる馬鹿が開発では一番有害。
これくらい書いてもバチ当たらんだろ。
しょうもないことでドヤってる馬鹿が開発では一番有害。
435デフォルトの名無しさん
2020/02/08(土) 09:32:02.56ID:pUDxcHmc >>433
256倍もバグ出すような奴と仕事したくない
256倍もバグ出すような奴と仕事したくない
436デフォルトの名無しさん
2020/02/08(土) 09:39:01.42ID:JKzazDKJ >>435
先方も256倍遅い奴と仕事したくないと思うてはるで
先方も256倍遅い奴と仕事したくないと思うてはるで
437デフォルトの名無しさん
2020/02/08(土) 10:08:44.51ID:Di3wk8ih >>433
全部潰せるならね
全部潰せるならね
438デフォルトの名無しさん
2020/02/08(土) 10:24:14.91ID:YOfaZC8k じゃあ次は
bool b;
// 略
if (b == true)
の話でもする?w
俺はこれが一番のキチガイ記法だと思ってる
bool b;
// 略
if (b == true)
の話でもする?w
俺はこれが一番のキチガイ記法だと思ってる
439デフォルトの名無しさん
2020/02/08(土) 10:29:50.84ID:yr4lhGWD 勢いあまってこれも否定しちゃう
BOOL b;
if (b == TRUE)
BOOL b;
if (b == TRUE)
440デフォルトの名無しさん
2020/02/08(土) 10:33:51.20ID:JKzazDKJ >>439
b==-1が成立することが有るのはウィンドーズのバグ
b==-1が成立することが有るのはウィンドーズのバグ
441デフォルトの名無しさん
2020/02/08(土) 10:39:25.53ID:yaVA2/v3 if (a = b+1 || a == b+2)
こう書いたとき気づきづらい
手間をかけるのはそれ自体だけでなくいろいろ見る機会になる
こう書いたとき気づきづらい
手間をかけるのはそれ自体だけでなくいろいろ見る機会になる
442デフォルトの名無しさん
2020/02/08(土) 11:00:58.51ID:Di3wk8ih443デフォルトの名無しさん
2020/02/08(土) 11:05:13.10ID:Di3wk8ih444デフォルトの名無しさん
2020/02/08(土) 11:09:08.44ID:LleYumKd445デフォルトの名無しさん
2020/02/08(土) 11:17:32.81ID:yr4lhGWD >>440
で、 if (b) と書いちゃっても自分のバグじゃなくてWindowsのバグと主張する
で、 if (b) と書いちゃっても自分のバグじゃなくてWindowsのバグと主張する
446デフォルトの名無しさん
2020/02/08(土) 11:39:54.89ID:pjdiRHlo >>445
C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
なお、余計に混乱を招くだけかもしれないが、
数学的には、b == true とは、単なる数として完全一致であることを調べる演算子ではなく、集合的に、b ∈ {非0} であるかどうかを調べる演算子だとみなすことも出来る。
ところが、C/C++ では、== 演算子は単なる数としての一致を調べる演算子で、
かつ、TRUE は通常 1 にマクロ定義されているので、
b == true が、b が完全に 1 に一致しているかどうかを調べる演算子になっている。
なので、if (b) と書く方が正しく、if ( b == TRUE ) と書くのは間違い。
C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
なお、余計に混乱を招くだけかもしれないが、
数学的には、b == true とは、単なる数として完全一致であることを調べる演算子ではなく、集合的に、b ∈ {非0} であるかどうかを調べる演算子だとみなすことも出来る。
ところが、C/C++ では、== 演算子は単なる数としての一致を調べる演算子で、
かつ、TRUE は通常 1 にマクロ定義されているので、
b == true が、b が完全に 1 に一致しているかどうかを調べる演算子になっている。
なので、if (b) と書く方が正しく、if ( b == TRUE ) と書くのは間違い。
447デフォルトの名無しさん
2020/02/08(土) 11:53:39.76ID:yr4lhGWD >C/C++ では、b が「非0」、つまり「0 以外」だとすべて真(true) と考えるのが伝統。
名前が紛らわしいがBOOLは真偽二値じゃないんだからそれは関係ない。
TRUEかどうか判定する必要があるなら if (b) は明らかに間違い。
名前が紛らわしいがBOOLは真偽二値じゃないんだからそれは関係ない。
TRUEかどうか判定する必要があるなら if (b) は明らかに間違い。
448デフォルトの名無しさん
2020/02/08(土) 12:11:53.25ID:JKzazDKJ 回避して使うかどうかとは無関係にバグはバグじゃわ;
449デフォルトの名無しさん
2020/02/08(土) 12:27:48.00ID:yr4lhGWD >>439はジョークのつもりだったが、実際に勢い余った人が2人も現れるとはw
450デフォルトの名無しさん
2020/02/08(土) 12:47:51.09ID:YOfaZC8k451デフォルトの名無しさん
2020/02/08(土) 12:53:53.46ID:JKzazDKJ プログラミングはアートやからな
狂気もまた創造の源泉、
狂気もまた創造の源泉、
452デフォルトの名無しさん
2020/02/08(土) 12:56:37.29ID:zzucbZgG453デフォルトの名無しさん
2020/02/08(土) 12:58:48.67ID:zzucbZgG454デフォルトの名無しさん
2020/02/08(土) 13:32:28.54ID:gtTyaGQ0455デフォルトの名無しさん
2020/02/08(土) 14:33:50.82ID:pjdiRHlo BOOL b に対して、正しくはこう :
if ( b ) // 良い
if ( b != 0 ) // 良い
if ( b == TRUE ) // 駄目
if ( b ) // 良い
if ( b != 0 ) // 良い
if ( b == TRUE ) // 駄目
456デフォルトの名無しさん
2020/02/08(土) 14:48:48.31ID:v1IBJgnW >>383
graphviz / python
graphviz / python
457デフォルトの名無しさん
2020/02/08(土) 14:51:43.97ID:P2cF6ghb graphvizは主要なLinuxの標準リポジトリに入ってるから助かる
458デフォルトの名無しさん
2020/02/08(土) 14:52:17.78ID:v1IBJgnW >>403
浮動小数点数なら桁落ちとか気にしてんのかなーとか勘繰る
浮動小数点数なら桁落ちとか気にしてんのかなーとか勘繰る
459デフォルトの名無しさん
2020/02/08(土) 15:10:32.80ID:pjdiRHlo >>403
整数の場合だと、括弧を付けてある部分に何らかのまとまった意味があるのかも知れない。
数学や物理学では、計算を減らすために式変形していくが、最終的な式は元々の意味が分からなくなってしまうことがある。
その場合には括弧で囲ったくらいで意味が分かり易くなることは少ない。
しかし、そのケースの場合は、括弧で括ると何か意味が分かり易くなると考えた間ロウ製がある。
整数の場合だと、括弧を付けてある部分に何らかのまとまった意味があるのかも知れない。
数学や物理学では、計算を減らすために式変形していくが、最終的な式は元々の意味が分からなくなってしまうことがある。
その場合には括弧で囲ったくらいで意味が分かり易くなることは少ない。
しかし、そのケースの場合は、括弧で括ると何か意味が分かり易くなると考えた間ロウ製がある。
460デフォルトの名無しさん
2020/02/08(土) 15:11:02.15ID:pjdiRHlo >>459
間ロウ製 ---> 可能性
間ロウ製 ---> 可能性
461デフォルトの名無しさん
2020/02/08(土) 15:12:02.03ID:JKzazDKJ462デフォルトの名無しさん
2020/02/08(土) 15:45:10.44ID:yr4lhGWD MSDNの書き間違いかもしれないが、Win32 APIの一部にも「成功時はTRUEを返す」という
仕様の関数があるんだよな。
仕様の関数があるんだよな。
463デフォルトの名無しさん
2020/02/08(土) 15:54:04.38ID:pjdiRHlo464デフォルトの名無しさん
2020/02/08(土) 16:07:20.11ID:yr4lhGWD おいおい、#define TRUE 1のTRUEと真(true)の区別がぐちゃぐちゃだぞ。
BOOLを返すWin32 APIの多くは「成功時はFALSE(0)以外の値を返す」という仕様になっている。
BOOLを返すWin32 APIの多くは「成功時はFALSE(0)以外の値を返す」という仕様になっている。
465デフォルトの名無しさん
2020/02/08(土) 16:16:01.81ID:24Q9Tmjg 宗派論争だな
466デフォルトの名無しさん
2020/02/08(土) 16:19:44.70ID:RKzyJDHj C++にはtrueがあるので積極的に使っていこうと思います。
467デフォルトの名無しさん
2020/02/08(土) 16:36:41.39ID:pjdiRHlo >>464
なるほど確かに Win32 の BOOL LineTo(HDC hdc, int nXEnd, int nYEnd)の 戻り値は、
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
のように、成功時には 1 や TRUE ではなく、「非0」を返すと書いてある。
なるほど確かに Win32 の BOOL LineTo(HDC hdc, int nXEnd, int nYEnd)の 戻り値は、
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero.
のように、成功時には 1 や TRUE ではなく、「非0」を返すと書いてある。
468デフォルトの名無しさん
2020/02/08(土) 16:45:19.38ID:RKzyJDHj キャッシュかキャッシュでないかで速度が変わる。
これは驚き。
これは驚き。
469デフォルトの名無しさん
2020/02/08(土) 16:50:34.75ID:LleYumKd バカ==TRUE
470デフォルトの名無しさん
2020/02/08(土) 17:21:59.80ID:+a4Pmd4C ○ if(b) if(!b)
○ if(b == FALSE) if(b != FALSE)
× if(b == TRUE) if(b != TRUE)
WinAPI使いには常識だと思ってたんだが
○ if(b == FALSE) if(b != FALSE)
× if(b == TRUE) if(b != TRUE)
WinAPI使いには常識だと思ってたんだが
471デフォルトの名無しさん
2020/02/08(土) 17:32:20.19ID:RKzyJDHj そういうのをみんなで共有しましょうって事で、たらこさんが2chを作ったんですよ。
472デフォルトの名無しさん
2020/02/08(土) 17:40:43.90ID:yr4lhGWD473デフォルトの名無しさん
2020/02/08(土) 17:57:14.84ID:+a4Pmd4C 本当にそんなのあるの?
戻り値BOOLでFALSE(0)とTRUE(1)以外の値をTRUEと違う意味を表現するために意図的に返す奴があるってこと?
具体例どうぞ
戻り値BOOLでFALSE(0)とTRUE(1)以外の値をTRUEと違う意味を表現するために意図的に返す奴があるってこと?
具体例どうぞ
475はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:26:30.54ID:2SU4KPt5 >>473
GetMessage という基本的な API からして変則的だから……
GetMessage という基本的な API からして変則的だから……
476デフォルトの名無しさん
2020/02/08(土) 18:31:14.43ID:yr4lhGWD >>462に書いたMSDNのは単にドキュメントの間違いという可能性もあるけどね。
それとは別に、TRUE/FALSe以外に-1を返すAPIがあるのは有名だろう。
いずれにしても仕様をちゃんと確認してそれに従った扱いをすべきで、思い込みは禁物ってこと。
それとは別に、TRUE/FALSe以外に-1を返すAPIがあるのは有名だろう。
いずれにしても仕様をちゃんと確認してそれに従った扱いをすべきで、思い込みは禁物ってこと。
477はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:33:32.51ID:2SU4KPt5478デフォルトの名無しさん
2020/02/08(土) 18:34:27.09ID:RKzyJDHj 判定マクロないの。
479はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:44:49.18ID:2SU4KPt5 >>466
bool も式にまざるといつのまにか int に暗黙に型変換されちゃったりして、
やっぱりこう、あまりしっかり区別されてる気がしねぇなあと思うことも多いよ。
Windows API で使われている BOOL よりはかなりマシではあるけど。
bool も式にまざるといつのまにか int に暗黙に型変換されちゃったりして、
やっぱりこう、あまりしっかり区別されてる気がしねぇなあと思うことも多いよ。
Windows API で使われている BOOL よりはかなりマシではあるけど。
480デフォルトの名無しさん
2020/02/08(土) 18:46:46.57ID:JKzazDKJ GetMessage()が-1を返したときはエラーなんじゃわ;
481デフォルトの名無しさん
2020/02/08(土) 18:51:51.40ID:+a4Pmd4C 「WM_QUITでない」という条件における真(0以外)の中の特殊な場合(エラー)に-1ってことなのね
理屈はわからんでもないけど変なの
本当はそんなのの戻り値に「BOOL」なんていうtypedefを使うのがそもそもおかしいんだけどWinAPIだから仕方ないな
理屈はわからんでもないけど変なの
本当はそんなのの戻り値に「BOOL」なんていうtypedefを使うのがそもそもおかしいんだけどWinAPIだから仕方ないな
482デフォルトの名無しさん
2020/02/08(土) 18:52:06.88ID:RKzyJDHj >>480
行末の;イイね。
行末の;イイね。
483デフォルトの名無しさん
2020/02/08(土) 18:52:56.77ID:RKzyJDHj 30年前のAPIだしね。
484はちみつ餃子 ◆8X2XSCHEME
2020/02/08(土) 18:55:20.75ID:2SU4KPt5 今なら適当なフレームワークをかぶせて使うもんだと思う。
素でメッセージの処理とか面倒くさすぎるし。
素でメッセージの処理とか面倒くさすぎるし。
485デフォルトの名無しさん
2020/02/08(土) 19:15:43.34ID:mZtPBS5R klocworkがboolメンバ変数にportingがどうのって言ってくるのがうざい
486デフォルトの名無しさん
2020/02/08(土) 20:18:51.44ID:RKzyJDHj >>485
これ何億円するの?
これ何億円するの?
487デフォルトの名無しさん
2020/02/08(土) 21:17:13.95ID:24Q9Tmjg488デフォルトの名無しさん
2020/02/08(土) 21:25:19.61ID:RKzyJDHj 正の型の値と負の型の値を比較する場合、ビット幅の大きいほうの型に変換されてから比較されるんですかね?
489デフォルトの名無しさん
2020/02/08(土) 21:30:32.47ID:uvgcwZ2m 汎整数拡張でググれ
490デフォルトの名無しさん
2020/02/08(土) 21:35:32.85ID:RKzyJDHj491デフォルトの名無しさん
2020/02/08(土) 23:34:23.41ID:jnRyPLnj >>472
いや。TRUE は、必ず if 式で真と判定されるので、if (b == TRUE) としなくても
if (b) で絶対十分であることは補償されている。
むしろ、if (b == TRUE) と書くのはバグの原因になるので駄目だと言われている。
いや。TRUE は、必ず if 式で真と判定されるので、if (b == TRUE) としなくても
if (b) で絶対十分であることは補償されている。
むしろ、if (b == TRUE) と書くのはバグの原因になるので駄目だと言われている。
492デフォルトの名無しさん
2020/02/08(土) 23:51:17.72ID:jnRyPLnj なんというか、TRUE は、処理系ごとに変化する値ではなく、C/C++ においては、標準的には必ず 1 に #define されている。
一応分かり易さのために TRUE と書いているだけで、TRUEが2になったりする事は考える必要はない。
ただし、逆に、高速化のために 1 ではなく、非0の値を返してたまたまの値、
例えば、12 とかを返してくる関数が有りえる。
その場合、うっかり間違って if ( b == TRUE ) などと書いてしまっていたら
大変なことになるので、意味的に TRUE を返す場合には、
if ( b ) または、if ( b != 0 ) と書く方が安全だと考えられている。
一応分かり易さのために TRUE と書いているだけで、TRUEが2になったりする事は考える必要はない。
ただし、逆に、高速化のために 1 ではなく、非0の値を返してたまたまの値、
例えば、12 とかを返してくる関数が有りえる。
その場合、うっかり間違って if ( b == TRUE ) などと書いてしまっていたら
大変なことになるので、意味的に TRUE を返す場合には、
if ( b ) または、if ( b != 0 ) と書く方が安全だと考えられている。
493デフォルトの名無しさん
2020/02/08(土) 23:53:58.53ID:jnRyPLnj 非常に古い時代に、TRUE を -1 と定義していた処理系もあったかもしれないが、
現在の C/C++ では、1 に定義するのが基本とされている。
b == TRUE という判定の仕方は、C/C++ の言語仕様から考えれば推奨されない。
現在の C/C++ では、1 に定義するのが基本とされている。
b == TRUE という判定の仕方は、C/C++ の言語仕様から考えれば推奨されない。
494はちみつ餃子 ◆8X2XSCHEME
2020/02/09(日) 00:57:27.97ID:OoesT11A >>492-493
言語仕様にある true を避けているのだから、
その環境においては標準と異なる事情があるのだと察するべきじゃないの。
まあそういうことがあったらもっと別の名前を付けるべきだとは思うけど。
C/C++ はその性質上、様々なシステムの仲立ちをする機会があるし、
いろんな事情に左右される。
TRUE を 1 と定義する機会が多いのは確かだろうし、
そのときの習慣が確立されてもいるのもわかってるけど、
それが当たり前かっつーとそうとも言えんのじゃないかな。
言語仕様にある true を避けているのだから、
その環境においては標準と異なる事情があるのだと察するべきじゃないの。
まあそういうことがあったらもっと別の名前を付けるべきだとは思うけど。
C/C++ はその性質上、様々なシステムの仲立ちをする機会があるし、
いろんな事情に左右される。
TRUE を 1 と定義する機会が多いのは確かだろうし、
そのときの習慣が確立されてもいるのもわかってるけど、
それが当たり前かっつーとそうとも言えんのじゃないかな。
495デフォルトの名無しさん
2020/02/09(日) 01:17:16.75ID:J5M0tDgl 趣味人だとかいってるがハチミツ餃子はたまに良い事いうから困る
496デフォルトの名無しさん
2020/02/09(日) 01:23:08.88ID:e66sowWB >>494
TRUE が 1 以外に定義されていても、TRUE の値は、if 文では真と解釈されることだけは保障されているので、if (b) は問題ない。
逆に BOOL b の場合、b が非0であるが、TRUE のマクロ値とは異なった値になっている場合がないとは保障はされない。
なので、if ( b == TRUE ) だと、TRUE ではないが b に真とみなせる値が入っている場合にすり抜けてしまう恐れがあり、重大バグの原因となる。
TRUE が 1 以外に定義されていても、TRUE の値は、if 文では真と解釈されることだけは保障されているので、if (b) は問題ない。
逆に BOOL b の場合、b が非0であるが、TRUE のマクロ値とは異なった値になっている場合がないとは保障はされない。
なので、if ( b == TRUE ) だと、TRUE ではないが b に真とみなせる値が入っている場合にすり抜けてしまう恐れがあり、重大バグの原因となる。
497デフォルトの名無しさん
2020/02/09(日) 01:23:18.79ID:bHnzUNQO >>494
避けるもクソもそもそも昔なかったし
避けるもクソもそもそも昔なかったし
498デフォルトの名無しさん
2020/02/09(日) 01:33:30.02ID:Jw8Rx7z0 あったぞ
MSが実装サボっただけで
MSが実装サボっただけで
499デフォルトの名無しさん
2020/02/09(日) 01:58:53.21ID:bHnzUNQO 当時のc言語には仕様に無くない?
500はちみつ餃子 ◆8X2XSCHEME
2020/02/09(日) 02:19:40.02ID:OoesT11A501デフォルトの名無しさん
2020/02/09(日) 02:27:09.56ID:cYNa4VVg 過去と未来の狭間にあるってことかな。
502デフォルトの名無しさん
2020/02/09(日) 04:25:17.31ID:ids8kf+0 WindowsAPIはC++限定じゃなくCを主軸に捉えてるだろ
クラスとか一切無いしマクロだらけだし
そもそもboolが無かったってのはそういうことやろ
クラスとか一切無いしマクロだらけだし
そもそもboolが無かったってのはそういうことやろ
503デフォルトの名無しさん
2020/02/09(日) 07:14:29.14ID:6++kPC7v504デフォルトの名無しさん
2020/02/09(日) 07:15:18.90ID:6++kPC7v >>502
Cと言うよりPascalだし
Cと言うよりPascalだし
505デフォルトの名無しさん
2020/02/09(日) 07:19:31.89ID:PT76WH2y >>434
自己紹介乙
自己紹介乙
506デフォルトの名無しさん
2020/02/09(日) 07:24:44.99ID:PT76WH2y507デフォルトの名無しさん
2020/02/09(日) 08:43:40.61ID:J3Qn0niW >>496
何回ループしてるんだよ。
真(truthy)であることが要求されているなら if (b) だし、TRUEであることが要求されるなら
if (b == TRUE) だ。それを取り違えることがバグだ。
何回ループしてるんだよ。
真(truthy)であることが要求されているなら if (b) だし、TRUEであることが要求されるなら
if (b == TRUE) だ。それを取り違えることがバグだ。
508デフォルトの名無しさん
2020/02/09(日) 08:54:48.96ID:aEgJYC9i509デフォルトの名無しさん
2020/02/09(日) 08:59:21.69ID:aEgJYC9i まあ失敗時はFALSE、とも書いてあるから、こう書くのが正解!
bRet32 = MakeSureDirectoryPathExists("C:\\tmp");
if (bRet == TRUE) {
// 成功すた
...
} else if (bRet == FALSE) {{
// 失敗すた
...
} else {
assert(0);
}
bRet32 = MakeSureDirectoryPathExists("C:\\tmp");
if (bRet == TRUE) {
// 成功すた
...
} else if (bRet == FALSE) {{
// 失敗すた
...
} else {
assert(0);
}
510デフォルトの名無しさん
2020/02/09(日) 09:03:53.87ID:aEgJYC9i511デフォルトの名無しさん
2020/02/09(日) 09:06:48.93ID:aEgJYC9i512デフォルトの名無しさん
2020/02/09(日) 09:28:45.27ID:PT76WH2y C89にboolがないことに拒否反応を起こす頭の固い奴に迎合して作られたboolでないBOOL
513デフォルトの名無しさん
2020/02/09(日) 09:35:18.39ID:aEgJYC9i 先にWindowsがシステムコールとしての素朴な要請からbool型の実装型を定義して、
その後コンパイラメーカーがbool型の実装を別の方式にし出すよりは
よっぽどマシやったろうが!
個人的にはBOOLは好きだがな
TRUE/FALSEを表すのに4バイトも使うところが
いかにもリッチなOSっぽく、使っていてリッチな気分になれる
その後コンパイラメーカーがbool型の実装を別の方式にし出すよりは
よっぽどマシやったろうが!
個人的にはBOOLは好きだがな
TRUE/FALSEを表すのに4バイトも使うところが
いかにもリッチなOSっぽく、使っていてリッチな気分になれる
514デフォルトの名無しさん
2020/02/09(日) 09:41:35.54ID:6++kPC7v >>508
ありがと
全部は見てないけどDbgHelp関連の奴はその書き方してるみたいね
https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-functions
ありがと
全部は見てないけどDbgHelp関連の奴はその書き方してるみたいね
https://docs.microsoft.com/en-us/windows/win32/debug/dbghelp-functions
515デフォルトの名無しさん
2020/02/09(日) 09:47:29.30ID:Ej5ffr5G516デフォルトの名無しさん
2020/02/09(日) 09:55:00.47ID:aEgJYC9i といっても成功していないのだからエラー扱いで差し支えないなのでは…
517デフォルトの名無しさん
2020/02/09(日) 10:28:32.96ID:Ej5ffr5G >>516
なんでそんなに自信満々なんだよw
マジでドキュメント見てこい
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage
なんでそんなに自信満々なんだよw
マジでドキュメント見てこい
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getmessage
518デフォルトの名無しさん
2020/02/09(日) 10:45:20.17ID:Jw8Rx7z0519デフォルトの名無しさん
2020/02/09(日) 10:54:04.79ID:Jw8Rx7z0 クソ雑魚>>510はマニュアルを読まない可能性があるので、マニュアルの使用例貼っておきますね
GetMessageがFALSE(0)返したときの何がエラーだって?笑わせんなカス
TRUE以外ならassertで落としていいなんてどこに書いてある?勝手な妄想すんなゴミ
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
GetMessageがFALSE(0)返したときの何がエラーだって?笑わせんなカス
TRUE以外ならassertで落としていいなんてどこに書いてある?勝手な妄想すんなゴミ
BOOL bRet;
while( (bRet = GetMessage( &msg, hWnd, 0, 0 )) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
520デフォルトの名無しさん
2020/02/09(日) 11:39:41.09ID:aEgJYC9i521デフォルトの名無しさん
2020/02/09(日) 11:53:18.89ID:PT76WH2y >>519
変数いらねーから
for(;;)
switch(GetMessage(&msg, hWnd, 0, 0))
{
default:
TranslateMessage(&msg);
DispatchMessage(&msg);
break;
case 0:
return int(msg.wParam);
case -1:
throw std::system_error(std::error_code(int(GetLastError()), std::system_category()), "GetMessage");
}
変数いらねーから
for(;;)
switch(GetMessage(&msg, hWnd, 0, 0))
{
default:
TranslateMessage(&msg);
DispatchMessage(&msg);
break;
case 0:
return int(msg.wParam);
case -1:
throw std::system_error(std::error_code(int(GetLastError()), std::system_category()), "GetMessage");
}
522デフォルトの名無しさん
2020/02/09(日) 12:02:53.96ID:Cr/e9GtE while(GetMessage( &msg, hWnd, 0, 0 ) >0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
523デフォルトの名無しさん
2020/02/09(日) 12:05:04.77ID:aEgJYC9i とオモタがわかった
GetMessage()は WM_QUIT以外を受け取ったとき非0を返す、としか書かれていないから
bRet32 == TRUEでは正しい判定にならないのねん
使ったのがスゲー昔なので忘れていたが、そのときは多分>>519式に書いたから安心してホスイ
GetMessage()は WM_QUIT以外を受け取ったとき非0を返す、としか書かれていないから
bRet32 == TRUEでは正しい判定にならないのねん
使ったのがスゲー昔なので忘れていたが、そのときは多分>>519式に書いたから安心してホスイ
524デフォルトの名無しさん
2020/02/09(日) 12:06:02.94ID:aEgJYC9i >>522
気持ちはワカル
気持ちはワカル
525デフォルトの名無しさん
2020/02/09(日) 15:07:49.90ID:Z95s67CZ しょうもない事で攻撃的になるやつなんなの
いつも吹いてしまうw
いつも吹いてしまうw
526デフォルトの名無しさん
2020/02/09(日) 15:13:04.53ID:G+Zw2pJ3 (笑)
527はちみつ餃子 ◆8X2XSCHEME
2020/02/09(日) 15:27:19.45ID:OoesT11A >>506
BASIC というか、古の言語にはビット演算と論理演算の区別がないものが結構あった。
全てのビットが立った状態 (-1) を真ということにしておけば
ビット演算用の AND, OR, NOT がそのまま論理演算のそれとして使える。
昔はこれが気の利いた方法だったんだろう。
BASIC というか、古の言語にはビット演算と論理演算の区別がないものが結構あった。
全てのビットが立った状態 (-1) を真ということにしておけば
ビット演算用の AND, OR, NOT がそのまま論理演算のそれとして使える。
昔はこれが気の利いた方法だったんだろう。
528デフォルトの名無しさん
2020/02/09(日) 16:19:35.32ID:wTv3WydA #define FALSE 0 ← 正しい
#define TRUE 1 ← 間違い くず! 0点!! 出入り禁止!!!
#define TRUE (!0) ← 正しい
if(b) ← 正しい
if(b != FALSE) ← 正しい
if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!
#define TRUE 1 ← 間違い くず! 0点!! 出入り禁止!!!
#define TRUE (!0) ← 正しい
if(b) ← 正しい
if(b != FALSE) ← 正しい
if(b == TRUE) ← 間違い くず! 0点!! 出入り禁止!!!
529デフォルトの名無しさん
2020/02/09(日) 17:16:55.31ID:J3Qn0niW >if(b != FALSE) ← 正しい
これこそ糞コード
これこそ糞コード
530デフォルトの名無しさん
2020/02/09(日) 17:20:45.96ID:GpaXptWq 意味的にboolなら
if (a)
if (!a)
で判断すべきだと思う
if (a)
if (!a)
で判断すべきだと思う
531デフォルトの名無しさん
2020/02/09(日) 17:24:22.90ID:GpaXptWq if (a == TRUE)
if (a == TRUE == TRUE)
if (a == TRUE == TRUE == TRUE)
if (a == TRUE == TRUE)
if (a == TRUE == TRUE == TRUE)
532デフォルトの名無しさん
2020/02/09(日) 17:32:39.19ID:DvSFPggO とぅっとぅるぅ〜♪
533デフォルトの名無しさん
2020/02/09(日) 17:40:32.11ID:J3Qn0niW534デフォルトの名無しさん
2020/02/09(日) 17:46:22.21ID:cYNa4VVg ちゃうねん。
535デフォルトの名無しさん
2020/02/09(日) 17:46:32.42ID:ugWNThcV >>528
#define TRUE (!0) ← 正しい
C/C++ では、!0 は、必ず1 になることが仕様化されているので、仕様に準拠している
処理系ではこれは必ず、
#define TRUE 1
と書くのと同じになるので、敢えて (!0) と書く意味は無い。
#define TRUE (!0) ← 正しい
C/C++ では、!0 は、必ず1 になることが仕様化されているので、仕様に準拠している
処理系ではこれは必ず、
#define TRUE 1
と書くのと同じになるので、敢えて (!0) と書く意味は無い。
536デフォルトの名無しさん
2020/02/09(日) 17:48:20.60ID:GpaXptWq boolだろうがBOOLだろうがYESNOだろうが
意味がboolであればboolと同じ扱い
意味がboolであればboolと同じ扱い
537デフォルトの名無しさん
2020/02/09(日) 17:48:58.88ID:6++kPC7v538デフォルトの名無しさん
2020/02/09(日) 17:50:49.32ID:GpaXptWq539デフォルトの名無しさん
2020/02/09(日) 17:55:11.50ID:J3Qn0niW540デフォルトの名無しさん
2020/02/09(日) 17:59:01.69ID:cYNa4VVg >>539
!(b != TRUE)。
!(b != TRUE)。
541デフォルトの名無しさん
2020/02/09(日) 18:02:21.32ID:GpaXptWq 普通はTRUEかFALSEしか入ってないんだよ
それ以外が入ってる可能性があるなら
普通TRUEがどうかの判断だけじゃダメじゃないか?
それ以外が入ってる可能性があるなら
普通TRUEがどうかの判断だけじゃダメじゃないか?
542デフォルトの名無しさん
2020/02/09(日) 18:05:49.02ID:GpaXptWq switch (b){
case FALSE:
...
case TRUE:
...
case ???
...
default
...
}
これで
case FALSE:
...
case TRUE:
...
case ???
...
default
...
}
これで
543デフォルトの名無しさん
2020/02/09(日) 18:07:19.16ID:ugWNThcV >>539
それは難しくいえば数学の集合論の話になる。
{0} と {非0} の二つの集合が有り、
if の条件式では、前者が偽、後者が真と評価される。
TRUEはどんな処理系であれ、必ず後者の集合の要素(元)になっていることだけは
保障されている。
なので、if ( b != 0 ) や、if (b) は正しいが、
if (b == TRUE) は絶対駄目、ということになる。
それは難しくいえば数学の集合論の話になる。
{0} と {非0} の二つの集合が有り、
if の条件式では、前者が偽、後者が真と評価される。
TRUEはどんな処理系であれ、必ず後者の集合の要素(元)になっていることだけは
保障されている。
なので、if ( b != 0 ) や、if (b) は正しいが、
if (b == TRUE) は絶対駄目、ということになる。
544デフォルトの名無しさん
2020/02/09(日) 18:09:46.56ID:GpaXptWq545デフォルトの名無しさん
2020/02/09(日) 18:10:45.32ID:ugWNThcV if ( b == TRUE ) は、この条件式自体の動作は問題ないが、
b が TRUE ではないが、真である何らかの値を持っていたときに破綻してしまう。
BOOL b と書いた場合、本人が書いたプログラムでは b は、必ず
TRUE か FALSE の二値に限って書くことになろうが、往々にして、
APIなどでは、「真」の意味で「非0」の値を返してくること関数が含まれて
しまっている。
だから、勘違いや混乱が起き易い。
そのため、if ( b == TRUE ) というのは、絶対にやめておいたほうが良い書き方
となる。
b が TRUE ではないが、真である何らかの値を持っていたときに破綻してしまう。
BOOL b と書いた場合、本人が書いたプログラムでは b は、必ず
TRUE か FALSE の二値に限って書くことになろうが、往々にして、
APIなどでは、「真」の意味で「非0」の値を返してくること関数が含まれて
しまっている。
だから、勘違いや混乱が起き易い。
そのため、if ( b == TRUE ) というのは、絶対にやめておいたほうが良い書き方
となる。
546デフォルトの名無しさん
2020/02/09(日) 18:16:58.01ID:GpaXptWq TRUE/FALSE以外を想定するなら
時と場合による
TRUE/FALSEしか想定しないなら
if (b) / if (!b)
と書くべき
時と場合による
TRUE/FALSEしか想定しないなら
if (b) / if (!b)
と書くべき
547デフォルトの名無しさん
2020/02/09(日) 18:19:53.44ID:TF4jiljH 昔VB6からWinAPI呼ぶときの注意点として本で読んだ気がする
それboolじゃないよね?とは思った
それboolじゃないよね?とは思った
548デフォルトの名無しさん
2020/02/09(日) 18:20:59.38ID:J3Qn0niW549デフォルトの名無しさん
2020/02/09(日) 18:29:21.05ID:J3Qn0niW >>546
排中律が成り立たないからFALSEでないことはTRUEを意味しない。
成功した場合にTRUE、失敗した場合にFALSEを返すという関数がある場合、成功したかどうかは
FALSEでないことではなくTRUEと一致するかどうかで判断しなければならない。
排中律が成り立たないからFALSEでないことはTRUEを意味しない。
成功した場合にTRUE、失敗した場合にFALSEを返すという関数がある場合、成功したかどうかは
FALSEでないことではなくTRUEと一致するかどうかで判断しなければならない。
550デフォルトの名無しさん
2020/02/09(日) 18:29:23.53ID:cYNa4VVg >>548
!(b != TRUE)。
!(b != TRUE)。
551デフォルトの名無しさん
2020/02/09(日) 18:30:08.13ID:aEgJYC9i552デフォルトの名無しさん
2020/02/09(日) 18:30:08.50ID:6++kPC7v553デフォルトの名無しさん
2020/02/09(日) 18:36:27.78ID:J3Qn0niW554デフォルトの名無しさん
2020/02/09(日) 18:42:52.19ID:cYNa4VVg いやちゃうねん。
555デフォルトの名無しさん
2020/02/09(日) 18:59:34.88ID:aEgJYC9i intの取り得る値の集合に対し、TRUEの定義が-93でありかつそれ以外は偽と解釈をせよと仕様に書いてあったら
さすがに(b == TRUE)とか(b != TRUE)書くことを現実の選択肢として考慮せざるおえない
もちろんそんな仕様が糞だが、仕様なのだからしようが無い
数学の本質は自由性にある、
さすがに(b == TRUE)とか(b != TRUE)書くことを現実の選択肢として考慮せざるおえない
もちろんそんな仕様が糞だが、仕様なのだからしようが無い
数学の本質は自由性にある、
556デフォルトの名無しさん
2020/02/09(日) 19:07:50.42ID:mORiFTgk557デフォルトの名無しさん
2020/02/09(日) 19:15:36.19ID:PT76WH2y FALSEは定数
TRUEは範囲で観測によって収束する
適性に乏しいやつには厳しいよな
TRUEは範囲で観測によって収束する
適性に乏しいやつには厳しいよな
558デフォルトの名無しさん
2020/02/09(日) 19:16:00.10ID:mORiFTgk boolからBOOLになってintになってた
559デフォルトの名無しさん
2020/02/09(日) 19:16:09.28ID:MeV8oXxA 集合B={FALSE=0,TRUE=1} の場合 !FALSE=TRUE だが
B'={FALSE=0,TRUE1=1,TRUE2=2,TRUE3=3} の場合
!FALSE={TRUE1,TRUE2,TRUE3} となる
しかし TRUE={TRUE1,TRUE2,TRUE3} と定義すると
B''={FALSE=0,TRUE} となり、同型B≡B'が示されるため、B'をboolとみなすことは可能である
ただし、比較演算子は集合として同値であるのか、集合に含まれるのかを示さなければならない
b⊂B'(≡B) のとき、 b=FALSE は一意だが、b=TRUE は b=1∩b=2∩b=3 を示す
B'={FALSE=0,TRUE1=1,TRUE2=2,TRUE3=3} の場合
!FALSE={TRUE1,TRUE2,TRUE3} となる
しかし TRUE={TRUE1,TRUE2,TRUE3} と定義すると
B''={FALSE=0,TRUE} となり、同型B≡B'が示されるため、B'をboolとみなすことは可能である
ただし、比較演算子は集合として同値であるのか、集合に含まれるのかを示さなければならない
b⊂B'(≡B) のとき、 b=FALSE は一意だが、b=TRUE は b=1∩b=2∩b=3 を示す
560デフォルトの名無しさん
2020/02/09(日) 19:17:37.19ID:mORiFTgk 数学関係ないのに数学ネタでひっぱってるヤツがいるな
IDは違うけど同じ人?
数学関係ないから
IDは違うけど同じ人?
数学関係ないから
561デフォルトの名無しさん
2020/02/09(日) 19:18:03.88ID:6++kPC7v562デフォルトの名無しさん
2020/02/09(日) 19:18:39.73ID:cYNa4VVg ちゃうねんちゃうねん。
563デフォルトの名無しさん
2020/02/09(日) 19:19:01.31ID:MeV8oXxA 訂正
b=1∩b=2∩b=3
→b=1∪b=2∪b=3
b=1∩b=2∩b=3
→b=1∪b=2∪b=3
564デフォルトの名無しさん
2020/02/09(日) 19:22:41.80ID:qoRTNAXH グローバル領域にインスタンスを作って、初期化はmain()の中でしたいとします。
で、初期化に必要な情報はmain()の中で初めて分かるとします。
こういうときってそのクラスのコンストラクタとしては何もしないものを作っておいて、初期化用の関数を別途用意するというのが普通ですか?
インスタンスの宣言だけしておいてコンストラクタは後で呼ぶなんてできないですよね?
で、初期化に必要な情報はmain()の中で初めて分かるとします。
こういうときってそのクラスのコンストラクタとしては何もしないものを作っておいて、初期化用の関数を別途用意するというのが普通ですか?
インスタンスの宣言だけしておいてコンストラクタは後で呼ぶなんてできないですよね?
565デフォルトの名無しさん
2020/02/09(日) 19:23:38.68ID:mORiFTgk ポインタにしとけ
566デフォルトの名無しさん
2020/02/09(日) 19:29:17.77ID:J3Qn0niW567デフォルトの名無しさん
2020/02/09(日) 19:30:00.78ID:aEgJYC9i std::unique_ptr<T>の出番
568デフォルトの名無しさん
2020/02/09(日) 19:30:50.97ID:bHnzUNQO apiの仕様見て適切に処理で終わる話だろこれ
569デフォルトの名無しさん
2020/02/09(日) 19:37:32.03ID:54+KBSAm optionalの出番だろ
570デフォルトの名無しさん
2020/02/09(日) 19:39:43.34ID:OliK3lJl >>568
同意
同意
571デフォルトの名無しさん
2020/02/09(日) 19:45:02.77ID:6++kPC7v572デフォルトの名無しさん
2020/02/09(日) 19:45:29.20ID:6++kPC7v >>568に一票
573デフォルトの名無しさん
2020/02/09(日) 19:47:47.73ID:mORiFTgk もともとはboolの話だったのに
574デフォルトの名無しさん
2020/02/09(日) 19:49:14.41ID:VD5bohdG GetGlyphOutline などで文字画像を取り出そうとすると、フォントが持ってない文字は代わりの文字を出力してくる。
(例えば、昔の毛筆フォントでは「(はしご高)」などはMSゴシックになる。)
これを抑制したいので、そのフォントがグリフデータを持っているかどうか、調べる方法はありますでしょうか?
(例えば、昔の毛筆フォントでは「(はしご高)」などはMSゴシックになる。)
これを抑制したいので、そのフォントがグリフデータを持っているかどうか、調べる方法はありますでしょうか?
575デフォルトの名無しさん
2020/02/09(日) 19:50:25.08ID:mORiFTgk C++の相談?
576デフォルトの名無しさん
2020/02/09(日) 19:52:53.59ID:J3Qn0niW577デフォルトの名無しさん
2020/02/09(日) 19:54:35.07ID:bHnzUNQO >>574
ここよりwindows apiのスレのがいいんじゃないかな
ここよりwindows apiのスレのがいいんじゃないかな
578デフォルトの名無しさん
2020/02/09(日) 20:00:40.91ID:6++kPC7v >>576
もしかして(ことが多い)っていう意味もわかってないのか?
もしかして(ことが多い)っていう意味もわかってないのか?
579デフォルトの名無しさん
2020/02/09(日) 20:05:04.78ID:54+KBSAm win32は変な仕様多いからAPIの仕様確認しないと罠にはまる
580デフォルトの名無しさん
2020/02/09(日) 20:05:21.07ID:J3Qn0niW 多い方に合わせろって話でもないだろう。
>>568の通りそれぞれの仕様に合わせて適切に扱えってこと。
>>568の通りそれぞれの仕様に合わせて適切に扱えってこと。
581デフォルトの名無しさん
2020/02/09(日) 20:05:58.49ID:PT76WH2y >>579
ほんこれ
ほんこれ
582デフォルトの名無しさん
2020/02/09(日) 20:07:59.65ID:54+KBSAm GetModuleFileNameとか仕様作った奴のセンスを疑う
583デフォルトの名無しさん
2020/02/09(日) 20:20:16.24ID:6++kPC7v584デフォルトの名無しさん
2020/02/09(日) 20:30:08.24ID:J3Qn0niW なら問題ないケースもあることを理解してるわけだ。だとすると>>552で指摘してたのはなんだろうと。
585デフォルトの名無しさん
2020/02/09(日) 20:34:19.93ID:6++kPC7v >>584
えっ?
まだ(ことが多い)ってわざわざ書いてる意味がわからんのか?
まともな奴と会話してる時ならいちいち書かないんだが、ネット掲示板なのでわけわからん奴に絡まれないようにわざわざ書いたのに想定外の低能さんなの?
えっ?
まだ(ことが多い)ってわざわざ書いてる意味がわからんのか?
まともな奴と会話してる時ならいちいち書かないんだが、ネット掲示板なのでわけわからん奴に絡まれないようにわざわざ書いたのに想定外の低能さんなの?
586デフォルトの名無しさん
2020/02/09(日) 20:46:39.77ID:J3Qn0niW587デフォルトの名無しさん
2020/02/09(日) 20:52:41.00ID:mORiFTgk bがTRUEと一致する条件の話はしてなくて
boolに対するif文をどう書くかの話だろ
APIの使い方なら他スレでやって
boolに対するif文をどう書くかの話だろ
APIの使い方なら他スレでやって
588デフォルトの名無しさん
2020/02/09(日) 20:55:58.33ID:PT76WH2y 余所でやれって、APIと言語仕様のズレの話だろ
正しい理解はどのようなものかという興味は
スレ違いじゃねえぞ
正しい理解はどのようなものかという興味は
スレ違いじゃねえぞ
589デフォルトの名無しさん
2020/02/09(日) 21:03:28.51ID:mORiFTgk APIの正しい理解ならAPIのドキュメントを見れば良いのでは?
もともとのboolの話とは全く関係ないですね
もともとのboolの話とは全く関係ないですね
590デフォルトの名無しさん
2020/02/09(日) 21:05:18.68ID:6++kPC7v591デフォルトの名無しさん
2020/02/09(日) 21:05:59.85ID:J3Qn0niW >>533に書いたが、boolじゃなくてBOOLの話をしているのになぜかboolと混同する人が
592デフォルトの名無しさん
2020/02/09(日) 21:06:45.54ID:mORiFTgk boolの話題でbool以外を語るのはこんな感じ
内部的に固定小数点なfloatライブラリもあるぞ
内部的にvectorなmapライブラリもあるぞ
内部的に固定小数点なfloatライブラリもあるぞ
内部的にvectorなmapライブラリもあるぞ
593デフォルトの名無しさん
2020/02/09(日) 21:07:53.15ID:mORiFTgk BOOLも同じ
意味的なBOOLが前提
それ以外は特殊事情
意味的なBOOLが前提
それ以外は特殊事情
594デフォルトの名無しさん
2020/02/09(日) 21:21:02.28ID:J3Qn0niW595デフォルトの名無しさん
2020/02/09(日) 21:23:11.71ID:6++kPC7v596い
2020/02/09(日) 21:32:30.02ID:Z95s67CZ boolができるまでは
if (!!b)
こういうイディオムもありましてね
if (!!b)
こういうイディオムもありましてね
597デフォルトの名無しさん
2020/02/09(日) 21:42:44.86ID:J3Qn0niW >>576を理解しているなら
>bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
このような判断がが必要な場合があることも理解しているはずだろうが、
結局この質問には答えられない(答えたくない)ようだな。
>bがTRUEと一致するかどうか判断するのに他にどういう書き方をするというんだろう?
このような判断がが必要な場合があることも理解しているはずだろうが、
結局この質問には答えられない(答えたくない)ようだな。
598デフォルトの名無しさん
2020/02/09(日) 22:05:36.89ID:6++kPC7v まだやってるのかよw
無能無限ループ乙
無能無限ループ乙
599デフォルトの名無しさん
2020/02/09(日) 22:07:19.29ID:EoI3r47q あいかわらずしょーもない話題だと盛り上がるのな。
600い
2020/02/09(日) 22:16:06.44ID:Z95s67CZ goto、マクロ、BOOL
全部C言語の範疇なんだよなw
おじさんがんばりすぎ
全部C言語の範疇なんだよなw
おじさんがんばりすぎ
601デフォルトの名無しさん
2020/02/09(日) 22:18:57.48ID:aEgJYC9i つか真理値の型であるbool型および
真理値の型としての名前を与えられたBOOL型の議論が
Win32 APIの仕様という現実に汚染されてぐちゃらけてますな
TRUEに幅が有る、なんていうおかしいことを言い出す香具師まで出る始末、!
真理値の型としての名前を与えられたBOOL型の議論が
Win32 APIの仕様という現実に汚染されてぐちゃらけてますな
TRUEに幅が有る、なんていうおかしいことを言い出す香具師まで出る始末、!
602デフォルトの名無しさん
2020/02/09(日) 22:23:19.21ID:J3Qn0niW 本当は昨日で終わっていたはずの話題なんだがな。
604デフォルトの名無しさん
2020/02/09(日) 22:33:23.30ID:EiJfhZVq >>602
お前が言うなよww
お前が言うなよww
605デフォルトの名無しさん
2020/02/09(日) 22:33:54.63ID:aEgJYC9i 一般論として、APIの呼び出しが成功しました、という情報にはそれ以上幅も糞も無い(成功した要因など知っても無駄
から、成功=TRUE、失敗=FALSEとする割付の下では、TRUEこそ単一値として規定されるべきブツに他ならない
よって、一般論としては b == TRUEは言うほど糞ではないはずであった、
から、成功=TRUE、失敗=FALSEとする割付の下では、TRUEこそ単一値として規定されるべきブツに他ならない
よって、一般論としては b == TRUEは言うほど糞ではないはずであった、
606デフォルトの名無しさん
2020/02/09(日) 22:37:13.53ID:aEgJYC9i まあエラー要因を複数種類返したい、ということなら
成功判定は b == SUCCEEDEDでSUCCEEDEDでなかったらエラーコードが入っている、という
INTかDWORD返しがストレートやったがな!(成功時非0を返す、とか言われるよりは
成功判定は b == SUCCEEDEDでSUCCEEDEDでなかったらエラーコードが入っている、という
INTかDWORD返しがストレートやったがな!(成功時非0を返す、とか言われるよりは
607デフォルトの名無しさん
2020/02/09(日) 22:42:00.12ID:VD5bohdG if( b == TRUE ) って、結局 if( b ) ってことだろ。
608デフォルトの名無しさん
2020/02/09(日) 22:45:14.84ID:Z95s67CZ クソワロタ
口調も激変
口調も激変
609デフォルトの名無しさん
2020/02/10(月) 00:02:35.66ID:SkPzv01G >>555
ヘッダファイルの中で TRUE の値が -93 に #define で定義されていたとしても、C/C++ の仕様だと、0だけが偽で、0以外は真であることだけはANSI Cで決まっているので、それはない。
ヘッダファイルの中で TRUE の値が -93 に #define で定義されていたとしても、C/C++ の仕様だと、0だけが偽で、0以外は真であることだけはANSI Cで決まっているので、それはない。
610デフォルトの名無しさん
2020/02/10(月) 00:06:15.78ID:hYCIpnsp つまり、
#define TRUE (-93)
はANSI Cの規格上非合法だからそれはない
#define TRUE (-93)
はANSI Cの規格上非合法だからそれはない
611デフォルトの名無しさん
2020/02/10(月) 00:07:32.18ID:SkPzv01G >>548
その場合で、かつ、b が TRUE に一致するもの以外を除去したいなら
if ( b == TRUE ) と書く以外には無い。
しかし、Win32 API の仕様でも、そのようなことを判定する必要があることはない
ように通常、作られている。
何人かが指摘しているように、FALSE との判定は良いのだ。
TRUE との判定はまずい。
その場合で、かつ、b が TRUE に一致するもの以外を除去したいなら
if ( b == TRUE ) と書く以外には無い。
しかし、Win32 API の仕様でも、そのようなことを判定する必要があることはない
ように通常、作られている。
何人かが指摘しているように、FALSE との判定は良いのだ。
TRUE との判定はまずい。
612デフォルトの名無しさん
2020/02/10(月) 00:08:23.83ID:hYCIpnsp gotoといいBOOLといい、闇が深いな
裾野が広がれば、底辺は底なしカヨ、
裾野が広がれば、底辺は底なしカヨ、
613デフォルトの名無しさん
2020/02/10(月) 00:08:59.15ID:hYCIpnsp614デフォルトの名無しさん
2020/02/10(月) 00:39:11.13ID:NGNAXTbr 【IT】不動の人気を誇る「Python」、評価が二分される「Java」「JavaScript」
https://egg.5ch.net/test/read.cgi/bizplus/1581244420/
>JavaScript、Java、Python、「C++」「C」が特に多くの人に習得されたプログラミング言語だった
https://egg.5ch.net/test/read.cgi/bizplus/1581244420/
>JavaScript、Java、Python、「C++」「C」が特に多くの人に習得されたプログラミング言語だった
615デフォルトの名無しさん
2020/02/10(月) 01:06:29.16ID:2gVSY1CN C++11規格でJavaやC#の優位性がかなり失われた気がするわ。
616デフォルトの名無しさん
2020/02/10(月) 01:07:48.45ID:Ro8qON5e c#ならまだしもjavの優位性って?
617デフォルトの名無しさん
2020/02/10(月) 01:35:35.28ID:SkPzv01G618デフォルトの名無しさん
2020/02/10(月) 01:38:59.61ID:SkPzv01G >>617
Javaは、GUIも出来たしブラウザ上でも動いたし、他に代わるものがなかったので
それしか選択肢がなかったために実際に使った人は多かったはず。
JSも、HTMLを使おうとした際にそれしか動的言語は無かったから同様。
一方で、Pythonに関しては、似たようなものは他にたくさんあるし、
自分以外の人に使ってもらうにも実行環境のインストールが必要だし、
Javaと違って互換性にも問題あるので使いにくい。
Javaは、GUIも出来たしブラウザ上でも動いたし、他に代わるものがなかったので
それしか選択肢がなかったために実際に使った人は多かったはず。
JSも、HTMLを使おうとした際にそれしか動的言語は無かったから同様。
一方で、Pythonに関しては、似たようなものは他にたくさんあるし、
自分以外の人に使ってもらうにも実行環境のインストールが必要だし、
Javaと違って互換性にも問題あるので使いにくい。
619デフォルトの名無しさん
2020/02/10(月) 01:43:33.69ID:SkPzv01G >>618
つまり、Pythonの評価が高いのは、前評判だけで実際に使った人が少ないから。
つまり、Pythonの評価が高いのは、前評判だけで実際に使った人が少ないから。
620デフォルトの名無しさん
2020/02/10(月) 03:53:35.38ID:rxX2x5Pb んなわけない。
621デフォルトの名無しさん
2020/02/10(月) 04:03:09.14ID:2gVSY1CN Pythonはtypoがつらい。
622デフォルトの名無しさん
2020/02/10(月) 08:01:35.21ID:staO5LAL ごちゃごちゃいうよりまずはいっぺんオッPythonで
そこそこの規模のプログラム(最低1000行以上)かいてみりゃわかる
はっきりいってクソだよ
あんなもんで巨大なプログラムはとても書けたもんじゃない
そこそこの規模のプログラム(最低1000行以上)かいてみりゃわかる
はっきりいってクソだよ
あんなもんで巨大なプログラムはとても書けたもんじゃない
623デフォルトの名無しさん
2020/02/10(月) 08:53:11.04ID:GJT/1Bxa 自分で1000行も書かなくても、どこかの誰かが書いてくれたライブラリを呼び出せば
望んだ仕事をやってくれるって部分がPythonの好まれる理由じゃないのん?
C++を使う人は、Pythonの流行を裏から支えてる感じで。
望んだ仕事をやってくれるって部分がPythonの好まれる理由じゃないのん?
C++を使う人は、Pythonの流行を裏から支えてる感じで。
624デフォルトの名無しさん
2020/02/10(月) 10:10:17.80ID:hDJC6jsQ pythonで1000行くらいで根をあげてるようじゃ
どんなコード見ても文句言い出すだろ。。仕事にならんわ。
どんなコード見ても文句言い出すだろ。。仕事にならんわ。
625デフォルトの名無しさん
2020/02/10(月) 10:24:50.55ID:JgTqubiS インデントをきっちり合わせないといけないので、Cの適当なインデントにうんざりしてる人にはむしろ合うかもしれない
でも関数やブロックが大きくなると、同一階層を探すのがつらくなるので、適切なブロック、関数分けが必須になる
いずれにしても、神経質な人には合ってるのかもしれない
でも関数やブロックが大きくなると、同一階層を探すのがつらくなるので、適切なブロック、関数分けが必須になる
いずれにしても、神経質な人には合ってるのかもしれない
626デフォルトの名無しさん
2020/02/10(月) 10:46:13.48ID:oMyz9pGE 機械学習ならpythonほぼ必須なんだが
いまだにやったことないとか
ロートルなのを白状してるようなもん
いまだにやったことないとか
ロートルなのを白状してるようなもん
627デフォルトの名無しさん
2020/02/10(月) 11:15:12.10ID:yW0oU9fF 変数がどんな型にも化けられる変態言語
628デフォルトの名無しさん
2020/02/10(月) 11:25:16.00ID:8A84p9rG pythonがいいとは思わないけど、perlがクソすぎるので相対的にマシだから流行ってる
それ以上の理由はないと思う
それ以上の理由はないと思う
629デフォルトの名無しさん
2020/02/10(月) 11:37:39.28ID:oMyz9pGE perlの代替っていつの時代の話だよ
お前完全に取り残されてるぞ
お前完全に取り残されてるぞ
630デフォルトの名無しさん
2020/02/10(月) 11:50:23.10ID:SkPzv01G Pythonは、スマホで動かすのは難しいらしい。
少なくともスクリプト言語として動かすのは困難。
デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。
少なくともスクリプト言語として動かすのは困難。
デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。
631デフォルトの名無しさん
2020/02/10(月) 11:55:31.13ID:SkPzv01G >>630
Pythonのせいではなく、Perlのようなスクリプト言語がそもそも使えないという
スマホの限界だとは思う。
スマホでも使えることは使えても、IDEのような専用環境だけで使えるだけでは
本来のスクリプト言語としては使い物にならない。
このスマホの時代に Perl, Python, Ruby は合わないかも。
Pythonのせいではなく、Perlのようなスクリプト言語がそもそも使えないという
スマホの限界だとは思う。
スマホでも使えることは使えても、IDEのような専用環境だけで使えるだけでは
本来のスクリプト言語としては使い物にならない。
このスマホの時代に Perl, Python, Ruby は合わないかも。
632デフォルトの名無しさん
2020/02/10(月) 11:58:33.88ID:SkPzv01G iOS, Android 共通にスクリプト的なことをやりたいなら、もう、スクリプト言語は諦めて、
C++で書いておいて iOSではSwift とリンクし、Androidでは、JNIを使ってJavaから
呼び出すほうがずっと簡単。
なお、AndroidならシェルスクリプトがPythonなんかより遥かに簡単に使える。
C++で書いておいて iOSではSwift とリンクし、Androidでは、JNIを使ってJavaから
呼び出すほうがずっと簡単。
なお、AndroidならシェルスクリプトがPythonなんかより遥かに簡単に使える。
633はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 12:13:49.40ID:gblDkkh1 >>625
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる
これの二択だったら前者の方が「きっちり」してると思うわ。
まあインデントの付け方にいくつかの選択肢がある点はやりづらい面も
あるかもしれんが、自由度と統一性は両立できないもんだしな。
Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる
これの二択だったら前者の方が「きっちり」してると思うわ。
まあインデントの付け方にいくつかの選択肢がある点はやりづらい面も
あるかもしれんが、自由度と統一性は両立できないもんだしな。
Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?
634デフォルトの名無しさん
2020/02/10(月) 12:34:04.03ID:oMyz9pGE pythonをswift, javaなんかと比較してる人は
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い
635はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 12:51:05.23ID:gblDkkh1 おっ、煽り入りました〜〜
636デフォルトの名無しさん
2020/02/10(月) 13:26:43.90ID:NGNAXTbr ビジネス提案おじさん
637デフォルトの名無しさん
2020/02/10(月) 14:18:49.02ID:SkPzv01G638デフォルトの名無しさん
2020/02/10(月) 17:30:56.95ID:rxX2x5Pb 研究者が使うのにPythonは良い選択なんじゃないの。
事務作業にVBAが良い選択なのと同様に。
事務作業にVBAが良い選択なのと同様に。
639デフォルトの名無しさん
2020/02/10(月) 17:40:26.33ID:pqZ9DEAl 今さらですが、そもそもWin32のFALSEって、0であることは保証されてるんですか?
BOOL b = FALSE;
if (b)
{
ここに来ないことは保証されてるんですか?
}
BOOL b = FALSE;
if (b)
{
ここに来ないことは保証されてるんですか?
}
640デフォルトの名無しさん
2020/02/10(月) 17:42:58.97ID:SkPzv01G >>639
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。
641デフォルトの名無しさん
2020/02/10(月) 17:43:39.45ID:SkPzv01G >>639
当然、そこに来ないことも保障される。
当然、そこに来ないことも保障される。
642デフォルトの名無しさん
2020/02/10(月) 17:52:19.21ID:M5G7J8Pl643はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 18:04:03.15ID:gblDkkh1 >>640
現実にはそうだってのならわかるが、質問は保証があるかどうかなんだから、根拠を添えろよ。
少なくとも現状の WinDef.h では FALSE は 0 、 TRUE は 1 と定義されているのはわかったし、
常識的に考えればこれが変更されることはないが、
私はマイクロソフトのドキュメントからこれを裏付けるような文言を見つけられなかった。
BOOL が int であることは発見できた。
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
should be TRUE or FALSE って書いてあるのにこれに反するような API があるのはアレだよな……。
現実にはそうだってのならわかるが、質問は保証があるかどうかなんだから、根拠を添えろよ。
少なくとも現状の WinDef.h では FALSE は 0 、 TRUE は 1 と定義されているのはわかったし、
常識的に考えればこれが変更されることはないが、
私はマイクロソフトのドキュメントからこれを裏付けるような文言を見つけられなかった。
BOOL が int であることは発見できた。
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
should be TRUE or FALSE って書いてあるのにこれに反するような API があるのはアレだよな……。
644デフォルトの名無しさん
2020/02/10(月) 18:06:40.24ID:AZ4KAaI2 システムハンガリアンもそうだけど明白な違反が堂々と放置されているからなあ
645デフォルトの名無しさん
2020/02/10(月) 18:08:58.46ID:SkPzv01G646デフォルトの名無しさん
2020/02/10(月) 18:10:00.98ID:SkPzv01G 数学が大事です。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。
647デフォルトの名無しさん
2020/02/10(月) 18:13:48.89ID:M5G7J8Pl 昨日の奴かw
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。
648デフォルトの名無しさん
2020/02/10(月) 18:19:36.47ID:1F9oSbm6 windows apiのスレでやってくれよ
649デフォルトの名無しさん
2020/02/10(月) 18:21:23.11ID:1D/jLqBa650デフォルトの名無しさん
2020/02/10(月) 18:22:28.83ID:SkPzv01G このスレには、失礼ですが、はちみつさんも含め、数学に弱い人が多いようです。
651デフォルトの名無しさん
2020/02/10(月) 18:23:02.20ID:SkPzv01G >>649
いや、むしろ逆に現実では天才と呼ばれています。
いや、むしろ逆に現実では天才と呼ばれています。
652デフォルトの名無しさん
2020/02/10(月) 18:25:05.67ID:SkPzv01G 仕様書にすべては書いてなくても、数学で考えれば絶対であることが証明できる事柄があるのです。
今回のもその一例です。
今回のもその一例です。
653はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 18:25:15.66ID:gblDkkh1 ああ、荒らしに来ただけか。
まぜっかえすにしてももうちょっとマシなこと言えよ。
まぜっかえすにしてももうちょっとマシなこと言えよ。
654デフォルトの名無しさん
2020/02/10(月) 18:27:13.76ID:rZ6GQco7 東大数学科卒だが
>>650は頭が弱いと思う
>>650は頭が弱いと思う
655デフォルトの名無しさん
2020/02/10(月) 18:27:37.23ID:rxX2x5Pb マクロはほとんど書く必要なくなったよね。
656デフォルトの名無しさん
2020/02/10(月) 18:27:43.95ID:SkPzv01G 失礼ですが、はちみつ氏は、C++の仕様には詳しいですが、それ以外は結構間違っています。
657デフォルトの名無しさん
2020/02/10(月) 18:29:09.02ID:rZ6GQco7658デフォルトの名無しさん
2020/02/10(月) 18:29:40.36ID:SkPzv01G >>654
でも現実に私は天才と言われています。
でも現実に私は天才と言われています。
659デフォルトの名無しさん
2020/02/10(月) 18:30:41.13ID:rZ6GQco7 数学の実績は?
660デフォルトの名無しさん
2020/02/10(月) 18:31:14.06ID:SkPzv01G661デフォルトの名無しさん
2020/02/10(月) 18:33:21.87ID:rZ6GQco7 学科は?
662デフォルトの名無しさん
2020/02/10(月) 18:33:32.23ID:M5G7J8Pl まとめるとこう。
1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある
1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある
663デフォルトの名無しさん
2020/02/10(月) 18:34:10.03ID:SkPzv01G ここは、学歴も実績も嘘を付けてしまうので参考になりません。
東大数学科と言うのもたぶんデタラメでしょう。
東大数学科と言うのもたぶんデタラメでしょう。
664デフォルトの名無しさん
2020/02/10(月) 18:34:25.57ID:rZ6GQco7 なんでWindows前提?
665デフォルトの名無しさん
2020/02/10(月) 18:37:31.54ID:rZ6GQco7 排中律君も数学君と同じ人かと思った
違うのかな?
普通の言葉で書こうよ
書けるでしょ
違うのかな?
普通の言葉で書こうよ
書けるでしょ
666はちみつ餃子 ◆8X2XSCHEME
2020/02/10(月) 19:01:26.22ID:gblDkkh1 >>664
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。
true であれ TRUE であれ、それと == で比較するのが罠になりやすいっつーのは
罠になりやすい部分として有名すぎて逆によく知られている常識だが、
絶対不変の定理みたいに言い始めたやつがいたから変なことになってるんだよ。
現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。
true であれ TRUE であれ、それと == で比較するのが罠になりやすいっつーのは
罠になりやすい部分として有名すぎて逆によく知られている常識だが、
絶対不変の定理みたいに言い始めたやつがいたから変なことになってるんだよ。
現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?
667デフォルトの名無しさん
2020/02/10(月) 19:02:19.07ID:VRCQc/iz BOOLはWindows APIでしか使わないと思ってるから話が通じないんだな
数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?
数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?
668デフォルトの名無しさん
2020/02/10(月) 19:04:47.41ID:4ZzuDNO4669デフォルトの名無しさん
2020/02/10(月) 19:06:03.16ID:VRCQc/iz BOOLは非常に広い環境で使われていて
その多くはTRUE/FALSEの2値を示す型として使われる
こういう普通の環境では
if (b) / if (!b)
で判断するのが最良
そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い
その多くはTRUE/FALSEの2値を示す型として使われる
こういう普通の環境では
if (b) / if (!b)
で判断するのが最良
そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い
670デフォルトの名無しさん
2020/02/10(月) 19:06:46.57ID:VRCQc/iz Wimdows APIに限定した話ならここですべきではない
他へ
他へ
671デフォルトの名無しさん
2020/02/10(月) 19:33:07.36ID:M5G7J8Pl つまり、Windowsで>>439のように書いていたのをWindowsのBOOLを知らずに否定しちゃう人、
というネタそのものを体現してくれたわけだな。
というネタそのものを体現してくれたわけだな。
672デフォルトの名無しさん
2020/02/10(月) 19:35:42.65ID:Ro8qON5e BOOLについて議論するならどのBOOLか限定しないと
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし
負論理の入出力ポート読み書きする値だとかで順番も重要だったりして
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし
負論理の入出力ポート読み書きする値だとかで順番も重要だったりして
673デフォルトの名無しさん
2020/02/10(月) 19:47:34.98ID:VRCQc/iz674デフォルトの名無しさん
2020/02/10(月) 19:56:01.41ID:M5G7J8Pl そもそも、特殊じゃない「普通の環境」のBOOLって何ぞ?
typedef bool BOOL; とかw
typedef bool BOOL; とかw
675デフォルトの名無しさん
2020/02/10(月) 20:01:48.67ID:rxX2x5Pb https://ideone.com/T9gWWT
こうなるので、負の型にキャストするのが良いんですかね?
こうなるので、負の型にキャストするのが良いんですかね?
676デフォルトの名無しさん
2020/02/10(月) 20:25:38.47ID:L7QZkeGE なんでBOOLの話をしてんだよジジイども
677デフォルトの名無しさん
2020/02/10(月) 20:46:16.46ID:te1zn0Q+ 標準にはboolと_Boolしかないんだからそれ以外はどこぞの馬の骨が好き勝手に決めただけの独自定義
そのライブラリのマニュアル熟読しろでこの話は終わり
そのライブラリのマニュアル熟読しろでこの話は終わり
678デフォルトの名無しさん
2020/02/10(月) 21:07:46.28ID:oMyz9pGE679デフォルトの名無しさん
2020/02/10(月) 21:11:10.36ID:dan9Jlhp ナウでヤングな話題よろ
680デフォルトの名無しさん
2020/02/10(月) 21:30:33.43ID:Ui+QSiGG じゃあboolに戻すけど
if (b == true)
これ書く異常者は一定数おるわな
if (b == true)
これ書く異常者は一定数おるわな
682デフォルトの名無しさん
2020/02/10(月) 21:37:09.03ID:AZ4KAaI2 if (b) で済むのを
if (b == true) と書くのは
if (b == true == true) と書く異常者と同じ
きりねえって話
if (b == true) と書くのは
if (b == true == true) と書く異常者と同じ
きりねえって話
683デフォルトの名無しさん
2020/02/10(月) 21:38:01.11ID:AZ4KAaI2 括弧ねえと読めねえ「異常者」出てこいw
684デフォルトの名無しさん
2020/02/10(月) 21:49:47.77ID:rxX2x5Pb >>678
ちゃうねん。
ちゃうねん。
685デフォルトの名無しさん
2020/02/10(月) 21:51:16.94ID:oMyz9pGE >>683
つまんないことでイキんなカス
つまんないことでイキんなカス
686デフォルトの名無しさん
2020/02/10(月) 21:51:26.11ID:M5G7J8Pl bool b;
if (b == true) // コードスメルではあるがバグではない
BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による
if (b == true) // コードスメルではあるがバグではない
BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による
687デフォルトの名無しさん
2020/02/10(月) 21:53:08.25ID:AZ4KAaI2 >>685
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ
688デフォルトの名無しさん
2020/02/10(月) 21:53:54.97ID:AZ4KAaI2 おまえみたいの「いちびり」って言うんだけど意味わかる?w
>>682
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない
というか、あなたの「異常」の定義が異常なのでは?
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない
というか、あなたの「異常」の定義が異常なのでは?
>>688
いちびり、とは、あなた、関西人ですなぁ
いちびり、とは、あなた、関西人ですなぁ
691デフォルトの名無しさん
2020/02/10(月) 22:02:36.14ID:AZ4KAaI2 >>689
正常と異常の境をおまえさんはどこだと思っている?
正常と異常の境をおまえさんはどこだと思っている?
692デフォルトの名無しさん
2020/02/10(月) 22:02:53.98ID:VRCQc/iz693デフォルトの名無しさん
2020/02/10(月) 22:03:55.09ID:AZ4KAaI2694デフォルトの名無しさん
2020/02/10(月) 22:04:40.63ID:AZ4KAaI2 >>692
大文字のBOOLを使う「非常に多くの環境」とは?
大文字のBOOLを使う「非常に多くの環境」とは?
695デフォルトの名無しさん
2020/02/10(月) 22:06:02.65ID:VRCQc/iz >531や>>682が異常とは思えないって
まじかQZ
まじかQZ
696デフォルトの名無しさん
2020/02/10(月) 22:07:56.51ID:M5G7J8Pl697デフォルトの名無しさん
2020/02/10(月) 22:14:01.58ID:VRCQc/iz 本当に知らないんだ
まじか
まじか
698デフォルトの名無しさん
2020/02/10(月) 22:22:07.37ID:4ZzuDNO4 >>697
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ
699デフォルトの名無しさん
2020/02/10(月) 22:23:41.11ID:1F9oSbm6 非常に多いなら具体例2、3あげて終わりでしょ
700デフォルトの名無しさん
2020/02/10(月) 22:24:53.62ID:M5G7J8Pl もう自分で何を言っているのかわからなくなっているんだろうな。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で
if (b == TRUE)
これが正しいと言えるかどうかはその定義次第だということになるのに。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で
if (b == TRUE)
これが正しいと言えるかどうかはその定義次第だということになるのに。
701デフォルトの名無しさん
2020/02/10(月) 22:29:19.34ID:TAH0RZ5f 俺の狭い経験だと
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるのかな?
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるのかな?
702デフォルトの名無しさん
2020/02/10(月) 22:33:34.58ID:PZnoEIEf −1というか全ビットonは何かで見た
703デフォルトの名無しさん
2020/02/10(月) 22:50:32.94ID:Qny4UpdU windef.hのFALSEが-1とかに変更されたら、既存のソースは崩壊だろうな
704デフォルトの名無しさん
2020/02/10(月) 23:14:46.53ID:zaYnGTVS !FALSE
705デフォルトの名無しさん
2020/02/10(月) 23:38:01.28ID:yW0oU9fF typedef unsigned BOOL:1;
ならまだ救いがあった
なんでint型にしてんだろうな
ならまだ救いがあった
なんでint型にしてんだろうな
706デフォルトの名無しさん
2020/02/11(火) 00:40:44.45ID:wwgXq7Q5 >>705
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?
707デフォルトの名無しさん
2020/02/11(火) 01:18:20.91ID:wwgXq7Q5 >>703
FALSEは絶対的に0のまま。
FALSEは絶対的に0のまま。
708デフォルトの名無しさん
2020/02/11(火) 01:20:55.07ID:wwgXq7Q5 もしかしたら、Rubyが、0をtrueと解釈してしまうことから変なことを思ってる
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
709デフォルトの名無しさん
2020/02/11(火) 02:07:59.10ID:iFdutQCH あれ?
もしかして私・・また同じ日を繰り返してる・・??
もしかして私・・また同じ日を繰り返してる・・??
710デフォルトの名無しさん
2020/02/11(火) 02:12:10.45ID:lTJc7ZeR まだやってんのかお前ら
ゲハ厨みたいなスレだな
ゲハ厨みたいなスレだな
711デフォルトの名無しさん
2020/02/11(火) 02:43:47.12ID:wwgXq7Q5712デフォルトの名無しさん
2020/02/11(火) 02:58:41.73ID:f/mZFEPY >>681
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね
713デフォルトの名無しさん
2020/02/11(火) 03:04:36.42ID:wwgXq7Q5 >>712
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。
714デフォルトの名無しさん
2020/02/11(火) 03:08:16.20ID:wwgXq7Q5 >>713
他の言語の場合、例えば x, y が整数型の場合、
x == y
とした結果の型が bool 型。
そして、if の条件式に入れられるのは bool 型のみだったりする。
だから、もともと b が bool 型なのに、敢えて b == true と判定して
また bool 型に「直して」しまうのはとても奇妙な感じになる。
その文化との兼ね合いから、C/C++ でも、b が BOOL 型の場合は、
if (b) とするのが美しく見える。
他の言語の場合、例えば x, y が整数型の場合、
x == y
とした結果の型が bool 型。
そして、if の条件式に入れられるのは bool 型のみだったりする。
だから、もともと b が bool 型なのに、敢えて b == true と判定して
また bool 型に「直して」しまうのはとても奇妙な感じになる。
その文化との兼ね合いから、C/C++ でも、b が BOOL 型の場合は、
if (b) とするのが美しく見える。
715デフォルトの名無しさん
2020/02/11(火) 03:33:01.69ID:AiNLffgv MISRA-C でも、if( 変数 )で、変数が実質的にブール型の場合は、これでOK
int a = ( 5 < 10 );
printf( "%d", a ); /* 1 */
if( 5 < 10 ) と、if( a ) は同じ意味。
a は、実質的にブール型
int a = ( 5 < 10 );
printf( "%d", a ); /* 1 */
if( 5 < 10 ) と、if( a ) は同じ意味。
a は、実質的にブール型
716デフォルトの名無しさん
2020/02/11(火) 06:36:51.44ID:DrkniQZr bool型が存在しない時代に何故bool型になるのか
>>695
異常を「コンパイラがコンパイルできない」と定義していますから
異常を「コンパイラがコンパイルできない」と定義していますから
>>712
コンパイルが通るんだったら異常ではないのでは?
コンパイルが通るんだったら異常ではないのでは?
720デフォルトの名無しさん
2020/02/11(火) 08:29:09.76ID:lXsf9fbV 簡潔過ぎて分かりにくいって何?
if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?
if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?
721デフォルトの名無しさん
2020/02/11(火) 08:33:12.52ID:lXsf9fbV もしかして
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?
722デフォルトの名無しさん
2020/02/11(火) 08:56:04.07ID:tUwi24Vl そりゃ
if (a == 42)
よりも
if (a == 42 == true)
のほうが見やすいし
if (a == 42 == true != false)
のほうがさらに見やすいのが異常者
if (a == 42)
よりも
if (a == 42 == true)
のほうが見やすいし
if (a == 42 == true != false)
のほうがさらに見やすいのが異常者
723デフォルトの名無しさん
2020/02/11(火) 08:58:48.06ID:lXsf9fbV カッコも付けないと見にくいよな
if (((a == 42) == true) != false)
if (((a == 42) == true) != false)
724デフォルトの名無しさん
2020/02/11(火) 09:09:46.71ID:Kcy+Q8b9 どれだけ冗長に書けるか選手権?
725デフォルトの名無しさん
2020/02/11(火) 09:15:23.55ID:oAfdlMqH QZは変なこだわりに固執するやつだから、一般的な感覚とか常識とかについて議論しようとしてもそもそも議論が噛み合わないし、スレを無駄に汚すだけ
726デフォルトの名無しさん
2020/02/11(火) 09:21:24.68ID:tUwi24Vl if (true == true == true == b == true)
if (true == b == true == b == true)
int *p = &*&*(int *)&*&*&*&*&*(int *)&a;
if (true == b == true == b == true)
int *p = &*&*(int *)&*&*&*&*&*(int *)&a;
727デフォルトの名無しさん
2020/02/11(火) 09:34:27.73ID:Gt4Evnq6 ようちえんじがかんじをつかわないでってぐずってるのとおなじだね
728デフォルトの名無しさん
2020/02/11(火) 10:19:17.04ID:G5APdl5q 異常とは、普通じゃないことだよ
少数派のこと
if (b == true == true) は明らかに異常
if (b == true) はたまに見るけど、まぁ異常かな
少数派のこと
if (b == true == true) は明らかに異常
if (b == true) はたまに見るけど、まぁ異常かな
729デフォルトの名無しさん
2020/02/11(火) 10:34:12.60ID:lXsf9fbV つまりQZは異常
730デフォルトの名無しさん
2020/02/11(火) 10:35:43.55ID:Kcy+Q8b9 boolやBOOLでない変数abcをif(a==b==c)と書きたい事はある。
731デフォルトの名無しさん
2020/02/11(火) 10:56:56.94ID:0rT9FQIK QZってコイツ片山だっけ?
732デフォルトの名無しさん
2020/02/11(火) 11:01:53.65ID:u3DUqgh+ if(b==true)
はifのなかには比較入れないとダメだと思っているんじゃね
そう言う言語もあるし
はifのなかには比較入れないとダメだと思っているんじゃね
そう言う言語もあるし
733デフォルトの名無しさん
2020/02/11(火) 11:09:22.66ID:IotAbjtu 「rust が c++ を超えた!! 神!!」みたいな記事をよく見ますけど、今後c++がrustから学んでもっと良くなることって期待して良いですよね?
rustに勉強のコストを割くか迷っています
rustに勉強のコストを割くか迷っています
734デフォルトの名無しさん
2020/02/11(火) 11:12:06.04ID:HeZx7HUk735デフォルトの名無しさん
2020/02/11(火) 11:29:50.94ID:Ci+AyeA2 なぜ
if (a == true)
と書くやつがでてくるのか
それは条件式に食わせるためには比較演算子で値から「真偽値」に変える必要があると
思っていてそれがboolと同値と理解していないからだろ
だからそういうやつは
if (a == 42 == true)
とは書かない
この例はむしろboolを理解してるやつからしか出てこない発想
やつらはいったん「真偽値」になればあとは論理演算子でつなげると理解している
ある意味、条件式を作るときのイディオムに馬鹿正直に従っているわけで別に
異常だと騒ぐほどひどくはない
別の見方をすればboolを特別視しないで書いてるわけで、
冗長にはなるが共通のフォーマットで書ききるってことはほかでもあることだ
そう思えばやっぱりひどくはない
実際おれは特別読みにくいとは感じないし、この無駄は最適化で消える
何かの機会にこれ冗長だよねと教えてやるぐらいで十分
if (a == true)
と書くやつがでてくるのか
それは条件式に食わせるためには比較演算子で値から「真偽値」に変える必要があると
思っていてそれがboolと同値と理解していないからだろ
だからそういうやつは
if (a == 42 == true)
とは書かない
この例はむしろboolを理解してるやつからしか出てこない発想
やつらはいったん「真偽値」になればあとは論理演算子でつなげると理解している
ある意味、条件式を作るときのイディオムに馬鹿正直に従っているわけで別に
異常だと騒ぐほどひどくはない
別の見方をすればboolを特別視しないで書いてるわけで、
冗長にはなるが共通のフォーマットで書ききるってことはほかでもあることだ
そう思えばやっぱりひどくはない
実際おれは特別読みにくいとは感じないし、この無駄は最適化で消える
何かの機会にこれ冗長だよねと教えてやるぐらいで十分
736デフォルトの名無しさん
2020/02/11(火) 11:37:00.49ID:kh2SGwFh ほんといつまでやってんの
737デフォルトの名無しさん
2020/02/11(火) 11:38:29.11ID:KQZ3+5BK 冗長な書き方をする人の真意なんて測りようもないし理由が一つに決められるわけもないだろう。
想像するだけ無駄。
想像するだけ無駄。
738はちみつ餃子 ◆8X2XSCHEME
2020/02/11(火) 12:17:11.73ID:GpQNLMm4 >>715
そう書くべきだしそれが普通ってことはわかってんだって。
自分で書く分にはそう書くよ。
でも、他者が書いたコードを読むときや利用するときは
> 変数が実質的にブール型の場合は
っていう前提を確信できない場合がある。
整数型で真偽値の代用にすることがある C/C++ では
型で判断できないことがあるから罠だよねって話をしてるんだよ。
真っ当なデザインではない場合があるから思い込まずにちゃんと確認しようねってこと。
そう書くべきだしそれが普通ってことはわかってんだって。
自分で書く分にはそう書くよ。
でも、他者が書いたコードを読むときや利用するときは
> 変数が実質的にブール型の場合は
っていう前提を確信できない場合がある。
整数型で真偽値の代用にすることがある C/C++ では
型で判断できないことがあるから罠だよねって話をしてるんだよ。
真っ当なデザインではない場合があるから思い込まずにちゃんと確認しようねってこと。
739デフォルトの名無しさん
2020/02/11(火) 15:09:17.27ID:lXsf9fbV740デフォルトの名無しさん
2020/02/11(火) 15:15:33.26ID:Gt4Evnq6 > この例はむしろboolを理解してるやつからしか出てこない発想
そりゃそうだ
ifの制御式は比較でなければならないと言い張るやつへの皮肉なわけで
そりゃそうだ
ifの制御式は比較でなければならないと言い張るやつへの皮肉なわけで
741デフォルトの名無しさん
2020/02/11(火) 15:19:47.85ID:QCVkc9h/ operator =(BOOL value){
if(value==0){
return FALSE;
else if(value==1||value==2||...){
}
if(value==0){
return FALSE;
else if(value==1||value==2||...){
}
742デフォルトの名無しさん
2020/02/11(火) 15:21:35.11ID:IKSpGnXe743デフォルトの名無しさん
2020/02/11(火) 15:25:53.55ID:Uk2CrnAG Cだとそれで必ず0か1になるからTRUEと比較しても大丈夫!っていうクソみたいなバッドノウハウ
744デフォルトの名無しさん
2020/02/11(火) 15:28:40.66ID:QCVkc9h/ operator ==(BOOL value){
if(this->value == 0){
if(this->value == value){
return TRUE;
}
}
else{
if(value==1||value==2||...){
return TRUE;
}
}
}
if(this->value == 0){
if(this->value == value){
return TRUE;
}
}
else{
if(value==1||value==2||...){
return TRUE;
}
}
}
745デフォルトの名無しさん
2020/02/11(火) 15:38:44.74ID:KQZ3+5BK >>743
そもそもTRUEと比較する必要はないしWindowsから出てきたイディオムでもないと思うが。
どちらかというとtruthyな値からtrueを得るイディオムとして使われているような。
よく見かけるのはJavaScriptとか。
そもそもTRUEと比較する必要はないしWindowsから出てきたイディオムでもないと思うが。
どちらかというとtruthyな値からtrueを得るイディオムとして使われているような。
よく見かけるのはJavaScriptとか。
746デフォルトの名無しさん
2020/02/11(火) 15:45:19.74ID:Gt4Evnq6 リターン式から返却値の型を推定させる場合にはautoが必要だ
>>725
あなたのいう「一般的」というものが、実はそれほど一般的ではなかった、という可能性はありませんかね?
というか、まずあなたのいう「一般的」をあなたの言葉で定義するべきでしょう
あなたに定義できますか?
あなたのいう「一般的」というものが、実はそれほど一般的ではなかった、という可能性はありませんかね?
というか、まずあなたのいう「一般的」をあなたの言葉で定義するべきでしょう
あなたに定義できますか?
748デフォルトの名無しさん
2020/02/11(火) 18:04:17.83ID:G5APdl5q 単語の意味は辞書引けよ
APIの仕様はヘルプ読め、と同様だな
なんで個人が定義するんだよ
APIの仕様はヘルプ読め、と同様だな
なんで個人が定義するんだよ
749はちみつ餃子 ◆8X2XSCHEME
2020/02/11(火) 18:24:26.11ID:GpQNLMm4750はちみつ餃子 ◆8X2XSCHEME
2020/02/11(火) 18:40:23.65ID:GpQNLMm4 true と比較したけりゃすればいいじゃないの。
そのプロジェクト内で一貫したポリシーがあるのならそれでいいよ。
そのプロジェクト内で一貫したポリシーがあるのならそれでいいよ。
751デフォルトの名無しさん
2020/02/11(火) 18:49:13.60ID:TuMeiRsT ちゃうねん。
752デフォルトの名無しさん
2020/02/11(火) 18:52:49.99ID:TuMeiRsT ストリーム遅いな。
753デフォルトの名無しさん
2020/02/11(火) 20:44:57.22ID:f/mZFEPY コード規約「if(bool)はif(bool==true)と書かなければならない」
やだよ、そんな規約ww
規約決めるまでに紛糾してプロジェクト始められねぇよw
やだよ、そんな規約ww
規約決めるまでに紛糾してプロジェクト始められねぇよw
754デフォルトの名無しさん
2020/02/11(火) 20:57:43.57ID:Z6POtQL5 どっちでもええやん
755デフォルトの名無しさん
2020/02/11(火) 22:08:40.56ID:Pk2ehCPz explicit operator boolだとラムダとかの戻り値強制したいときそうなっちゃわない?
value() && true か value() || false
static_cast<bool>(value())は好きじゃない
value() && true か value() || false
static_cast<bool>(value())は好きじゃない
756デフォルトの名無しさん
2020/02/11(火) 22:19:09.87ID:Uk2CrnAG 素直に戻り値boolに指定しろよ
757デフォルトの名無しさん
2020/02/11(火) 22:21:59.64ID:ggTX+OPA 意味的にboolの型であればboolにキャスト
そうじゃないなら意味通りにboolに変換
そうじゃないなら意味通りにboolに変換
>>258
mmap を確かめています、なんだかすごく時間がかかってしまいました…
ideone はファイルを作らせてくれないみたいですね… https://ideone.com/zXFtEY
fd と fd に紐付いた mmap をつくっておいて、
@fd 側にデータを追加すれば mmap でも見えるのですが、
Ammap 側からデータを追加しても fd は増量しないようですね
今は cygwin で見てますが、ちゃんと linux をいれて確かめるつもりです…
mmap を確かめています、なんだかすごく時間がかかってしまいました…
ideone はファイルを作らせてくれないみたいですね… https://ideone.com/zXFtEY
fd と fd に紐付いた mmap をつくっておいて、
@fd 側にデータを追加すれば mmap でも見えるのですが、
Ammap 側からデータを追加しても fd は増量しないようですね
今は cygwin で見てますが、ちゃんと linux をいれて確かめるつもりです…
759デフォルトの名無しさん
2020/02/11(火) 22:24:35.42ID:ggTX+OPA オンメモリで出来ることは素直にオンメモリでやれば
760デフォルトの名無しさん
2020/02/11(火) 23:36:09.88ID:TuMeiRsT くじで決めてはどうか。
761デフォルトの名無しさん
2020/02/11(火) 23:39:16.71ID:RnNFx+rl モンテカルロ法やな
762デフォルトの名無しさん
2020/02/11(火) 23:56:08.12ID:TuMeiRsT I/Oの遅さの陰に隠れてたけど。
ストリームよりSSDのほうが速いよって時代になって困る。
ストリームよりSSDのほうが速いよって時代になって困る。
763デフォルトの名無しさん
2020/02/12(水) 01:53:51.39ID:CB9IiDBv YouTuberは「最強の職業」である理由。
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY
https://www.youtube.com/watch?v=XjV3Nb0-hgA
【事例付き】YouTuberは最強の副業である件について。
https://www.youtube.com/watch?v=wB8hNuNVoIw&t=267s
【初心者向け】YouTubeの始め方・稼ぎ方を徹底解説!
https://www.youtube.com/watch?v=YEw-a8qlADM
「YouTubeなんていつか稼げなくなる」という主張を論破する。
https://www.youtube.com/watch?v=VatNILApW4U
収益化から丸1年!YouTubeでいくら稼いだか公開。
https://www.youtube.com/watch?v=-zQxuQqZ5eA&t=103s
その動画で月商○○万!? YouTubeで稼ぐ裏技的アプローチ。
https://www.youtube.com/watch?v=7I4APU_6i9o&t=433s
【貧者の工夫で戦え】ガラケーだっていい。YouTube始めるのにパソコンはいらない!
https://www.youtube.com/watch?v=jYdWfjjzD7Y
【第一回】SNS、YouTube、ブログで稼ぐ方法を、丁寧に解説します!
https://www.youtube.com/watch?v=erNiLOncDnY
764デフォルトの名無しさん
2020/02/12(水) 06:38:05.77ID:m8mhjAm7 >>763
グロ
グロ
765デフォルトの名無しさん
2020/02/12(水) 10:03:09.83ID:DWihvkH4766デフォルトの名無しさん
2020/02/12(水) 16:01:35.18ID:a1w2Xqz0767はちみつ餃子 ◆8X2XSCHEME
2020/02/12(水) 16:24:33.81ID:KQxiYwOn ! は見づらいから私は not と書くことにしてる。
768デフォルトの名無しさん
2020/02/12(水) 17:16:20.22ID:DU9qWhLl 一応、alternative tokensに規定はあるが
使う奴の心は #define BEGIN { なんてやるやつと同質だね
使う奴の心は #define BEGIN { なんてやるやつと同質だね
769デフォルトの名無しさん
2020/02/12(水) 17:20:59.01ID:DU9qWhLl Cにも_Boolがなきゃヤダジタしてたやつとか
マジそういう言語へ行ったきり帰ってくるなって感じ
で結局BOOL < 0みたいなオカシイことが起き出す原因を作りやがる
マジそういう言語へ行ったきり帰ってくるなって感じ
で結局BOOL < 0みたいなオカシイことが起き出す原因を作りやがる
770はちみつ餃子 ◆8X2XSCHEME
2020/02/12(水) 17:47:16.08ID:KQxiYwOn C と C++ で解釈が違うのに結果として動作は同じみたいなのがたまにあってすげーなって思う。
771デフォルトの名無しさん
2020/02/12(水) 18:09:20.78ID:goJJte/u たとえば?
772はちみつ餃子 ◆8X2XSCHEME
2020/02/12(水) 19:09:04.21ID:KQxiYwOn >>770-771
if 文の条件式を見てて思い出した。
C だと条件式の評価結果を 0 と比較するというルール
C++ だとブールに変換するというルール。
まあ整数をブールに変換する規則は結局のところ 0 と等しいかどうかなんで
ちょっと回りくどくなってるだけなんだけど、
そういう違いがあっても互換性が維持されるというのがどこかで検証されてるんだろうと思うと、
手間かかってんなぁという感想が浮かんだ。
他にも列挙定数の型が C と C++ では違うとか……。
私が把握してるのはそんくらいだけど、
探せばもっとあるんじゃないかな。
if 文の条件式を見てて思い出した。
C だと条件式の評価結果を 0 と比較するというルール
C++ だとブールに変換するというルール。
まあ整数をブールに変換する規則は結局のところ 0 と等しいかどうかなんで
ちょっと回りくどくなってるだけなんだけど、
そういう違いがあっても互換性が維持されるというのがどこかで検証されてるんだろうと思うと、
手間かかってんなぁという感想が浮かんだ。
他にも列挙定数の型が C と C++ では違うとか……。
私が把握してるのはそんくらいだけど、
探せばもっとあるんじゃないかな。
773デフォルトの名無しさん
2020/02/12(水) 20:25:01.80ID:ytylQgpT774デフォルトの名無しさん
2020/02/12(水) 20:38:11.07ID:rfok9Tr/ b!=0 で良い
775デフォルトの名無しさん
2020/02/12(水) 21:12:18.94ID:h1wCYtKx そういうゴミみたいな自己満テクニック()が積もり積もって誰も触れないスパゲティモンスターになっちまうんだよ
b!=0でも(bool)bでもいいからやるべきことを直接表現しろ
b!=0でも(bool)bでもいいからやるべきことを直接表現しろ
776デフォルトの名無しさん
2020/02/12(水) 21:26:37.63ID:rfok9Tr/ (bool)b
はCへの移植の可能性があるならやっちゃダメ
はCへの移植の可能性があるならやっちゃダメ
777デフォルトの名無しさん
2020/02/12(水) 21:31:03.80ID:DU9qWhLl >>776
何で?
ISO/IEC 9899:2011 (E)
7.18 Boolean type and values <stdbool.h>
1 The header <stdbool.h> defines four macros.
2 The macro
bool
expands to _Bool.
何で?
ISO/IEC 9899:2011 (E)
7.18 Boolean type and values <stdbool.h>
1 The header <stdbool.h> defines four macros.
2 The macro
bool
expands to _Bool.
778デフォルトの名無しさん
2020/02/12(水) 21:34:37.96ID:rfok9Tr/ typedef char bool;
の可能性があるから
の可能性があるから
779デフォルトの名無しさん
2020/02/12(水) 21:35:17.48ID:ytylQgpT Cに移植する可能性があるならC++の機能を使っちゃダメなのは当たり前だよなぁ
C++スレで言うことではないと思うが
C++スレで言うことではないと思うが
780デフォルトの名無しさん
2020/02/12(水) 21:36:55.01ID:rfok9Tr/781デフォルトの名無しさん
2020/02/12(水) 21:38:26.52ID:rfok9Tr/ コンパイラが問題点を見つけられない例は他に山ほどあるが
だからといってわざわざ増やさなくても良い
だからといってわざわざ増やさなくても良い
782デフォルトの名無しさん
2020/02/12(水) 21:39:05.32ID:ytylQgpT いや、問題があるなら移植する人が見つけろよ
783デフォルトの名無しさん
2020/02/12(水) 21:40:47.83ID:rfok9Tr/ 移植は完璧な人がする
なんて妄想は捨てた方が良い
なんて妄想は捨てた方が良い
784デフォルトの名無しさん
2020/02/12(水) 21:42:13.60ID:rfok9Tr/ Cに移植する可能性が無いならどうでも良い
ちなみにキャストで警告が出る環境もある
ちなみにキャストで警告が出る環境もある
785デフォルトの名無しさん
2020/02/12(水) 21:42:36.95ID:ytylQgpT だからそれは移植する側の問題だろ。勝手にやれよ
786デフォルトの名無しさん
2020/02/12(水) 21:52:54.99ID:DU9qWhLl >>778
マクロとtypedefが被った場合どうなるか解ってる?
マクロとtypedefが被った場合どうなるか解ってる?
787デフォルトの名無しさん
2020/02/12(水) 22:12:26.79ID:ecElmrkB もちろん
788デフォルトの名無しさん
2020/02/13(木) 00:16:13.58ID:X++L6urQ >>733
Rustを少し見てみたけど、書き方が全くC/C++とは違っていて、
全く異なる文化圏の言語になれた人が設計した臭がした。
これがC/C++の代替になるとは考えにくい。
はっきり行って、これを使えといわれると辛い。
Rustを少し見てみたけど、書き方が全くC/C++とは違っていて、
全く異なる文化圏の言語になれた人が設計した臭がした。
これがC/C++の代替になるとは考えにくい。
はっきり行って、これを使えといわれると辛い。
789デフォルトの名無しさん
2020/02/13(木) 00:26:27.60ID:YbJF2Pjt テスト機能が標準で用意されてるのはいい
790はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 00:45:52.57ID:XX4mj9DD 個人的には Rust は好感触。
型システムは ML 系言語で実績があるものを基礎にしてることもあって、C++ のグダグダな歴史を背負ったものよりはまとも。
ML 系はやっぱり高級路線の言語だし、インデントでブロックを表す系統なのがしんどいけど、
Rust は上手く低レイヤ用 (としても使えるよう) に着地させてるし、 C 風の外観を踏襲してもいる。
C++ が Rust から取り入れられるものはそんなに多くないと思う。
C++ は良くも悪くも互換性についてかなり強い要求があるので、
Rust 的な、カッチリと保護された仕組みを後付けするのはどう考えても無理。
C++ が Rust を参考にすることは間違いなくあるとは思うが、
全体の思想がまるで違うので限定的な範囲でしか取り入れられない。
もし取り入れらたらそれは C++ の新機能として新しく学ぶので十分でしょ。
Rust を学ぶのは間違いなく有用ではあるけども、
Rust の知見が C++ に取り入れられる可能性がありそうだからという理由ならそんなに意味ない。
型システムは ML 系言語で実績があるものを基礎にしてることもあって、C++ のグダグダな歴史を背負ったものよりはまとも。
ML 系はやっぱり高級路線の言語だし、インデントでブロックを表す系統なのがしんどいけど、
Rust は上手く低レイヤ用 (としても使えるよう) に着地させてるし、 C 風の外観を踏襲してもいる。
C++ が Rust から取り入れられるものはそんなに多くないと思う。
C++ は良くも悪くも互換性についてかなり強い要求があるので、
Rust 的な、カッチリと保護された仕組みを後付けするのはどう考えても無理。
C++ が Rust を参考にすることは間違いなくあるとは思うが、
全体の思想がまるで違うので限定的な範囲でしか取り入れられない。
もし取り入れらたらそれは C++ の新機能として新しく学ぶので十分でしょ。
Rust を学ぶのは間違いなく有用ではあるけども、
Rust の知見が C++ に取り入れられる可能性がありそうだからという理由ならそんなに意味ない。
791デフォルトの名無しさん
2020/02/13(木) 01:02:46.91ID:b1nbpqgi C++の配列は長さの情報を持ってないってことになってるけど
長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
なんでその情報をプログラマが利用できないようになってるの?
長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
なんでその情報をプログラマが利用できないようになってるの?
792デフォルトの名無しさん
2020/02/13(木) 01:06:29.86ID:qzSQSiwu rustがかっちり保護してくれるとか低レイヤー向けとか馬鹿ほど信じてるよね。
ありゃ帯に短し襷に長しの典型言語だわ。
ありゃ帯に短し襷に長しの典型言語だわ。
793デフォルトの名無しさん
2020/02/13(木) 01:44:34.08ID:X++L6urQ >>792
実際、Rustは、Cを簡単にするのではなく、Cを難しくしてしまっていて、Cのポインタが理解できない or 難しく感じる人には、Rustの特徴の核心たる所有権、借用などの部分はちんぷんかんぷんだと思う。
実際、Rustは、Cを簡単にするのではなく、Cを難しくしてしまっていて、Cのポインタが理解できない or 難しく感じる人には、Rustの特徴の核心たる所有権、借用などの部分はちんぷんかんぷんだと思う。
794デフォルトの名無しさん
2020/02/13(木) 01:48:50.73ID:X++L6urQ >>793
Cの問題点を取り除いたと言うより、ほとんど全てのプログラミング言語が暗黙のうちに用いている代入の概念をなるべく使わないようにして変数束縛などの全く異なる独自概念を用いようとしている。
しかし、これは、手続き型言語と関数言語の違いに匹敵するくらいのプログラミングの概念の変更になってしまうため、手続き型言語の中で改良された次世代言語と言うものではなくなってしまっているとも言える。
Cの問題点を取り除いたと言うより、ほとんど全てのプログラミング言語が暗黙のうちに用いている代入の概念をなるべく使わないようにして変数束縛などの全く異なる独自概念を用いようとしている。
しかし、これは、手続き型言語と関数言語の違いに匹敵するくらいのプログラミングの概念の変更になってしまうため、手続き型言語の中で改良された次世代言語と言うものではなくなってしまっているとも言える。
795デフォルトの名無しさん
2020/02/13(木) 05:24:36.37ID:AWnkBPoe 変数束縛って右辺値参照でしょ
796デフォルトの名無しさん
2020/02/13(木) 06:24:47.58ID:fMXzK7Sc RustはC++なら簡単にできることをものすごく回りくどく書かないとコンパイル通らない感じだからとてもつらい
797デフォルトの名無しさん
2020/02/13(木) 09:13:38.23ID:6FSFTWhE798デフォルトの名無しさん
2020/02/13(木) 12:35:22.33ID:z5cRWLgY >>797
断言してもいいが、RustはC++に取って代わることは無い。
なぜなら、普通の手続き型言語での枠組みにすら入ってない書き方を強要されるから。
手短に言えば、単にC/C++と書き方が大幅に違っているだけではなく、書き方が他のどんな減の範疇にも属していない。
断言してもいいが、RustはC++に取って代わることは無い。
なぜなら、普通の手続き型言語での枠組みにすら入ってない書き方を強要されるから。
手短に言えば、単にC/C++と書き方が大幅に違っているだけではなく、書き方が他のどんな減の範疇にも属していない。
799はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 13:30:24.18ID:XX4mj9DD >>796
C/C++ でのオブジェクトの寿命の管理の難しさってのは
理屈が理解しづらいというよりはわかってても間違うという難しさなんだよね。
そして間違っていてもコンパイラは黙って通すことも多い。
C/C++ を長く使っていればそれを感じることって結構あるでしょ。
そういう部分のプログラムが正しいことはプログラマが保証しなくてはならんわけだ。
でも Rust では言語処理系の側でやってくれる。
C/C++ で面倒な部分を Rust では自動でやってくれる。
まわりくどいのは確かだけど、それで楽できるのも確かなので、
どっちを取るかって話だな。
オブジェクトをどこで後始末するか。
管理の主導権はどのモジュールに持たせるか。
そういうのって C/C++ でも考えてるよね。
C/C++ ではプログラムに書いてないだけで本来はあるはずのものなんだよ。
(C++ だとスマートポインタの導入で少し楽にはなったけど。)
自分が何を考えていたのか、そして何を考えられていなかったのが
明らかになるのはそれはそれで楽しいと思う。
まあ、それは俺が趣味でやってるからかもしれんな。
C/C++ でのオブジェクトの寿命の管理の難しさってのは
理屈が理解しづらいというよりはわかってても間違うという難しさなんだよね。
そして間違っていてもコンパイラは黙って通すことも多い。
C/C++ を長く使っていればそれを感じることって結構あるでしょ。
そういう部分のプログラムが正しいことはプログラマが保証しなくてはならんわけだ。
でも Rust では言語処理系の側でやってくれる。
C/C++ で面倒な部分を Rust では自動でやってくれる。
まわりくどいのは確かだけど、それで楽できるのも確かなので、
どっちを取るかって話だな。
オブジェクトをどこで後始末するか。
管理の主導権はどのモジュールに持たせるか。
そういうのって C/C++ でも考えてるよね。
C/C++ ではプログラムに書いてないだけで本来はあるはずのものなんだよ。
(C++ だとスマートポインタの導入で少し楽にはなったけど。)
自分が何を考えていたのか、そして何を考えられていなかったのが
明らかになるのはそれはそれで楽しいと思う。
まあ、それは俺が趣味でやってるからかもしれんな。
800デフォルトの名無しさん
2020/02/13(木) 13:34:58.25ID:3lSBa444 おまえの設計がヘタクソなだけだろ
801はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 13:45:30.52ID:XX4mj9DD802デフォルトの名無しさん
2020/02/13(木) 14:01:13.64ID:z5cRWLgY803はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 14:13:53.49ID:XX4mj9DD >>802
間違いなくミスし易いけどミスした箇所が検出できないということはあまりない。
間違いなくミスし易いけどミスした箇所が検出できないということはあまりない。
804デフォルトの名無しさん
2020/02/13(木) 14:20:14.02ID:3lSBa444 設計がヘタクソなヤツが書いたソースのメンテやらされるのは最悪だけど自分で組み上げるならC++以外有り得ない
各々の力量が顕著に表れやすい最高の言語には違いない
バカも容易に炙り出せるしな
各々の力量が顕著に表れやすい最高の言語には違いない
バカも容易に炙り出せるしな
805デフォルトの名無しさん
2020/02/13(木) 14:20:33.11ID:z5cRWLgY >>803
仮にあなたはちゃんと理解できても、一般のプログラマは変数束縛やら所有権や借用の概念を理解することが難しすぎるので、C/C++を置き換える言語にはならない。
それらの概念は学習コストが高すぎるどころか、一生理解できないプログラマが多いだろう。
仮にあなたはちゃんと理解できても、一般のプログラマは変数束縛やら所有権や借用の概念を理解することが難しすぎるので、C/C++を置き換える言語にはならない。
それらの概念は学習コストが高すぎるどころか、一生理解できないプログラマが多いだろう。
806はちみつ餃子 ◆8X2XSCHEME
2020/02/13(木) 15:53:13.34ID:XX4mj9DD >>805
誤解のないように補足しておくけど、俺は Rust が C++ を置き換えるという主張はしてないからね。
C++ の重大な欠点を (実行コストをあまり払わない形で) 改善しているのは確かってだけ。
そんでもってそれが必要な場面は間違いなくあるってことも。
誤解のないように補足しておくけど、俺は Rust が C++ を置き換えるという主張はしてないからね。
C++ の重大な欠点を (実行コストをあまり払わない形で) 改善しているのは確かってだけ。
そんでもってそれが必要な場面は間違いなくあるってことも。
807デフォルトの名無しさん
2020/02/13(木) 19:21:34.29ID:b1nbpqgi >>791
わかる人いませんか?
わかる人いませんか?
808デフォルトの名無しさん
2020/02/13(木) 19:29:34.59ID:z5cRWLgY >>807
new TYPE[] のようにしてヒープから配列として確保されたメモリは確かに
要素数の情報を持っている。
しかし、new TYPEのように配列ではない場合は、高速化のために情報を
持ってない処理系もある。そのために 前者では delete[] を、後者では
deleteを使うことになっており、間違った組み合わせを使った場合には
不具合を生じる。
また、ポインタは、ヒープから確保された配列ばかりをポイントしているとは
限らず、例えばスタック上のローカルオート変数や、グローバル変数をポイント
していることもあり、その場合には、要素数の情報は全く持っていない。
さらに、Cの場合、関数の引数に TYPE buf[] のように配列を書いても、
TYPE *buf に自動修正される仕様となっている。
そのため、配列を受け取るのは、必ずポインタということになる。
しかし、ポインタで受け取るということは、そこには、&a のように、
ローカルオート変数も実引数として指定して呼び出すことも出来る。
その場合には要素数が無いので、あなたの望みをかなえる高速な
一般的方法が存在しない。
望みをかなえるためには、言語の拡張が必要となる。
new TYPE[] のようにしてヒープから配列として確保されたメモリは確かに
要素数の情報を持っている。
しかし、new TYPEのように配列ではない場合は、高速化のために情報を
持ってない処理系もある。そのために 前者では delete[] を、後者では
deleteを使うことになっており、間違った組み合わせを使った場合には
不具合を生じる。
また、ポインタは、ヒープから確保された配列ばかりをポイントしているとは
限らず、例えばスタック上のローカルオート変数や、グローバル変数をポイント
していることもあり、その場合には、要素数の情報は全く持っていない。
さらに、Cの場合、関数の引数に TYPE buf[] のように配列を書いても、
TYPE *buf に自動修正される仕様となっている。
そのため、配列を受け取るのは、必ずポインタということになる。
しかし、ポインタで受け取るということは、そこには、&a のように、
ローカルオート変数も実引数として指定して呼び出すことも出来る。
その場合には要素数が無いので、あなたの望みをかなえる高速な
一般的方法が存在しない。
望みをかなえるためには、言語の拡張が必要となる。
809デフォルトの名無しさん
2020/02/13(木) 19:33:05.83ID:bRhYdbIA Rustっていろいろ清々しいよね
関数型言語に必須じゃねえのと思うリスト関係がぽっかり抜けてるのは不満だけど
関数型言語に必須じゃねえのと思うリスト関係がぽっかり抜けてるのは不満だけど
810デフォルトの名無しさん
2020/02/13(木) 19:57:05.87ID:WjLTLikp811デフォルトの名無しさん
2020/02/13(木) 20:01:17.55ID:b1nbpqgi812デフォルトの名無しさん
2020/02/13(木) 20:08:49.19ID:J94ypinO delete [] pと同じように
sizeof [] pを用意すりゃいいのにね
pがnew []されてなかったら誤動作するって挙動ならdeleteと同じだろうに
sizeof [] pを用意すりゃいいのにね
pがnew []されてなかったら誤動作するって挙動ならdeleteと同じだろうに
813デフォルトの名無しさん
2020/02/13(木) 20:15:32.26ID:iivZofrB 言いたいことは分かるが構文がきもい
814デフォルトの名無しさん
2020/02/13(木) 20:17:34.65ID:Y6SS1xK+ 欲しいなら作れば?
それができるのがc++じゃん
それができるのがc++じゃん
>>791
>C++の配列は長さの情報を持ってないってことになってるけど
>長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
new したときは、その領域サイズが実行時にユーザーのみえないところに保存される、というだけなのでは?
C/C++ の配列は長さ情報を(自分でそう書かないかぎり)持たないとおもいますよ
>C++の配列は長さの情報を持ってないってことになってるけど
>長さを与えなくてもdelete[]できるんだから、メモリのどこかにその情報はあるよね?
new したときは、その領域サイズが実行時にユーザーのみえないところに保存される、というだけなのでは?
C/C++ の配列は長さ情報を(自分でそう書かないかぎり)持たないとおもいますよ
816デフォルトの名無しさん
2020/02/13(木) 20:38:39.62ID:WjLTLikp ちゃうねん。
817デフォルトの名無しさん
2020/02/13(木) 20:50:05.52ID:qzSQSiwu 設計がダメな場合コンパイラにいくら指摘されようと根本的には治らんのだが、
(たいていそういう馬鹿はコンパイラ通すためにmut,RefCell,unsafeを使いまくる)
そういうのを少しもわかってないバカがrust推しなんだよなぁ。
構造体を1から作り直さなきゃならんかったり根本的に間違ってる。
(たいていそういう馬鹿はコンパイラ通すためにmut,RefCell,unsafeを使いまくる)
そういうのを少しもわかってないバカがrust推しなんだよなぁ。
構造体を1から作り直さなきゃならんかったり根本的に間違ってる。
818デフォルトの名無しさん
2020/02/13(木) 21:00:18.27ID:sl9OX6cI >>808
new TYPE[]するとき内部的にサイズ情報を持つ保証ってあったっけ?
例えば自前でoperator new []を実装するとき、予め2^nバイトのブロックを所定の数用意しておいて、要求サイズに応じて必要十分な大きさのブロックを返すなら、割り当て時に要求されたバイト数または要素数の情報を保持しないという実装も可能かと思う。
new TYPE[]するとき内部的にサイズ情報を持つ保証ってあったっけ?
例えば自前でoperator new []を実装するとき、予め2^nバイトのブロックを所定の数用意しておいて、要求サイズに応じて必要十分な大きさのブロックを返すなら、割り当て時に要求されたバイト数または要素数の情報を保持しないという実装も可能かと思う。
819デフォルトの名無しさん
2020/02/13(木) 21:18:32.64ID:9NIgZq2/ >>811
いえいえ
いえいえ
820デフォルトの名無しさん
2020/02/13(木) 21:37:18.24ID:Y6SS1xK+ >>818
デストラクタ呼ぶ必要ある
デストラクタ呼ぶ必要ある
821デフォルトの名無しさん
2020/02/13(木) 21:39:24.09ID:J94ypinO デストラクタ呼ぶ必要ない型だと、size情報持ってないと言うことなんだろうね
822デフォルトの名無しさん
2020/02/13(木) 21:40:36.17ID:sl9OX6cI >>820
デストラクタの実装も、返ってきたアドレスの値でどのサイズの領域か(割り当て要求されたサイズではなく、自分で区切ったブロックのサイズ)が分かるようにしておけば大丈夫でないかな?
デストラクタの実装も、返ってきたアドレスの値でどのサイズの領域か(割り当て要求されたサイズではなく、自分で区切ったブロックのサイズ)が分かるようにしておけば大丈夫でないかな?
823デフォルトの名無しさん
2020/02/13(木) 21:41:24.98ID:sl9OX6cI >>822
すまん、勘違いでした。全部忘れてください
すまん、勘違いでした。全部忘れてください
824デフォルトの名無しさん
2020/02/13(木) 22:02:22.87ID:WjLTLikp はい忘れました。
825デフォルトの名無しさん
2020/02/13(木) 22:06:16.93ID:Bk3UL691 アドレスだけじゃなくて長さも受け渡しするインターフェースにしましょうとしか。
826デフォルトの名無しさん
2020/02/13(木) 22:36:33.13ID:WjLTLikp シリアル化の王道ってありますか?
827デフォルトの名無しさん
2020/02/13(木) 22:45:19.55ID:iq5JxXln オブジェクトならCORBA、データ構造だけでいいならASN.1とか。
828デフォルトの名無しさん
2020/02/13(木) 22:54:55.06ID:tx2lxPGZ >>822
TYPEがデストラクタを持つclassの場合に、ptr = new TYPE[n] で確保されたメモリ
を delete[] ptr とすると、 正確に n 回デストラクタを呼び出す必要がある。
new が n * sizeof(TYPE) より大きめのブロックを確保した場合でも、
delete[] ptr 時に正確な n の値を割り出す方法が必要となる。
なので、n の値は ptr の値さえあれば知ることが出来ることが必要条件となる。
つまり、少なくともデストラクタを持つ TYPE の場合に TYPE の配列をヒープから
確保した場合には、配列の要素数を必ず配列の先頭のポインタの値から「知る」事が出来る。
TYPEがデストラクタを持つclassの場合に、ptr = new TYPE[n] で確保されたメモリ
を delete[] ptr とすると、 正確に n 回デストラクタを呼び出す必要がある。
new が n * sizeof(TYPE) より大きめのブロックを確保した場合でも、
delete[] ptr 時に正確な n の値を割り出す方法が必要となる。
なので、n の値は ptr の値さえあれば知ることが出来ることが必要条件となる。
つまり、少なくともデストラクタを持つ TYPE の場合に TYPE の配列をヒープから
確保した場合には、配列の要素数を必ず配列の先頭のポインタの値から「知る」事が出来る。
829デフォルトの名無しさん
2020/02/13(木) 23:01:33.00ID:WjLTLikp830デフォルトの名無しさん
2020/02/13(木) 23:09:58.23ID:iq5JxXln 型情報が無けりゃデシリアライズしても使いようがあるまい。
831デフォルトの名無しさん
2020/02/13(木) 23:12:32.63ID:WjLTLikp それがあるんですよ兄さん。
832デフォルトの名無しさん
2020/02/13(木) 23:12:57.71ID:ktN45haN 双方向mapって何使うのがいいですか?boostのbimap?
それともこのくらいは自作してる人のほうが多いですか?
それともこのくらいは自作してる人のほうが多いですか?
833デフォルトの名無しさん
2020/02/14(金) 00:05:24.00ID:CPLKNT1n 双方向Mapって何に使えるんですか?
834デフォルトの名無しさん
2020/02/14(金) 01:54:24.23ID:0WgbwkuV 型情報ないならそもそもデシリアライズできないし
型情報なしで成り立つ、つまり型情報を事前に知っている前提なら
バイナリでそのまま送ればいいだろ
型情報なしで成り立つ、つまり型情報を事前に知っている前提なら
バイナリでそのまま送ればいいだろ
835デフォルトの名無しさん
2020/02/14(金) 02:05:36.33ID:raWqkpxU 型がわかっててもコンテナはそのままではバイナリで送れない
836デフォルトの名無しさん
2020/02/14(金) 02:11:15.54ID:CPLKNT1n837デフォルトの名無しさん
2020/02/14(金) 07:52:45.40ID:RsXMnrpQ ちゃんとやるならPODに詰め替えてからchar配列へreinterpret_cast
838はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 09:19:01.22ID:nLeEzkye839デフォルトの名無しさん
2020/02/14(金) 13:35:07.90ID:vZZ7SPTm boostにあるじゃないですか
googleのなんか使うんじゃありません
googleのなんか使うんじゃありません
841デフォルトの名無しさん
2020/02/14(金) 13:49:57.91ID:rQdJoGM9 >>840
VC++の場合、ptr = new TYPE[n] で確保された場合は、確かに
ptr[0] == n
になっていた気がする。
「確かに」というのは言葉のあやで、厳密には覚えてないが、
VC++の new で使われる組み込み関数のライブラリのソースコードを見ると分かる。
VC++の場合、ptr = new TYPE[n] で確保された場合は、確かに
ptr[0] == n
になっていた気がする。
「確かに」というのは言葉のあやで、厳密には覚えてないが、
VC++の new で使われる組み込み関数のライブラリのソースコードを見ると分かる。
842デフォルトの名無しさん
2020/02/14(金) 13:50:28.63ID:rQdJoGM9843デフォルトの名無しさん
2020/02/14(金) 14:03:39.33ID:a5iC3cHy844デフォルトの名無しさん
2020/02/14(金) 15:26:11.39ID:rQdJoGM9 >>842
あ、すまん、正しくは、大体、
((DWORD *)ptr)[-1] == n
だ。
ptr[-1] だと、sizeof(TYPE)分、アドレスが戻ってしまうし、
結果の型も DWORD とかではなく、TYPE 型になってしまう。
あ、すまん、正しくは、大体、
((DWORD *)ptr)[-1] == n
だ。
ptr[-1] だと、sizeof(TYPE)分、アドレスが戻ってしまうし、
結果の型も DWORD とかではなく、TYPE 型になってしまう。
845デフォルトの名無しさん
2020/02/14(金) 15:28:19.59ID:rQdJoGM9846デフォルトの名無しさん
2020/02/14(金) 17:17:51.62ID:jFoBh/u0 一時オブジェクトの寿命について、ご教示ください。
例えば、以下のようなコードがあった時、
void foo(const char* c); // 外部ライブラリの関数につき変更不可とする
void main()
{
const std::string s = "aaa";
foo((s + "bbb").c_str());
}
一時オブジェクトstring(s + "bbb")の破棄が行われるのは、
関数foo()を呼ぶ前でしょうか、呼んだ後でしょうか。
調べた範囲では、「完全式の終わり」という話が出てきたのですが、
どこまでが完全式なのか判断できませんでした。
例えば、以下のようなコードがあった時、
void foo(const char* c); // 外部ライブラリの関数につき変更不可とする
void main()
{
const std::string s = "aaa";
foo((s + "bbb").c_str());
}
一時オブジェクトstring(s + "bbb")の破棄が行われるのは、
関数foo()を呼ぶ前でしょうか、呼んだ後でしょうか。
調べた範囲では、「完全式の終わり」という話が出てきたのですが、
どこまでが完全式なのか判断できませんでした。
848はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 17:34:07.49ID:nLeEzkye すごくどうでもいい話なんだけど、
JIS では完結式という用語を使ってるのに完全式って言葉の方がよく使われているよね……。
JIS では完結式という用語を使ってるのに完全式って言葉の方がよく使われているよね……。
849はちみつ餃子 ◆8X2XSCHEME
2020/02/14(金) 17:59:01.70ID:nLeEzkye850デフォルトの名無しさん
2020/02/14(金) 19:29:16.13ID:CPLKNT1n >>837-838
ありがとん。
ありがとん。
852デフォルトの名無しさん
2020/02/14(金) 20:52:54.21ID:x/oqiD9H おいCぺろぺろ
853デフォルトの名無しさん
2020/02/14(金) 20:58:59.55ID:V/oEZCXU >>851
いえいえ
いえいえ
854デフォルトの名無しさん
2020/02/15(土) 10:34:21.20ID:BMoFghq4 newって意外と速いんだな。
アクセスは不利かもしれないけど。
アクセスは不利かもしれないけど。
855デフォルトの名無しさん
2020/02/15(土) 12:11:39.70ID:DzNKB5Jj856デフォルトの名無しさん
2020/02/15(土) 12:12:59.04ID:BMoFghq4 でもスタックは常にキャッシュに乗ってるから、そこらへんでどう変わるのかな。
857デフォルトの名無しさん
2020/02/15(土) 13:19:54.61ID:J1bovO5o キャッシュに乗るくらいの量だったらそもそもクリティカルな重さにはならんだろ。
newで問題になるのは10万とかそのくらいのオーダーをがっつりfor文で呼ぶとかそれくらいのことする場合。
newで問題になるのは10万とかそのくらいのオーダーをがっつりfor文で呼ぶとかそれくらいのことする場合。
858デフォルトの名無しさん
2020/02/15(土) 13:21:27.11ID:BMoFghq4 スタックは常にキャッシュに乗ってる。
859デフォルトの名無しさん
2020/02/15(土) 13:23:13.35ID:lTU5fwx1 >>857
風邪が騙りかけます
風邪が騙りかけます
860デフォルトの名無しさん
2020/02/15(土) 14:11:39.55ID:DzNKB5Jj >>857
VC++の場合、コンストラクタが無い場合、new が必要とする時間は 170クロック。
3.0GHz の CPUの場合、1.7 * 10^7 回(1,700万回)くらい new してやっと一秒
位。
だから、問題になるのは、1万回ループではなく、100〜1000万回くらいのループ。
VC++の場合、コンストラクタが無い場合、new が必要とする時間は 170クロック。
3.0GHz の CPUの場合、1.7 * 10^7 回(1,700万回)くらい new してやっと一秒
位。
だから、問題になるのは、1万回ループではなく、100〜1000万回くらいのループ。
861デフォルトの名無しさん
2020/02/15(土) 14:15:19.79ID:DzNKB5Jj もちろん、スタック変数で済むならスタック変数の方がいい。
ただ、スタックは容量に限りがあるので全部スタックという訳にもいかない。
ヒープにも限りはあるにはあるが、それは OSやマシンの限界。
ただ、スタックは容量に限りがあるので全部スタックという訳にもいかない。
ヒープにも限りはあるにはあるが、それは OSやマシンの限界。
862デフォルトの名無しさん
2020/02/15(土) 14:25:57.86ID:BMoFghq4 そこでgotoなんですよ。
863デフォルトの名無しさん
2020/02/15(土) 14:43:25.87ID:BMoFghq4 コレクションがソートの有無でだいぶ変わる。
trie_base_benchmark__sorted_words_1
trie assign.
409ms
size : 466551
words : 466551
trie insert.
762ms
size : 466551
words : 466551
std::set insert.
69ms
std::unordered_set insert.
149ms
(assigned) trie find.
24ms
(inserted) trie find.
25ms
std::set find.
194ms
std::unordered_set find.
63ms
trie_base_benchmark__sorted_words_1
trie assign.
409ms
size : 466551
words : 466551
trie insert.
762ms
size : 466551
words : 466551
std::set insert.
69ms
std::unordered_set insert.
149ms
(assigned) trie find.
24ms
(inserted) trie find.
25ms
std::set find.
194ms
std::unordered_set find.
63ms
864デフォルトの名無しさん
2020/02/15(土) 14:44:57.19ID:BMoFghq4 trie_base_benchmark__random_words_1
trie assign.
2034ms
size : 466551
words : 466551
trie insert.
2026ms
size : 466551
words : 466551
std::set insert.
490ms
std::unordered_set insert.
146ms
(assigned) trie find.
158ms
(inserted) trie find.
169ms
std::set find.
477ms
std::unordered_set find.
62ms
trie assign.
2034ms
size : 466551
words : 466551
trie insert.
2026ms
size : 466551
words : 466551
std::set insert.
490ms
std::unordered_set insert.
146ms
(assigned) trie find.
158ms
(inserted) trie find.
169ms
std::set find.
477ms
std::unordered_set find.
62ms
865デフォルトの名無しさん
2020/02/15(土) 14:46:37.02ID:BMoFghq4 挿入速度が変わるのは仕方ないとしても、検索速度が変わるのは、キャッシュじゃないかと思うんだけど。
866デフォルトの名無しさん
2020/02/15(土) 14:49:41.43ID:BMoFghq4 std::sort: 306ms, (466551count).
先にソートしてから挿入したほうが速度的にお得っぽい。
先にソートしてから挿入したほうが速度的にお得っぽい。
867デフォルトの名無しさん
2020/02/15(土) 16:03:09.29ID:0hgUDlXi868デフォルトの名無しさん
2020/02/15(土) 16:18:40.81ID:qSK05WKV869デフォルトの名無しさん
2020/02/15(土) 16:32:01.46ID:4O8uAQVX auto hentai = SM(std::move(羞恥心));
870デフォルトの名無しさん
2020/02/15(土) 17:12:18.08ID:BMoFghq4 newより+のほうが速いってことか。
871デフォルトの名無しさん
2020/02/15(土) 17:25:57.34ID:BMoFghq4 +と-ならどっちが速いんだろう。
872はちみつ餃子 ◆8X2XSCHEME
2020/02/15(土) 17:49:06.00ID:cwLPNCdO >>871
回路はほぼ共有してるんじゃないの?
2の補数を使うのもそれが理由なんだろうし。
少なくとも Pentium 時代まではクロックは同じだったはず。
近頃の事情は知らんけど
GCC あたりで強い最適化をかけてみても引き算か足し算を特に避ける様子もないので、
まあだいたい同じなんでしょ。
回路はほぼ共有してるんじゃないの?
2の補数を使うのもそれが理由なんだろうし。
少なくとも Pentium 時代まではクロックは同じだったはず。
近頃の事情は知らんけど
GCC あたりで強い最適化をかけてみても引き算か足し算を特に避ける様子もないので、
まあだいたい同じなんでしょ。
873デフォルトの名無しさん
2020/02/15(土) 18:01:50.38ID:zARYy4pH >>870
C++の場合、+ひとつだけでも裏でどんなコードが動くか油断ならない。
C++の場合、+ひとつだけでも裏でどんなコードが動くか油断ならない。
874デフォルトの名無しさん
2020/02/15(土) 18:13:26.25ID:2RWOAy2H875はちみつ餃子 ◆8X2XSCHEME
2020/02/15(土) 18:14:19.52ID:cwLPNCdO 整数だけの話じゃなくてってことか。
ある程度の常識的判断が出来る場合もあるけど、
基本的には実装次第だわな。
ある程度の常識的判断が出来る場合もあるけど、
基本的には実装次第だわな。
876デフォルトの名無しさん
2020/02/15(土) 18:19:46.61ID:2RWOAy2H 組み込み型じゃなけりゃそりゃね
+ でミサイル発射とか
+ でミサイル発射とか
877デフォルトの名無しさん
2020/02/15(土) 19:02:33.35ID:qSK05WKV >>870
new より + の方が 170 倍速いと言うことだ。
new より + の方が 170 倍速いと言うことだ。
878デフォルトの名無しさん
2020/02/15(土) 19:04:43.75ID:cVttwiPD >>874
一度bをnegateしてから足す処理系があるかもな
一度bをnegateしてから足す処理系があるかもな
879デフォルトの名無しさん
2020/02/15(土) 19:30:46.15ID:qSK05WKV >>874
確かに引き算には順序があるので、足し算より最適化に不利になることがある。
確かに引き算には順序があるので、足し算より最適化に不利になることがある。
880デフォルトの名無しさん
2020/02/15(土) 19:48:11.00ID:x3vECiAE if(bReaZyuu){
881デフォルトの名無しさん
2020/02/16(日) 00:34:55.37ID:pXV6w9YM if (false != bReaZyuu) {
882デフォルトの名無しさん
2020/02/16(日) 00:35:58.12ID:pXV6w9YM newが常に数百クロックで済むと思ったら
間違いかもしれん…
間違いかもしれん…
883デフォルトの名無しさん
2020/02/16(日) 01:50:35.50ID:1DEBeg9G 経験的にはnewが遅いと思ったことは無い。
なお、コンストラクタの処理時間以外はnewはmallocと同じ速度。
ゲームメーカーでも必要な場合に malloc を使うことは問題ないとされている。
なお、コンストラクタの処理時間以外はnewはmallocと同じ速度。
ゲームメーカーでも必要な場合に malloc を使うことは問題ないとされている。
884デフォルトの名無しさん
2020/02/16(日) 02:03:13.40ID:MPWqg8uW new からしてmallocを呼んでる実装が多い気がする。
885デフォルトの名無しさん
2020/02/16(日) 02:34:52.46ID:yR2k1LO6 そりゃnew用とmalloc用でヒープ別けたら無駄だし
886はちみつ餃子 ◆8X2XSCHEME
2020/02/16(日) 02:36:27.06ID:VK9AAsv4 ヒープからの割り付けをする機会を減らすことで実行速度を上げる工夫はよく聞く話ではあるよな。
ただ、そこまでギリギリのチューニングが必要ってことがあまりないだけで。
ただ、そこまでギリギリのチューニングが必要ってことがあまりないだけで。
887デフォルトの名無しさん
2020/02/16(日) 07:37:50.08ID:Rlzwkt+8 newは最悪値が読めないからなぁ
組込とかシビアなゲームでは使い辛い
組込とかシビアなゲームでは使い辛い
888デフォルトの名無しさん
2020/02/16(日) 08:25:44.50ID:Yy7z+EdH 具体的な数字が出てるとイメージが湧く。
889デフォルトの名無しさん
2020/02/16(日) 08:45:53.63ID:Yy7z+EdH 170クロックならあんまり気にする必要ないな。
890デフォルトの名無しさん
2020/02/16(日) 10:26:07.87ID:w0IbR+6u 組み込みでc++がそもそもおかしい
891デフォルトの名無しさん
2020/02/16(日) 11:00:34.43ID:1DEBeg9G >>887
よっぽどでない限り、AAAゲームでも使われてるよ。
よっぽどでない限り、AAAゲームでも使われてるよ。
892デフォルトの名無しさん
2020/02/16(日) 11:01:02.59ID:B02+i8yM 最近では小規模組み込みでもC++を使う事はあります
new / deleteやヒープを無効にしたり
newのみでdelete出来ないようにしたり
なんてこともあります
new / deleteやヒープを無効にしたり
newのみでdelete出来ないようにしたり
なんてこともあります
893デフォルトの名無しさん
2020/02/16(日) 11:03:58.49ID:+vprjU7s >>890
視野狭すぎ
視野狭すぎ
894デフォルトの名無しさん
2020/02/16(日) 11:12:03.97ID:w0IbR+6u また馬鹿が無駄に一般化してできるワイ言ってんのか。。相変わらずだな。
895デフォルトの名無しさん
2020/02/16(日) 11:20:41.43ID:+vprjU7s 日本語でおk
896デフォルトの名無しさん
2020/02/16(日) 11:23:16.68ID:Yy7z+EdH ストリームってなんで遅いんだろね。
897デフォルトの名無しさん
2020/02/16(日) 11:39:47.59ID:Rlzwkt+8898デフォルトの名無しさん
2020/02/16(日) 11:42:38.67ID:Yy7z+EdH スレで、do{}while()はダメっぽいこと書いてあったけど、なんでダメなの?
899デフォルトの名無しさん
2020/02/16(日) 12:30:30.11ID:q7JzY0gs >>887
でもお前は組み込みにもゲーム開発にも携わってないじゃん
でもお前は組み込みにもゲーム開発にも携わってないじゃん
900デフォルトの名無しさん
2020/02/16(日) 12:42:15.06ID:Rlzwkt+8901デフォルトの名無しさん
2020/02/16(日) 12:54:36.44ID:Yy7z+EdH プリンタ屋さんってどんな仕事ですか?
902デフォルトの名無しさん
2020/02/16(日) 12:58:53.64ID:Rlzwkt+8903デフォルトの名無しさん
2020/02/16(日) 12:59:56.11ID:Yy7z+EdH なんか難しそうですね。
904デフォルトの名無しさん
2020/02/16(日) 13:01:18.53ID:Yy7z+EdH プリンタってプロセッサはどんな感じのを使うんですか?
newってあるんですか?
newってあるんですか?
905デフォルトの名無しさん
2020/02/16(日) 13:02:40.97ID:Yy7z+EdH プリンタのヘッドについてる穴の数は決まっているんだから、あまりヒープが必要無さそうな気もする。
906デフォルトの名無しさん
2020/02/16(日) 13:03:59.79ID:Yy7z+EdH std::vectorの上にヒープを作っても速度的に大丈夫なことは確認した。
907デフォルトの名無しさん
2020/02/16(日) 13:07:31.29ID:Rlzwkt+8 昔はSHシリーズとかR2000とか
今はARMもそれなりに使ってる
制御だとnewは基本使わない
あと俺がやってるのは業務用のLBP
今はARMもそれなりに使ってる
制御だとnewは基本使わない
あと俺がやってるのは業務用のLBP
908デフォルトの名無しさん
2020/02/16(日) 13:08:47.09ID:Yy7z+EdH ってことはキャノンですか。
909デフォルトの名無しさん
2020/02/16(日) 13:10:53.15ID:Yy7z+EdH メモ問題は結局ホワイトボード買ってきた。
ホワイトボードをワンノートに撮影するという昔っぽいことに。
ホワイトボードをワンノートに撮影するという昔っぽいことに。
910デフォルトの名無しさん
2020/02/16(日) 13:11:07.93ID:Rlzwkt+8 流石に社名までは出せんわw
911デフォルトの名無しさん
2020/02/16(日) 13:12:13.52ID:Yy7z+EdH ワンノートのアンドロイド版はカメラにホワイトボードのモードがあるんだけど、テカリ消してくれないし、ホワイトバランスも調整してくれない。
912はちみつ餃子 ◆8X2XSCHEME
2020/02/16(日) 13:12:31.37ID:VK9AAsv4 PostScript くらいならプリンタの側で処理することもあるし、
世間で想像されているよりは高級なことをやっているんじゃないかなぁという気もする。
世間で想像されているよりは高級なことをやっているんじゃないかなぁという気もする。
913デフォルトの名無しさん
2020/02/16(日) 13:16:21.65ID:Yy7z+EdH ってことは、別の人がnew使いまくりなのでは。
914デフォルトの名無しさん
2020/02/16(日) 13:17:17.71ID:Yy7z+EdH テカテカしないホワイトボードないのかな。
915はちみつ餃子 ◆8X2XSCHEME
2020/02/16(日) 13:20:18.57ID:VK9AAsv4916デフォルトの名無しさん
2020/02/16(日) 13:20:51.42ID:Yy7z+EdH ありがとん。
917デフォルトの名無しさん
2020/02/16(日) 13:27:19.36ID:Yy7z+EdH モーター動かしたりするのはnew使ったらダメなんだろな。
918デフォルトの名無しさん
2020/02/16(日) 13:52:37.96ID:Yy7z+EdH リアルタイムOSはヒープあるんだろか。
919デフォルトの名無しさん
2020/02/16(日) 14:03:56.47ID:1DEBeg9G >>900
ゲームに関しては、かなりちゃんとした現場で昔から malloc は使われていたし、全社的に使っても問題ないとされていた。
ゲームに関しては、かなりちゃんとした現場で昔から malloc は使われていたし、全社的に使っても問題ないとされていた。
920デフォルトの名無しさん
2020/02/16(日) 14:33:04.16ID:Rlzwkt+8921デフォルトの名無しさん
2020/02/16(日) 14:34:24.22ID:Rlzwkt+8 >>918
最大実行時間が読める専用のヒープを持ってたりするよ
最大実行時間が読める専用のヒープを持ってたりするよ
922デフォルトの名無しさん
2020/02/16(日) 14:44:07.47ID:Yy7z+EdH あるんだ。
923デフォルトの名無しさん
2020/02/16(日) 14:49:10.64ID:B02+i8yM >>918
ヒープを使うかどうか選べるものが多い
ヒープを使うかどうか選べるものが多い
924デフォルトの名無しさん
2020/02/16(日) 14:53:55.58ID:Yy7z+EdH 選べるってことは、用途によって使い分けが必要って事なんだろな。
925デフォルトの名無しさん
2020/02/16(日) 14:59:29.04ID:D2RmZx9z ループ内で可変長のvector使っているようなのは、外に出してループ始めにclearする方がいい
ループごとにvector出力しなきゃいけない場合も、moveしないでcopyした方がいい
ループごとにvector出力しなきゃいけない場合も、moveしないでcopyした方がいい
926デフォルトの名無しさん
2020/02/16(日) 15:03:54.38ID:k775l7KG >>920
意見されたら喧嘩売りたくなる病気なの?
意見されたら喧嘩売りたくなる病気なの?
927デフォルトの名無しさん
2020/02/16(日) 15:10:11.48ID:D2RmZx9z mallocは使い方が余程ひどく無ければ、性能上問題になることはない
問題になっている場合もプロファイラでその部分だけ対策すればどうにでもなる
断片化やmalloc自体の管理領域容量が気になるほどの環境では使わない方がいいが
問題になっている場合もプロファイラでその部分だけ対策すればどうにでもなる
断片化やmalloc自体の管理領域容量が気になるほどの環境では使わない方がいいが
928デフォルトの名無しさん
2020/02/16(日) 15:11:53.22ID:+ZTPu1gL >>926
それお前じゃね?
それお前じゃね?
929デフォルトの名無しさん
2020/02/16(日) 15:13:28.86ID:+ZTPu1gL >>927
リアルタイム系の仕事したことないならそう言う考え方でもいいと思うよ
リアルタイム系の仕事したことないならそう言う考え方でもいいと思うよ
930デフォルトの名無しさん
2020/02/16(日) 15:17:30.49ID:D2RmZx9z そもそもリアルタイム系の処理で、実処理部分でmallocするってのは普通しないよね
初期化時に必要なバッファはあらかじめ確保しておくものでしょ
そこはmallocだろうが静的確保だろうが変わらないし
初期化時に必要なバッファはあらかじめ確保しておくものでしょ
そこはmallocだろうが静的確保だろうが変わらないし
931デフォルトの名無しさん
2020/02/16(日) 15:23:06.64ID:8bxeBykO >>929はループの中で毎回malloc freeしてるからそりゃ性能が気になるよね
932デフォルトの名無しさん
2020/02/16(日) 15:24:31.11ID:1DEBeg9G >>925
std::vector<TYPE> は、リンクリストではなく、「可変長配列」なので、std::list<TYPE> に比べて、TYPE のコンストラクタがデコボコした頻度で
多めに呼び出されてしまう傾向がある。TYPEのコンストラクタの中で何かをnew していると、new が呼び出される回数をグラフにした場合、
デコボコになるため、速度的に滑らかさがなくなってしまう可能性が考えられる。
それは、newの速度がデコボコなのではなく、std::vector が持つ悪い性質の一つ。
速度的に「滑らか」にしたいならば、std::list の方が適している。
そもそも、C言語がポインタを用意したのは、リンクリストを使いたかったからで、Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
Cの高速性とはリンクリストによるものと言っても過言ではない。
newも、mallocもコンストラクタも、リンクリストと最も相性が良い傾向がある。
cppreferenceなどでも、std::vectorが出てくることが多いが、Cの新かを発揮するにはstd::listの方が良い。
std::vector<TYPE> は、リンクリストではなく、「可変長配列」なので、std::list<TYPE> に比べて、TYPE のコンストラクタがデコボコした頻度で
多めに呼び出されてしまう傾向がある。TYPEのコンストラクタの中で何かをnew していると、new が呼び出される回数をグラフにした場合、
デコボコになるため、速度的に滑らかさがなくなってしまう可能性が考えられる。
それは、newの速度がデコボコなのではなく、std::vector が持つ悪い性質の一つ。
速度的に「滑らか」にしたいならば、std::list の方が適している。
そもそも、C言語がポインタを用意したのは、リンクリストを使いたかったからで、Cはデータ集合用のデータ構造として動的リストではなくリンクリストを用いるのが伝統。
Cの高速性とはリンクリストによるものと言っても過言ではない。
newも、mallocもコンストラクタも、リンクリストと最も相性が良い傾向がある。
cppreferenceなどでも、std::vectorが出てくることが多いが、Cの新かを発揮するにはstd::listの方が良い。
933デフォルトの名無しさん
2020/02/16(日) 15:25:54.32ID:1DEBeg9G934デフォルトの名無しさん
2020/02/16(日) 15:27:49.69ID:D2RmZx9z いやいや、速度がシビアならreserveしとけと
cとの親和性考えなきゃdequeも良いが、cのAPI呼び出し考慮すると結局vectorをうまく使うのが一番良い
cとの親和性考えなきゃdequeも良いが、cのAPI呼び出し考慮すると結局vectorをうまく使うのが一番良い
935デフォルトの名無しさん
2020/02/16(日) 15:28:20.99ID:1DEBeg9G >>929
std::vector<TYPE>を使っていて、TYPEのコンストラクタの中でnewするのはリアルタイム処理には向きません。
その場合、std::list<TYPE>に変えれば劇的に速度が安定するはずです。
std::vector<TYPE>を使っていて、TYPEのコンストラクタの中でnewするのはリアルタイム処理には向きません。
その場合、std::list<TYPE>に変えれば劇的に速度が安定するはずです。
936デフォルトの名無しさん
2020/02/16(日) 15:30:12.10ID:1DEBeg9G >>934
CのAPI呼び出しで集合を渡す場合、通常、集合の要素はコンストラクタを持ちません。
その場合は、std::vectorは適すでしょう。
ところが、要素がコンストラクタを持つ場合は、std::listが適します。
CのAPI呼び出しで集合を渡す場合、通常、集合の要素はコンストラクタを持ちません。
その場合は、std::vectorは適すでしょう。
ところが、要素がコンストラクタを持つ場合は、std::listが適します。
937デフォルトの名無しさん
2020/02/16(日) 15:32:54.67ID:D2RmZx9z vectorで再配置する際にmoveされない前提なのね
938デフォルトの名無しさん
2020/02/16(日) 15:33:13.19ID:1DEBeg9G >>936
補足すれば、APIは、リング0のシステムランドで実装されていることが多いため、
リンクリストの様な複雑な構造が用いられることが少ないのです。
しかし、それはAPIに限った話で、Cは誕生したときから、要素数が変化する
集合には、動的配列よりもリンクリストを用いるのが伝統でした。
伝統と言うよりも、リンクリストこそがCの核心・本質といっても過言では有りません。
補足すれば、APIは、リング0のシステムランドで実装されていることが多いため、
リンクリストの様な複雑な構造が用いられることが少ないのです。
しかし、それはAPIに限った話で、Cは誕生したときから、要素数が変化する
集合には、動的配列よりもリンクリストを用いるのが伝統でした。
伝統と言うよりも、リンクリストこそがCの核心・本質といっても過言では有りません。
939デフォルトの名無しさん
2020/02/16(日) 15:35:27.77ID:1DEBeg9G940デフォルトの名無しさん
2020/02/16(日) 15:36:04.25ID:MPWqg8uW アドレスで直にアクセスできる言語の強みはリンクリストで活きるからごもっとも
941デフォルトの名無しさん
2020/02/16(日) 15:40:23.46ID:+ZTPu1gL942デフォルトの名無しさん
2020/02/16(日) 15:40:27.92ID:pXV6w9YM943デフォルトの名無しさん
2020/02/16(日) 15:42:34.49ID:D2RmZx9z それだとmalloc使うこと自体不味いだろ
確率でmmapしちゃうのだから
確率でmmapしちゃうのだから
944デフォルトの名無しさん
2020/02/16(日) 15:44:00.56ID:pXV6w9YM 別に
>>925の前半でおk
>>925の前半でおk
945デフォルトの名無しさん
2020/02/16(日) 15:46:21.91ID:D2RmZx9z もちろん初期化時以外でね
946デフォルトの名無しさん
2020/02/16(日) 16:01:46.00ID:1DEBeg9G >>937
moveを使いたい場合、要素の TYPE クラスに move 用の記述が必要となるため、手間がかかります。
moveを使いたい場合、要素の TYPE クラスに move 用の記述が必要となるため、手間がかかります。
947デフォルトの名無しさん
2020/02/16(日) 16:01:54.10ID:Yy7z+EdH is_pod_vで事前条件を確認してるけど、PODはなくなるんだってね。
948デフォルトの名無しさん
2020/02/16(日) 16:02:29.34ID:Rlzwkt+8949デフォルトの名無しさん
2020/02/16(日) 16:07:00.64ID:D2RmZx9z listで美味しいのはsplice使いたい時くらいだろ
multi threadのログ統合したい時とかに、lockに必要な時間を最小化出来る
multi threadのログ統合したい時とかに、lockに必要な時間を最小化出来る
950デフォルトの名無しさん
2020/02/16(日) 16:26:27.54ID:c8Po0Swg951デフォルトの名無しさん
2020/02/16(日) 17:05:35.53ID:+vprjU7s 子スレッドを休眠状態で作る方法ない?
起動直後にcondition_variable::waitとかじゃなく
初期状態として
起動直後にcondition_variable::waitとかじゃなく
初期状態として
952デフォルトの名無しさん
2020/02/16(日) 17:13:29.37ID:YrNuZAe7 何のために?それによる
953デフォルトの名無しさん
2020/02/16(日) 18:53:05.64ID:Yy7z+EdH >>950
ありがとん。
ありがとん。
954デフォルトの名無しさん
2020/02/16(日) 21:26:26.27ID:D0JJuQrX >>953
いえいえ
いえいえ
955デフォルトの名無しさん
2020/02/16(日) 23:16:48.80ID:B02+i8yM956デフォルトの名無しさん
2020/02/16(日) 23:20:30.34ID:B02+i8yM957デフォルトの名無しさん
2020/02/17(月) 00:08:48.44ID:U44ZlMgK 白物家電のマイコンやら、pfcのマイコンやらもやったが、そんなのはそもそもmalloc使うような環境じゃなかったしなぁ
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた
RAMもkB単位で少ないし、自由に関数呼べるほどスタックも無いし
割り込み部分はアセンブリで書いてた
958デフォルトの名無しさん
2020/02/17(月) 00:14:53.75ID:/jKzm6f9 今は冷蔵庫や電子レンジもAI積んでネットワークに繋がるIoT時代だけど
それでも組み込みって未だにそんな感じなの?
それでも組み込みって未だにそんな感じなの?
959デフォルトの名無しさん
2020/02/17(月) 00:16:48.70ID:U44ZlMgK まあそれは特に東南アジア向けだったし
日本よりさらにチープだったのかも
日本よりさらにチープだったのかも
960デフォルトの名無しさん
2020/02/17(月) 00:19:59.06ID:uafn9Eqq >>958
そんなのごく一部
そんなのごく一部
961デフォルトの名無しさん
2020/02/17(月) 00:20:59.44ID:uafn9Eqq いまだにチープな8bit CPUもたくさん使われている
962デフォルトの名無しさん
2020/02/17(月) 00:23:25.57ID:U44ZlMgK cortex-m0とか載ってたらもう小躍りしちゃうくらいのリッチさだよね
963デフォルトの名無しさん
2020/02/17(月) 00:34:16.83ID:H8nvOahp リッチなCPUを使うって事は
それだけ求められる事が大きいわけで
それだけ求められる事が大きいわけで
964デフォルトの名無しさん
2020/02/17(月) 07:41:59.44ID:xyBTOgD8 でもCPU節約するために人件費かけて結局商品高いじゃん
965デフォルトの名無しさん
2020/02/17(月) 09:22:40.01ID:usLteeFN 趣味じゃないんだから
当然トータルで考えるよ
開発工数、単価、機能性能、信頼性、供給、大人の事情、...
当然トータルで考えるよ
開発工数、単価、機能性能、信頼性、供給、大人の事情、...
966デフォルトの名無しさん
2020/02/17(月) 10:36:24.72ID:sgjaAMaL ゲーム業界の人だけど
new使っても問題ないってのはおれの常識とは異なる
まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う
組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと
必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める
new使っても問題ないってのはおれの常識とは異なる
まず問題が広すぎる
言いたいことはデフォルトのグローバルヒープを無邪気に使っていいか
ということだと仮定すると
AAAクラスでそんな杜撰なことしてるところはないと思う
組み込みもそうだがリアルタイム性が必要とされるところでは、メモリ予算というものがある
グラフィック、オーディオ、ネットワークなどのモジュールごとにメモリいくらと決められる
モジュールの責任者はその中でやりくりする
ここで大事なのはメモリの最大使用量を保証しなければならないってこと
必要ならローカルのヒープは作ったりするが、この時点で担当者が気ままにnewってのは認められない
基本的にすべてコントロールされる
現実的に最大量が正確に見積もれないものもあるがそれでも最大量は決める
967デフォルトの名無しさん
2020/02/17(月) 10:57:08.38ID:sgjaAMaL といってもグローバルヒープを使わないわけじゃない
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)
あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい
まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう
オープンソースのもので無邪気にmallocするものは多数あるが、それほど荒ぶらなければそのまま使う
(リアルタイム性が不要なら仮想メモリに任せる)
あとmalloc遅くないという論調の人がいるけどそれはベストケースの話でしょう
ヒープメモリが不足したり一度に巨大なメモリを確保する場合はシステムコールになるからずっと遅くなる
ワーストが見積もれないものはリアルタイムで使いづらい
まぁ昨今は仮想マシン上で動くゲームが多数あるわけで気にしなくていいレベルという意見はある
ただesports系で一瞬カつくとか商品性に関わるわけで
また後から直すのも地獄なので
最初から計画的に作るべきだろう
968デフォルトの名無しさん
2020/02/17(月) 11:06:49.04ID:tDJaHp5K ここC++スレだよね、つかぬことだけど
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの?
記憶管理はいつでも如何様にもカスタマイズできるようにtypename Allocatorになってるわけじゃん
なんでいきなり組み込みには向かないとかキリッてんの?
969デフォルトの名無しさん
2020/02/17(月) 12:20:34.06ID:ipOy1V1j970デフォルトの名無しさん
2020/02/17(月) 12:22:54.84ID:tDJaHp5K >>969
kwsk
kwsk
971デフォルトの名無しさん
2020/02/17(月) 12:39:53.15ID:sgjaAMaL >>968
標準ライブラリでもallocatorが指定できないものもあるんだよ
もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ
allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない
それが問題になることもある
標準ライブラリでもallocatorが指定できないものもあるんだよ
もはや今のc++で標準ライブラリを全面的に使いつつ、ヒープを個別に差し替えるのはかなり非現実的だ
allocatorを差し替えられてもnewするタイミングや量はリバースエンジニアリングしないとわからない
それが問題になることもある
972デフォルトの名無しさん
2020/02/17(月) 12:48:18.84ID:2c+OKT/4 てか、静的確保したメモリブロック使うアロケータ書いてそれで標準コンテナ使うのが基本じゃね
まあeastlでも良いが
まあeastlでも良いが
973デフォルトの名無しさん
2020/02/17(月) 12:51:50.81ID:tDJaHp5K >>971
> 標準ライブラリでもallocatorが指定できないもの
例えば?
newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる
ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話
> 標準ライブラリでもallocatorが指定できないもの
例えば?
newだってoperator newですぐカスタマイズできるし
placementで環境依存の細かい設定もできる
ライブラリはISO/IEC14882に固執する必要はなく
サードパーティでも内製でもより都合のよいほうを使えばいい
というだけの話
974969
2020/02/17(月) 12:56:55.88ID:nfQInp9b カスタマイズの話なら真っ先にnewの話をすべきなんだが順番おかしくね?
ていうか今時はallocatorより先にpolymorphic resourceだと思うが
というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・
ていうか今時はallocatorより先にpolymorphic resourceだと思うが
というかそもそもmallocの速度の話からであって、いきなりallocatorの話したり
C++全体を否定されたかのように過剰反応するとか・・
975デフォルトの名無しさん
2020/02/17(月) 13:12:34.13ID:y136Nw0W 仕様通りに書けばいい感じにうごいてくれて、責任は俺にはないとか
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。
思い込んでんじゃってるキッズなんだろう。
デバッグするなんてことはもちろん頭にない。
976865
2020/02/17(月) 13:34:28.75ID:FC0zZXW0977デフォルトの名無しさん
2020/02/17(月) 13:44:11.06ID:nfQInp9b978デフォルトの名無しさん
2020/02/17(月) 14:00:21.02ID:sgjaAMaL >>973
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?
でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね
答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ
ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実
> > 標準ライブラリでもallocatorが指定できないもの
> 例えば?
でしょ?
お前さんは人並み以上にc++知ってると思うけどこの事実知らない
どこで使われてるか知らなきゃ置き換えができないよね
答えはあえて教えない
標準ライブラリのヘッダーをnewでgrepすればallocatorを通さないものが見つかるさ
自分で確認してこりゃ置き換え無理だわと悟って欲しいw
もし見つからないなら後で書くよ
ちなみにグローバルにnewを置き換えるぐらいならmallocのバイナリを差し替えた方が早いし確実
979はちみつ餃子 ◆8X2XSCHEME
2020/02/17(月) 14:31:40.00ID:qpTD/rYC おっ。
野党みたいなことを言い始めたぞ。
野党みたいなことを言い始めたぞ。
980デフォルトの名無しさん
2020/02/17(月) 14:37:47.70ID:nfQInp9b >>979
横からだが、具体的に誰のどこを指してそう思ったのかよろしく
横からだが、具体的に誰のどこを指してそう思ったのかよろしく
981デフォルトの名無しさん
2020/02/17(月) 14:59:36.07ID:QYRwM+i2 >>966
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。
もちろん、むやみやたらと使って全く問題ないわけではない。
が、本当に必要な箇所で使う程度なら(多くの場合)余り問題ないという程度。
大体ゲームの場合のnewやmallocは、敵や弾やイフェクト、3Dオブジェクトなど
を1つずつ収めるために使うことが多いが、ゲームの1シーン内に登場する個数が
newやmallocが問題ない程度に元々なっている事がわりと多いと言うだけ。
3Dの雑草の葉っぱ一枚単位で new したりすると問題になってくるかもしれない。
982デフォルトの名無しさん
2020/02/17(月) 15:51:15.09ID:sgjaAMaL983デフォルトの名無しさん
2020/02/17(月) 16:08:54.93ID:HCTe1ZqE コンシューマかPCかでも違うだろうし
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ
(自分はさほど詳しくないが、基本コンシューマは標準ヒープ使わないはず)
ジャンルによっても違うんじゃね
PCのMMORPGなんかだとシーン中のメモリ確保は必須だろうし
あと草は普通同じメッシュやテクスチャ使うだろうし、揺れを入れるにしても一つ一つにデータ持たせるなんてアホなことしないだろ
984デフォルトの名無しさん
2020/02/17(月) 16:15:08.76ID:tDJaHp5K985デフォルトの名無しさん
2020/02/17(月) 16:32:36.59ID:y136Nw0W いやそれくらい調べろって話だろ。。馬鹿が。
986デフォルトの名無しさん
2020/02/17(月) 16:44:43.28ID:tDJaHp5K >>985
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない
何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい
sgjaAMaLが、自分の話に傾聴してきた人の質問に答えなかった
つまり自分の考えを伝える努力を中止したということでしかない
何人も自らの意見を他人に伝えるには
その意見を説明するしかなく
説明をやめることは沈黙に等しい
987デフォルトの名無しさん
2020/02/17(月) 16:55:56.23ID:9WiS2n1W 黙って調べてくれば?
調べて無いと結論づけられればまた偉そうに出来るだろw
調べて無いと結論づけられればまた偉そうに出来るだろw
988デフォルトの名無しさん
2020/02/17(月) 17:15:39.87ID:9Dh9neDd ちゃうねん。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。
僕が組み込みいうたのはArduinoのことな。
RAM2KBやし。
989デフォルトの名無しさん
2020/02/17(月) 17:31:33.05ID:9Dh9neDd Arduino面白いよ。
990デフォルトの名無しさん
2020/02/17(月) 18:25:59.21ID:sgjaAMaL991デフォルトの名無しさん
2020/02/17(月) 18:30:32.07ID:T3Z0MUY2 この手の人最後まで答えないか
答えても的外れなのしか見たことないわ
答えても的外れなのしか見たことないわ
992デフォルトの名無しさん
2020/02/17(月) 18:32:18.22ID:wtNXL+i7 だね
消えて良いよ
消えて良いよ
993デフォルトの名無しさん
2020/02/17(月) 19:27:27.34ID:XybgTXf7 >>978
std::arrayとか言わないよね
std::arrayとか言わないよね
994デフォルトの名無しさん
2020/02/17(月) 19:33:45.21ID:nfQInp9b arrayのどこに動的メモリ確保が出てくるんだよ
アホか
アホか
995デフォルトの名無しさん
2020/02/17(月) 19:46:45.93ID:9Dh9neDd なぞなぞですか。
996デフォルトの名無しさん
2020/02/17(月) 23:00:17.88ID:HZSaiYXA 漏れはnewのときたまの遅さの可能性に警鐘を鳴らしたからセフセフ、
997デフォルトの名無しさん
2020/02/17(月) 23:06:03.72ID:HZSaiYXA やっぱnew/deleteのレイテンシーを設計に乗せるには非ページプールメモリにアロケートするべきですよねー
998デフォルトの名無しさん
2020/02/17(月) 23:19:17.27ID:sgjaAMaL なんかスレ止めてたら悪いから書いておくよ
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物
もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい
他にもあるけどとりあえずこんなもんで
ひとつは17からallocatorがdeprecatedになったstd::functionね
これは結構知られてるばずだ
定期的にこれ濫用する人が現れるんだけど中身理解してから使うか判断しろと職場では言っている代物
もうひとつあげるなら、
処理系によってかなり違うかもだけどstd::threadも中でこっそり内部クラスをnewしてるはず
ただスレッド間で引数を引き渡すためのものでサイズは小さいしスレッド作るコストの方が遥かにでかいから問題にはなりにくい
他にもあるけどとりあえずこんなもんで
999デフォルトの名無しさん
2020/02/17(月) 23:46:06.60ID:HZSaiYXA std::functionを使わないと1 bitもプログラムが書けなくなった漏れガイル、
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー
クロージャをいちいちクラス定義から手で書く日々に戻るのはいやじゃー
1000デフォルトの名無しさん
2020/02/17(月) 23:54:13.03ID:HCTe1ZqE10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 17日 3時間 0分 7秒
新しいスレッドを立ててください。
life time: 17日 3時間 0分 7秒
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強 沿岸部に津波警報 ★2 [ぐれ★]
- 【速報】高市総理が官邸入り [Hitzeschleier★]
- 【震度6強】政府 危機管理センターに官邸対策室を設置 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 高市内閣「支持」64%「不支持」19% NHK世論調査 ★2 [少考さん★]
- 東北電力、女川原子力発電所の安全設備に異常は確認されていないと投稿 午後11:52 [少考さん★]
- 高市すごい勢大発生 [256556981]
- 地震 ★2
- 【速報】高市早苗、起床 [779938112]
- 青森で大火事 [579392623]
- 【🏡】岩手ビックウェーブ🏄うおおおおおおおおおおお🌊
- 大地震
