C++相談室 part148

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

前スレ
C++相談室 part147
https://mevius.5ch.net/test/read.cgi/tech/1576659413/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
2020/02/10(月) 10:46:13.48ID:oMyz9pGE
機械学習ならpythonほぼ必須なんだが
いまだにやったことないとか
ロートルなのを白状してるようなもん
2020/02/10(月) 11:15:12.10ID:yW0oU9fF
変数がどんな型にも化けられる変態言語
2020/02/10(月) 11:25:16.00ID:8A84p9rG
pythonがいいとは思わないけど、perlがクソすぎるので相対的にマシだから流行ってる
それ以上の理由はないと思う
2020/02/10(月) 11:37:39.28ID:oMyz9pGE
perlの代替っていつの時代の話だよ
お前完全に取り残されてるぞ
2020/02/10(月) 11:50:23.10ID:SkPzv01G
Pythonは、スマホで動かすのは難しいらしい。
少なくともスクリプト言語として動かすのは困難。

デスクトップマシンですら、
・互換性の問題がある。Ver 2系と Ver 3系で大幅に異なると聞いた。
・Windowsですらどの処理系が標準か不明。
・GUIがちゃんとまともに使えるかどうか不明。
2020/02/10(月) 11:55:31.13ID:SkPzv01G
>>630
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なんかより遥かに簡単に使える。
2020/02/10(月) 12:13:49.40ID:gblDkkh1
>>625
- 括弧などに従って自動でインデントが付く
- 手動 (あるいは半自動) でインデントの位置を合わせる

これの二択だったら前者の方が「きっちり」してると思うわ。
まあインデントの付け方にいくつかの選択肢がある点はやりづらい面も
あるかもしれんが、自由度と統一性は両立できないもんだしな。

Python はいじったことないからよう知らんけど、 (インデントで構造を表す系統の文法である) Haskell を書くのはつらかった。
Haskell ではインデントと改行の替わりに波括弧とセミコロンも使えるけど、Python にそういうのないの?
2020/02/10(月) 12:34:04.03ID:oMyz9pGE
pythonをswift, javaなんかと比較してる人は
隔離された世界で誰にも使われないアプリを細々と作ってる感じがするわw
学習系を含むデータ解析のツールとして環境が優れてるからpythonが人気なんだよ
c++でテンプレートいじってるよりビッグデータ解析してビジネス提案できる方がはるかに収入高い
2020/02/10(月) 12:51:05.23ID:gblDkkh1
おっ、煽り入りました〜〜
2020/02/10(月) 13:26:43.90ID:NGNAXTbr
ビジネス提案おじさん
2020/02/10(月) 14:18:49.02ID:SkPzv01G
>>633
ブロック開始終了記号とインデントを両方組み合わせたものが一番分かり易くて間違いにくい。
インデントだけでやると、個人的には見間違いそうで神経をすり減らすので辛い。
638デフォルトの名無しさん
垢版 |
2020/02/10(月) 17:30:56.95ID:rxX2x5Pb
研究者が使うのにPythonは良い選択なんじゃないの。
事務作業にVBAが良い選択なのと同様に。
2020/02/10(月) 17:40:26.33ID:pqZ9DEAl
今さらですが、そもそもWin32のFALSEって、0であることは保証されてるんですか?

BOOL b = FALSE;
if (b)
{
  ここに来ないことは保証されてるんですか?
}
2020/02/10(月) 17:42:58.97ID:SkPzv01G
>>639
まともな C/C++ では、FALSE はどんな処理系でも 0 であることが保障される。
2020/02/10(月) 17:43:39.45ID:SkPzv01G
>>639
当然、そこに来ないことも保障される。
2020/02/10(月) 17:52:19.21ID:M5G7J8Pl
>>639
規格書のようなレベルで規定されているかどうかは知らないけど、公式ドキュメントの至るところで
FALSEは0である前提で書かれているものが見つかるから、そこを疑う必要はないと思う。

>>640
FALSEはWindows SDKの定義であってC/C++とは直接関係ないんだが。
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 があるのはアレだよな……。
2020/02/10(月) 18:06:40.24ID:AZ4KAaI2
システムハンガリアンもそうだけど明白な違反が堂々と放置されているからなあ
2020/02/10(月) 18:08:58.46ID:SkPzv01G
>>642 >>643
[根拠]
数学的に以下の根拠となる:

1. FALSE は、if ( FALSE ) とすると、偽として処理されることは絶対に保障される。
2. if (x) で x が偽として評価されるのは、ANSI C も、古い C でも必ず 0 という1つの値のみであり、他の値はすべて真と評価される。

1, 2 を両方成り立たせるためには、FALSE は必ず 0 でなければならないことが
証明される。
2020/02/10(月) 18:10:00.98ID:SkPzv01G
数学が大事です。
今の場合、仕様書に書いてなくても、数学的に考えれば絶対であることが証明できます。
2020/02/10(月) 18:13:48.89ID:M5G7J8Pl
昨日の奴かw
BOOLとboolは別物だということが結局最後まで理解できなかったんだな。
2020/02/10(月) 18:19:36.47ID:1F9oSbm6
windows apiのスレでやってくれよ
2020/02/10(月) 18:21:23.11ID:1D/jLqBa
>>645
頭が悪いとか話が通じないってよく言われない?
言われる度に相手の方が間違ってると思ってるだろうけど、話が通じてないのはお前が自分の間違いを認識できてないからだぞw
2020/02/10(月) 18:22:28.83ID:SkPzv01G
このスレには、失礼ですが、はちみつさんも含め、数学に弱い人が多いようです。
651デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:23:02.20ID:SkPzv01G
>>649
いや、むしろ逆に現実では天才と呼ばれています。
2020/02/10(月) 18:25:05.67ID:SkPzv01G
仕様書にすべては書いてなくても、数学で考えれば絶対であることが証明できる事柄があるのです。
今回のもその一例です。
2020/02/10(月) 18:25:15.66ID:gblDkkh1
ああ、荒らしに来ただけか。
まぜっかえすにしてももうちょっとマシなこと言えよ。
2020/02/10(月) 18:27:13.76ID:rZ6GQco7
東大数学科卒だが
>>650は頭が弱いと思う
655デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:27:37.23ID:rxX2x5Pb
マクロはほとんど書く必要なくなったよね。
2020/02/10(月) 18:27:43.95ID:SkPzv01G
失礼ですが、はちみつ氏は、C++の仕様には詳しいですが、それ以外は結構間違っています。
2020/02/10(月) 18:29:09.02ID:rZ6GQco7
>>656
ここでの君の書き込みだけで判断すると
君が間違ってる可能性が高い
658デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:29:40.36ID:SkPzv01G
>>654
でも現実に私は天才と言われています。
2020/02/10(月) 18:30:41.13ID:rZ6GQco7
数学の実績は?
660デフォルトの名無しさん
垢版 |
2020/02/10(月) 18:31:14.06ID:SkPzv01G
>>1
私は、東大数学科の人とは意見が一致することが多いです。
よく考えてみてください。
もし分からないようなら、多分、あたなは東大数学科ではないか、レベルが落ちてしまったと思われます。
2020/02/10(月) 18:33:21.87ID:rZ6GQco7
学科は?
2020/02/10(月) 18:33:32.23ID:M5G7J8Pl
まとめるとこう。

1. BOOL型およびTRUE/FALSEは真偽値として用いるために*Windowsで独自に定義*されたものだが
 厳密には真偽値と振る舞いが異なる
2. 具体的には、FALSEでなれければTRUE、TRUEでなければFALSE、という排中律が成り立たない
3. 排中律が成り立たない以上、FALSEとの比較、TRUEとの比較はそれぞれ意味がある
2020/02/10(月) 18:34:10.03ID:SkPzv01G
ここは、学歴も実績も嘘を付けてしまうので参考になりません。
東大数学科と言うのもたぶんデタラメでしょう。
2020/02/10(月) 18:34:25.57ID:rZ6GQco7
なんでWindows前提?
2020/02/10(月) 18:37:31.54ID:rZ6GQco7
排中律君も数学君と同じ人かと思った
違うのかな?

普通の言葉で書こうよ
書けるでしょ
2020/02/10(月) 19:01:26.22ID:gblDkkh1
>>664
TRUE を持つ内では皆が共通に論じられるほど広く知られたもののひとつだからでしょ。
反例としてはひとつあれば充分。
ちなみに「TRUE と比較するべきではない」に対する反例ね。

true であれ TRUE であれ、それと == で比較するのが罠になりやすいっつーのは
罠になりやすい部分として有名すぎて逆によく知られている常識だが、
絶対不変の定理みたいに言い始めたやつがいたから変なことになってるんだよ。

現実はそんな綺麗なもんじゃねーよっていうのに Windows はうってつけだろ?
2020/02/10(月) 19:02:19.07ID:VRCQc/iz
BOOLはWindows APIでしか使わないと思ってるから話が通じないんだな

数学君はなぜ話が通じない?
BOOLがTRUE, FALSE, UNKNOWN, ERROR
からなる集合だったら?
2020/02/10(月) 19:04:47.41ID:4ZzuDNO4
>>664
>>639からの流れで、あくまでWin32APIの中でのFALSEの話をしているからだろう
2020/02/10(月) 19:06:03.16ID:VRCQc/iz
BOOLは非常に広い環境で使われていて
その多くはTRUE/FALSEの2値を示す型として使われる

こういう普通の環境では
if (b) / if (!b)
で判断するのが最良

そうではない特殊な環境(Windows APIなど)は
個々のAPI別に語らないと意味が無い
2020/02/10(月) 19:06:46.57ID:VRCQc/iz
Wimdows APIに限定した話ならここですべきではない
他へ
2020/02/10(月) 19:33:07.36ID:M5G7J8Pl
つまり、Windowsで>>439のように書いていたのをWindowsのBOOLを知らずに否定しちゃう人、
というネタそのものを体現してくれたわけだな。
2020/02/10(月) 19:35:42.65ID:Ro8qON5e
BOOLについて議論するならどのBOOLか限定しないと
enum BOOL {TRUE,FALSE};
みたいなのかもしれないし

負論理の入出力ポート読み書きする値だとかで順番も重要だったりして
2020/02/10(月) 19:47:34.98ID:VRCQc/iz
>>671
何が「つまり」だか

Windows APIが色々と特殊なのは知ってるよ
Windows 2.0から組んでるし

特殊事情はあくまで特殊事情
2020/02/10(月) 19:56:01.41ID:M5G7J8Pl
そもそも、特殊じゃない「普通の環境」のBOOLって何ぞ?
typedef bool BOOL; とかw
675デフォルトの名無しさん
垢版 |
2020/02/10(月) 20:01:48.67ID:rxX2x5Pb
https://ideone.com/T9gWWT
こうなるので、負の型にキャストするのが良いんですかね?
2020/02/10(月) 20:25:38.47ID:L7QZkeGE
なんでBOOLの話をしてんだよジジイども
2020/02/10(月) 20:46:16.46ID:te1zn0Q+
標準にはboolと_Boolしかないんだからそれ以外はどこぞの馬の骨が好き勝手に決めただけの独自定義
そのライブラリのマニュアル熟読しろでこの話は終わり
2020/02/10(月) 21:07:46.28ID:oMyz9pGE
>>675
そうなんだけど
C言語スレでやれ
じじくさい話ばっかりでうんざりするわ
2020/02/10(月) 21:11:10.36ID:dan9Jlhp
ナウでヤングな話題よろ
2020/02/10(月) 21:30:33.43ID:Ui+QSiGG
じゃあboolに戻すけど
if (b == true)
これ書く異常者は一定数おるわな
2020/02/10(月) 21:33:51.78ID:3bnN/FFY
>>680
私には正常な書き方に思えますよ
その書き方のどこが異常なのでしょうか?
2020/02/10(月) 21:37:09.03ID:AZ4KAaI2
if (b) で済むのを
if (b == true) と書くのは
if (b == true == true) と書く異常者と同じ
きりねえって話
2020/02/10(月) 21:38:01.11ID:AZ4KAaI2
括弧ねえと読めねえ「異常者」出てこいw
684デフォルトの名無しさん
垢版 |
2020/02/10(月) 21:49:47.77ID:rxX2x5Pb
>>678
ちゃうねん。
2020/02/10(月) 21:51:16.94ID:oMyz9pGE
>>683
つまんないことでイキんなカス
2020/02/10(月) 21:51:26.11ID:M5G7J8Pl
bool b;
if (b == true) // コードスメルではあるがバグではない

BOOL b;
if (b == TRUE) // 正しいか正しくないかは状況による
2020/02/10(月) 21:53:08.25ID:AZ4KAaI2
>>685
C++スレでC++以外の言語という「つまんないこと」でイキってんのおまえだろ
2020/02/10(月) 21:53:54.97ID:AZ4KAaI2
おまえみたいの「いちびり」って言うんだけど意味わかる?w
2020/02/10(月) 21:55:45.19ID:3bnN/FFY
>>682
バグにならなければ問題ないのでは?
>if (b == true == true)
とは私も書きませんが、だからといって異常だとは思わない

というか、あなたの「異常」の定義が異常なのでは?
2020/02/10(月) 21:56:36.80ID:3bnN/FFY
>>688
いちびり、とは、あなた、関西人ですなぁ
2020/02/10(月) 22:02:36.14ID:AZ4KAaI2
>>689
正常と異常の境をおまえさんはどこだと思っている?
2020/02/10(月) 22:02:53.98ID:VRCQc/iz
>>674
Windowsしか知らないの?
世界が狭い

非常に多くの環境でBOOLを使う
2020/02/10(月) 22:03:55.09ID:AZ4KAaI2
>>690
ああ、おまえほんまは関西人ちゃうなw
俺もほんまの関西人ちゃうけどなw
2020/02/10(月) 22:04:40.63ID:AZ4KAaI2
>>692
大文字のBOOLを使う「非常に多くの環境」とは?
2020/02/10(月) 22:06:02.65ID:VRCQc/iz
>531や>>682が異常とは思えないって
まじかQZ
2020/02/10(月) 22:07:56.51ID:M5G7J8Pl
>>692
その定義を出してみなよ。
標準の仕様じゃないんだからその環境ごとの特殊な定義であることは変わらんだろ。
2020/02/10(月) 22:14:01.58ID:VRCQc/iz
本当に知らないんだ
まじか
2020/02/10(月) 22:22:07.37ID:4ZzuDNO4
>>697
その返しは口喧嘩に負けた小学生みたいだから、ちゃんと相手の質問に答えなよ
2020/02/10(月) 22:23:41.11ID:1F9oSbm6
非常に多いなら具体例2、3あげて終わりでしょ
2020/02/10(月) 22:24:53.62ID:M5G7J8Pl
もう自分で何を言っているのかわからなくなっているんだろうな。
BOOLやTRUEの定義が環境によって異なる場合があると認めた時点で

if (b == TRUE)

これが正しいと言えるかどうかはその定義次第だということになるのに。
2020/02/10(月) 22:29:19.34ID:TAH0RZ5f
俺の狭い経験だと
BOOLはintで、TRUEは1、FALSEは0
しか見たことないけど、他の定義の環境ってあるのかな?
2020/02/10(月) 22:33:34.58ID:PZnoEIEf
−1というか全ビットonは何かで見た
2020/02/10(月) 22:50:32.94ID:Qny4UpdU
windef.hのFALSEが-1とかに変更されたら、既存のソースは崩壊だろうな
2020/02/10(月) 23:14:46.53ID:zaYnGTVS
!FALSE
2020/02/10(月) 23:38:01.28ID:yW0oU9fF
typedef unsigned BOOL:1;
ならまだ救いがあった
なんでint型にしてんだろうな
2020/02/11(火) 00:40:44.45ID:wwgXq7Q5
>>705
それは BitField みたいだけど、構造体メンバ以外で使えるようになったんだっけ?
2020/02/11(火) 01:18:20.91ID:wwgXq7Q5
>>703
FALSEは絶対的に0のまま。
2020/02/11(火) 01:20:55.07ID:wwgXq7Q5
もしかしたら、Rubyが、0をtrueと解釈してしまうことから変なことを思ってる
人がいるのかもしれないが、C/C++においては、言語仕様的に条件式で偽と
解釈されるのは、古くから、唯一、整数の 0 しかないなかったので、言語仕様が
修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
2020/02/11(火) 02:07:59.10ID:iFdutQCH
あれ?
もしかして私・・また同じ日を繰り返してる・・??
2020/02/11(火) 02:12:10.45ID:lTJc7ZeR
まだやってんのかお前ら
ゲハ厨みたいなスレだな
2020/02/11(火) 02:43:47.12ID:wwgXq7Q5
>>708
スマン:
誤:修正されない限り TRUE が 0 以外の値にマクロ定義されることは絶対に無い。
正:修正されない限り FALSE が 0 以外の値にマクロ定義されることは絶対に無い。
2020/02/11(火) 02:58:41.73ID:f/mZFEPY
>>681
if(b)で十分なのにif(b==true)と書くのはif((a==b)==true)と書くのと同じで冗長なんだよ
これがすぐに理解できないなら論理を簡潔にする能力が欠如してるのでプログラミングの才能はないね
2020/02/11(火) 03:04:36.42ID:wwgXq7Q5
>>712
しかも、b は、少なくとも見かけ上は int 型ではなく、BOOL 型だし。
それに他の言語の場合、if の条件式に入れられるのは唯一 bool 型の
場合があり、一番 if の条件式に入れ易い型。
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) とするのが美しく見える。
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 は、実質的にブール型
2020/02/11(火) 06:36:51.44ID:DrkniQZr
bool型が存在しない時代に何故bool型になるのか
2020/02/11(火) 08:01:59.71ID:Sh/x76Zj
>>695
異常を「コンパイラがコンパイルできない」と定義していますから
2020/02/11(火) 08:02:50.77ID:Sh/x76Zj
>>712
コンパイルが通るんだったら異常ではないのでは?
2020/02/11(火) 08:03:52.59ID:Sh/x76Zj
>>712
>論理を簡潔にする能力が欠如してる
簡潔すぎてわかりにくいのも困りますね、プログラミングはまず他人への分かりやすさを優先するべきでは?
2020/02/11(火) 08:29:09.76ID:lXsf9fbV
簡潔過ぎて分かりにくいって何?

if (b) で分かりにくいなら
変数名が適切でないとかそもそも分かりにくい作りとか
他に問題があるんじゃないの?
2020/02/11(火) 08:33:12.52ID:lXsf9fbV
もしかして
if (a ==b)
よりも
if ( (a == b) == true )
の方が見やすいとかいっちゃう?
2020/02/11(火) 08:56:04.07ID:tUwi24Vl
そりゃ
if (a == 42)
よりも
if (a == 42 == true)
のほうが見やすいし
if (a == 42 == true != false)
のほうがさらに見やすいのが異常者
2020/02/11(火) 08:58:48.06ID:lXsf9fbV
カッコも付けないと見にくいよな

if (((a == 42) == true) != false)
2020/02/11(火) 09:09:46.71ID:Kcy+Q8b9
どれだけ冗長に書けるか選手権?
2020/02/11(火) 09:15:23.55ID:oAfdlMqH
QZは変なこだわりに固執するやつだから、一般的な感覚とか常識とかについて議論しようとしてもそもそも議論が噛み合わないし、スレを無駄に汚すだけ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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