エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
探検
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
レス数が900を超えています。1000を超えると表示できなくなるよ。
2018/12/28(金) 06:04:52.38ID:ufThBpcD
841デフォルトの名無しさん
2019/04/14(日) 00:56:08.63ID:El+pt49w 書き込み制限受けたので続き。多分コレで終わり。
あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
あのインストーラが表示している著作権表示は明確に LGPL だから適用条件満たしてないと解釈する余地がある、と
…わたしはただの学習者だから大騒ぎすることでもねえんだがねえ…
842デフォルトの名無しさん
2019/04/15(月) 21:39:53.28ID:L7qqGgg7 int& a;
int &a;
どっちにすべきでしょうか
int &a;
どっちにすべきでしょうか
843デフォルトの名無しさん
2019/04/15(月) 21:52:39.66ID:zTAvdEPs 好きな方で書け
844デフォルトの名無しさん
2019/04/15(月) 21:56:00.71ID:dimPC8Ge 「すべき」というのは規格表での『shall』のことですか?
それとももっと別の意図がありますか?
それとももっと別の意図がありますか?
845デフォルトの名無しさん
2019/04/15(月) 22:02:16.06ID:1nT5zSFt int & a;
int * b;
int * b;
846はちみつ餃子 ◆8X2XSCHEME
2019/04/15(月) 23:26:36.86ID:94OTneyx std::add_lvalue_reference<int>::type a;
847デフォルトの名無しさん
2019/04/16(火) 07:00:13.97ID:xjyBK9QH そんなこと気にする前に参照の変数を未初期化で使おうとするなよ。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。
「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。
みたいなツッコミを入れたくなるけど、コンパイル時にエラーが出る
間違いは必ず見落としなく直せるから実際は大きな問題じゃないよね。
「ポインタ宣言の * を型名に寄せるか変数名に寄せるか」と同じで
一貫した書き方をするかぎり、どっちでも構わんでしょ。
個人的には「変数名に寄せる」派だけど。
848デフォルトの名無しさん
2019/04/16(火) 08:18:02.67ID:hl7GJiol int& a, &b;
int &a, &b;
自分も後者の方がいい
int &a, &b;
自分も後者の方がいい
849デフォルトの名無しさん
2019/04/16(火) 08:20:49.86ID:GDkTCt4E850デフォルトの名無しさん
2019/04/16(火) 11:22:25.45ID:vZl8q5zB851デフォルトの名無しさん
2019/04/16(火) 12:24:17.44ID:uqcfe1Iw わからない事をここで質問しようとレスを書いてる最中に「わかった!」
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
ってなることが多々あるんだが、この謎の現象は何なんだ・・・
852デフォルトの名無しさん
2019/04/16(火) 12:28:15.56ID:4RjIOnLA 自己解決パターン
質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決
いろいろあるが
質問するときに頭の中が整理される→解決
質問するために再現する必要最小限のコードを書く→問題の切り分けが出来る→解決
いろいろあるが
853はちみつ餃子 ◆8X2XSCHEME
2019/04/16(火) 13:21:34.50ID:XnNfa6Fy >>851
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。
この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
何が駄目なのかわかれば解決法は自明であることが多い。
逆に言えば、解決法がわからないときは問題が何であるかわかってなかったりするんだよ。
だから、きちんとした形に質問をまとめれたなら、それはもうほとんど解答でもあるんだ。
この手法を利用してバグを取り除くやり方としてラバーダックデバッギングというものが知られている。
854デフォルトの名無しさん
2019/04/16(火) 13:51:09.84ID:WfxisTJA C++erならRust学べって風潮嫌い
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
なんで学習コストがある言語を2つも学ばないといけないのかと思うし
855847
2019/04/16(火) 17:31:42.92ID:xjyBK9QH856デフォルトの名無しさん
2019/04/16(火) 17:55:46.56ID:LqBdGBd1 その場合でもコンストラクタで初期化してなかったらエラー出るんだから
説明自体は間違ってない
説明自体は間違ってない
857デフォルトの名無しさん
2019/04/16(火) 21:38:13.69ID:5Rly8M3u >>853
テディベアをおいておくというエピソードなら有名だね
テディベアをおいておくというエピソードなら有名だね
858デフォルトの名無しさん
2019/04/16(火) 22:14:36.94ID:dFuxCqAG >>854
難しいことも違った方向から見るとわかりやすくなることもある。
難しいことも違った方向から見るとわかりやすくなることもある。
859デフォルトの名無しさん
2019/04/19(金) 11:24:45.99ID:qKKG75KJ 質問です。
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました
ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
cinの戻り値のistream&がなんでif(cin)みたいに真偽判定に使えるのかが発端です。
https://stackoverflow.com/questions/8117566/why-istream-object-can-be-used-as-a-bool-expression
こことか見たんですけど、
1.istreamはbasic_iosを継承してて、
2.basic_iosで型変換演算子explicit operator bool() const;が定義されてる
ってとこまでは理解しました
ここからが質問なんですけどこの型変換ってのは勝手に行われるもんなんですかね
if(something)って書いたらif(bool(something))っていつもやってるんでしょうか
860デフォルトの名無しさん
2019/04/19(金) 11:40:22.57ID:ymX8VCBl intで参照したらEOF
861デフォルトの名無しさん
2019/04/19(金) 12:05:08.07ID:r9r2BfdP 型変換以前に0やnullポインタを評価するとfalse、0以外の値はtrueと評価されると決まっているからだろ。
あと暗黙の型変換はよく起こる。
あと暗黙の型変換はよく起こる。
862デフォルトの名無しさん
2019/04/19(金) 12:08:35.86ID:lgg24wim if 文の条件判定部は bool 型を要求してる前提で解釈,翻訳してるんじゃない
863はちみつ餃子 ◆8X2XSCHEME
2019/04/19(金) 12:13:29.89ID:mypEidUJ864デフォルトの名無しさん
2019/04/20(土) 09:49:03.76ID:9bTTnEnG 前橋和弥さんのC言語ポインタ完全制覇という本で、
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
PCの環境(CPUの種類など)によってデータのメモリ上の配置は異なる
(構造体のパディングをはじめ、ただの単体のintでさえバイトオーダーが異なる(ワークステーションではビッグエンディアン採用だったりする))
ので、メモリの内容をバイナリでディスク上のファイルに出力したデータは別環境で読み込んで使おうと思ってはいけない
というような事が書いてありましたが、この話はWindows以外の環境や古い環境を前提とした話なのでしょうか?
同書にWindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてあるので、
Windows環境ならゲームのセーブデータとしてクラスをまるごとfwriteでバイナリ出力したファイルを別PCでロードしても問題ないのでしょうか?
(Xeonとかワークステーションマザーとか関係なしに、IntelCPU&Windowsの環境ならばリトルエンディアンで統一されている?)
(Macではビッグエンディアンになるが、Windows環境のみ対応のゲームを作る上では無視してよい?)
という認識は間違っているでしょうか?
パディングの違いなどもWindowsやVisualStudioが自動で良きに計らってくれるのならありがたいのですが…
865デフォルトの名無しさん
2019/04/20(土) 09:54:32.44ID:gSzU4BUh windows間だから「別環境」ではなく「同じ環境」
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない
なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている
だからwindowsでも同じ
そのbmpデータをmacに持って行っても使えない
なので磁気コアをダンプして永続化したようなデータは、他の全ての環境で使えない
60年代くらいから知られている
866デフォルトの名無しさん
2019/04/20(土) 12:00:13.06ID:9bTTnEnG >>865
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね
>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした
Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
Windows環境であれば、別PC(別ハード)でも同環境とみなして良いのですね
>>WindowsではBMPファイルをfwriteでファイルへダンプしていていかにもWindowsらしいとも書いてある
読み直したら、違ってましたm(_ _)m
可変長構造体の節で、
WindowsではBMPをfwriteなどで可変長構造体まるごとダンプしていて、
BMPのような他の環境にもっていく可能性が高いファイルを構造体まるごとダンプしているのがWindowsらしい
というような内容でした
Windows級の一流プログラマーでも構造体まるごと出力を使っているのであれば、
ゲームのセーブデータで構造体やクラスをまるごとバイナリ出力しても問題ないととらえてよいのかな?
867デフォルトの名無しさん
2019/04/20(土) 12:30:10.75ID:4KhiFNHT >>866
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)
自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね
bmpファイルには仕様があるので「Windowsのプログラマがどうたら」なんぞ関係無く仕様に従って読み書きすべし
(現実には仕様に従わない入出力をやらかすアプリ毎に対処することはあるが)
自分で定義した構造体でも外部に公開するなら仕様を決めそれに準ずるべし
公開しないならそれこそ構造体丸ごとダンプなり好きにすれば良い
実際にそういう実装は珍しいものじゃない
どうせ環境の変化で困るとしてもそれは自分だけだからね
868デフォルトの名無しさん
2019/04/20(土) 12:41:44.36ID:YI/oz/6Z869デフォルトの名無しさん
2019/04/20(土) 13:30:16.46ID:9bTTnEnG つまり、後で困りたくなかったら、フォーマット(読み書きするサイズと順番?)を決めて
構造体のメンバ変数ひとつひとつ読み書きしていかないとだめなのか
…めんどくさいなー
構造体のメンバ変数ひとつひとつ読み書きしていかないとだめなのか
…めんどくさいなー
870デフォルトの名無しさん
2019/04/20(土) 13:36:22.54ID:VX0Nm4MT 異なる環境で扱う可能性のあるファイルならフォーマットを決めるのは当然だが
メンバ毎にアクセスしなければならないかどうかは処理系によるだろう。
仕様さえ合えば構造体で読み書きしてもいいわけで。
メンバ毎にアクセスしなければならないかどうかは処理系によるだろう。
仕様さえ合えば構造体で読み書きしてもいいわけで。
871デフォルトの名無しさん
2019/04/20(土) 13:50:12.18ID:bN8wmmjE 構造体まるごと fread/fwrite した後に
環境に応じて必要な場所だけLE/BE の変換をかける
htons とか htonl とか使う
環境に応じて必要な場所だけLE/BE の変換をかける
htons とか htonl とか使う
872デフォルトの名無しさん
2019/04/20(土) 14:02:21.45ID:lwUZZddo どういう読まれ方をするか分からない時はXML型式のテキストファイルにしてしまう
873デフォルトの名無しさん
2019/04/20(土) 14:59:40.99ID:9bTTnEnG874デフォルトの名無しさん
2019/04/20(土) 15:15:30.02ID:n+3CNjUJ 自分では使ったことないけど、BoostのSerializationは?
875はちみつ餃子 ◆8X2XSCHEME
2019/04/20(土) 16:21:19.89ID:7hm/FBJ7 パーサコンビネータはバイナリファイルに使ってもいいんだよ。
あとは protobuf とかのジェネレータ系のツールもありかな。
あとは protobuf とかのジェネレータ系のツールもありかな。
876デフォルトの名無しさん
2019/04/20(土) 18:28:05.65ID:wS9Za22Y VC++用に使ってるマシンのCPUがivy bridgeのi5の3570なんだけど、
そのマシンでは8の倍数バイトを境界としてパディングが入ってるかんじなんだけど、
Core2Duo世代のCPUだとどうなんだろう?
4の倍数バイトを境界とする様な古いCPUがネットバースト世代以前とかの相当古い環境だとしたら、もう動作対象環境から外しても良い気がしてきた
そうだとしたら、クラスまるごとバイナリ読み書きでよいのかな
そのマシンでは8の倍数バイトを境界としてパディングが入ってるかんじなんだけど、
Core2Duo世代のCPUだとどうなんだろう?
4の倍数バイトを境界とする様な古いCPUがネットバースト世代以前とかの相当古い環境だとしたら、もう動作対象環境から外しても良い気がしてきた
そうだとしたら、クラスまるごとバイナリ読み書きでよいのかな
877デフォルトの名無しさん
2019/04/20(土) 18:51:11.02ID:IzYZbHJM878デフォルトの名無しさん
2019/04/20(土) 19:22:01.02ID:wS9Za22Y >>877
ありがとう
これでどうかな?
//-------------------------------------------------
#include <stdio.h>
#include <conio.h>
class ClassName
{
public:
int int_1;
double double_1;
char char_1;
double double_2;
};
int main(void)
{
ClassName class_obj;
printf("クラスインスタンスのサイズ:%d\n",sizeof(class_obj));
printf("int_1のアドレス:%p\n",&class_obj.int_1);
printf("double_1のアドレス:%p\n",&class_obj.double_1);
printf("char_1のアドレス:%p\n",&class_obj.char_1);
printf("double_2のアドレス:%p\n",&class_obj.double_2);
_getch();
return 0;
}
//-------------------------------------------------
クラスインスタンスのサイズが24なら4の倍数バイト、32なら8の倍数バイトの境界になってると思う
(8の倍数バイトの境界なら、各メンバのアドレス(16進数表示)が全部8違いになってるはず)
ありがとう
これでどうかな?
//-------------------------------------------------
#include <stdio.h>
#include <conio.h>
class ClassName
{
public:
int int_1;
double double_1;
char char_1;
double double_2;
};
int main(void)
{
ClassName class_obj;
printf("クラスインスタンスのサイズ:%d\n",sizeof(class_obj));
printf("int_1のアドレス:%p\n",&class_obj.int_1);
printf("double_1のアドレス:%p\n",&class_obj.double_1);
printf("char_1のアドレス:%p\n",&class_obj.char_1);
printf("double_2のアドレス:%p\n",&class_obj.double_2);
_getch();
return 0;
}
//-------------------------------------------------
クラスインスタンスのサイズが24なら4の倍数バイト、32なら8の倍数バイトの境界になってると思う
(8の倍数バイトの境界なら、各メンバのアドレス(16進数表示)が全部8違いになってるはず)
879デフォルトの名無しさん
2019/04/20(土) 20:52:42.24ID:IzYZbHJM >>878
ソースありがとう
クラスインスタンスのサイズ:32
int_1のアドレス:0036F7A0
double_1のアドレス:0036F7A8
char_1のアドレス:0036F7B0
double_2のアドレス:0036F7B8
これで情報足りるかな?
ttps://i.imgur.com/YAVbZWa.jpg
ソースありがとう
クラスインスタンスのサイズ:32
int_1のアドレス:0036F7A0
double_1のアドレス:0036F7A8
char_1のアドレス:0036F7B0
double_2のアドレス:0036F7B8
これで情報足りるかな?
ttps://i.imgur.com/YAVbZWa.jpg
880デフォルトの名無しさん
2019/04/20(土) 21:11:23.94ID:wS9Za22Y >>879
どうもありがdd
Core2Duoで8バイト境界になってるなら、もう4バイト境界の環境の事は無視しても大丈夫なのかもね
思ったんだけど、もしかしたら、32bit(4バイト)のみ対応のCPUと32bit/64bit(8バイト)両対応のCPUの違いなのかな?
違うかな?そんなに単純な話ではないか・・・
どうもありがdd
Core2Duoで8バイト境界になってるなら、もう4バイト境界の環境の事は無視しても大丈夫なのかもね
思ったんだけど、もしかしたら、32bit(4バイト)のみ対応のCPUと32bit/64bit(8バイト)両対応のCPUの違いなのかな?
違うかな?そんなに単純な話ではないか・・・
881デフォルトの名無しさん
2019/04/20(土) 21:42:31.24ID:QAu79rb4 https://docs.microsoft.com/ja-jp/cpp/build/reference/zp-struct-member-alignment
https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack
だいたい sizeof(class_obj) がコンパイル時定数なことくらいC++やってりゃわかるだろ・・・
https://docs.microsoft.com/ja-jp/cpp/preprocessor/pack
だいたい sizeof(class_obj) がコンパイル時定数なことくらいC++やってりゃわかるだろ・・・
882デフォルトの名無しさん
2019/04/21(日) 00:19:13.52ID:WKly27nG 本質じゃないがxmlじゃなくてjsonがオススメ
もっと突っ込むならyamlがオススメ
もっと突っ込むならyamlがオススメ
883はちみつ餃子 ◆8X2XSCHEME
2019/04/21(日) 01:03:10.69ID:v5pFgDlL YAML は人間が読むこともあるなら可読性とのバランスで選ぶことはあるかもしれんが、
機械可読であればよいような場面で選択する理由は無いんじゃないかな。
既存のライブラリを使えばどれでも手間は大差ないとは思うけど、
バイナリ表現だと MessagePack とか Bencode とかいった選択肢もあるし、
どうして色々なフォーマットが登場したのかというとなんだかんだで「場合による」としか言い様がないからなんで、
まあ主要なやつを一通り特徴を把握しといた方が良いよね。
機械可読であればよいような場面で選択する理由は無いんじゃないかな。
既存のライブラリを使えばどれでも手間は大差ないとは思うけど、
バイナリ表現だと MessagePack とか Bencode とかいった選択肢もあるし、
どうして色々なフォーマットが登場したのかというとなんだかんだで「場合による」としか言い様がないからなんで、
まあ主要なやつを一通り特徴を把握しといた方が良いよね。
884デフォルトの名無しさん
2019/04/21(日) 01:14:51.26ID:VOTCwJrR yamlって何に使うの?
885デフォルトの名無しさん
2019/04/21(日) 03:00:37.96ID:dJmpMhpq yamlよりはjsonかなぁ
886デフォルトの名無しさん
2019/04/21(日) 08:42:04.15ID:nzBarAq0 何にじゃねえな
yamlはperl
jsonはjavascript
時代の流れでjsonが優勢になった
出来ることや表現力はあんまり変わらない
yamlはperl
jsonはjavascript
時代の流れでjsonが優勢になった
出来ることや表現力はあんまり変わらない
887デフォルトの名無しさん
2019/04/21(日) 09:55:35.58ID:0mpGXc/m yamlは最近dockerとかkubanetessとかansibleとかインフラ/環境系ツールのせいでやたら触る事が多い
888デフォルトの名無しさん
2019/04/21(日) 11:02:24.76ID:rR+Epd4r もう16バイト境界なんてのも出てきてるのか
VisualStudioのプロジェクトのプロパティのC/C++のコード生成で
構造体メンバのアライメントを8にするか、
コード上で #pragma pack(8) とすれば
強制的に8バイト境界にできるみたいだけど、
マシンに最適な既定値のアライメントから変更する事で速度が遅くなったり
何か不具合が生じたりするものかな?
VisualStudioのプロジェクトのプロパティのC/C++のコード生成で
構造体メンバのアライメントを8にするか、
コード上で #pragma pack(8) とすれば
強制的に8バイト境界にできるみたいだけど、
マシンに最適な既定値のアライメントから変更する事で速度が遅くなったり
何か不具合が生じたりするものかな?
889デフォルトの名無しさん
2019/04/21(日) 11:17:14.94ID:iFY66t+o 既定のアライメントというのはふつう、メンバの単純型のサイズに合わせられるはず。
16byteの単純型を使うのでなければ16byte境界にする必要もない。
16byteの単純型を使うのでなければ16byte境界にする必要もない。
890デフォルトの名無しさん
2019/04/21(日) 11:17:32.77ID:rR+Epd4r 問題ないなら旧環境との互換性重視で4バイト境界にするのもありかな?
891デフォルトの名無しさん
2019/04/21(日) 11:52:51.02ID:iFY66t+o 互換性重視なら、各メンバを自然なアライメントに配置して手でpaddingを挿入して#pragma pack(1)。
>マシンに最適な既定値のアライメント
少なくともx86の場合、それが4とか8とか決まっているわけじゃない。
>マシンに最適な既定値のアライメント
少なくともx86の場合、それが4とか8とか決まっているわけじゃない。
>>891
#pragma pack なんて MS の方言でしょう?そんなのを使いながら「互換性重視」とか矛盾してませんか?
#pragma pack なんて MS の方言でしょう?そんなのを使いながら「互換性重視」とか矛盾してませんか?
893デフォルトの名無しさん
2019/04/21(日) 12:45:11.23ID:iFY66t+o そこはポイントじゃないから勝手に読み替えて。
894デフォルトの名無しさん
2019/04/21(日) 15:46:14.10ID:ECfCuHga C言語ならともかくC++なのに例外を避けようとする人ってあたまおかしいのかな
標準ライブラリもその他のライブラリも例外を投げる前提なのに頑なに例外を避けようとするってそうとうに筋が悪い非合理的な選択肢だよね
標準ライブラリもその他のライブラリも例外を投げる前提なのに頑なに例外を避けようとするってそうとうに筋が悪い非合理的な選択肢だよね
896デフォルトの名無しさん
2019/04/21(日) 16:03:56.39ID:dJmpMhpq897デフォルトの名無しさん
2019/04/21(日) 16:08:40.35ID:ECfCuHga SJLJの話じゃないです
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
例外を避けてオレオレエラーコードを返す迷惑な人達の話です
898デフォルトの名無しさん
2019/04/21(日) 17:16:18.32ID:ZtsKSKQ7 例外もまともにキャッチされないので
どっちもクソです
どっちもクソです
899デフォルトの名無しさん
2019/04/21(日) 17:17:33.88ID:ym7YjNtF エラーの発生頻度によるのでは?
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
throwは高コストだから発生頻度が高い場合は戻り値で処理した方がいい
900デフォルトの名無しさん
2019/04/21(日) 17:22:58.19ID:nzBarAq0 システムによる
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
航空機の運航システムでのエラー処理はどうすりゃいいわけさ
901デフォルトの名無しさん
2019/04/21(日) 17:53:59.57ID:ECfCuHga >>899
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
入力の検証、パース以外で頻繁に発生するエラーって例えば何でしょうか?
そもそもthrowはコストそんなに高くないのでは?
エラー情報(コード、メッセージ、下位エラー情報、スタックトレース等)を戻りでコピーしまくるほうが高く付くと思います
>>896
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
自分で実装できないものを、その仕組みもわからないのにホイホイ使ってしまってもいいのでしょうか?
他の言語ならともかく、C/C++er がそういうところに無自覚なのは大いに問題があるのでは?
そんなことでデバッグできますか?
904デフォルトの名無しさん
2019/04/21(日) 18:28:33.16ID:ECfCuHga >>902
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
内部構造がわからないものでもAPIドキュメントを読んで使えるようになるのが正しいプログラマでは?
905デフォルトの名無しさん
2019/04/21(日) 18:34:32.58ID:dJmpMhpq まあそういう賢いプログラマなら当然の様にSpectreの可能性に気づいて対策していたんだろうね。
きっと
きっと
907デフォルトの名無しさん
2019/04/21(日) 18:41:53.50ID:dJmpMhpq つまりすべてのAPIをスクラッチでかける人間以外使うなと言うことなんだな
908デフォルトの名無しさん
2019/04/21(日) 18:42:38.56ID:ECfCuHga909デフォルトの名無しさん
2019/04/21(日) 18:44:31.12ID:dJmpMhpq 大体sj,ljが肝なのだから、そこ丸投げしたら同じようなもの
910デフォルトの名無しさん
2019/04/21(日) 18:51:39.35ID:ECfCuHga 内部構造まで把握してなきゃ使っちゃだめなんていう烏滸がましい思想を持ってると
実装に強い影響を受けるエラーコード返し方式を選んでしまうのだろうな
実装に強い影響を受けるエラーコード返し方式を選んでしまうのだろうな
911デフォルトの名無しさん
2019/04/21(日) 18:52:38.66ID:idC8t1Zb なんかライブラリ使ってるだけの輩がイキリ出しとるなw
確かにライブラリによってはそのライブラリの単体テストなり書いといた方が良いこともある。
確かにライブラリによってはそのライブラリの単体テストなり書いといた方が良いこともある。
912はちみつ餃子 ◆8X2XSCHEME
2019/04/21(日) 18:57:06.46ID:v5pFgDlL 静的例外の提案がある。
使える例外オブジェクトに制限があるし、
静的例外を投げる可能性がある関数は型として明記しないといけないけれど、
見かけ上は例外の構文を使いつつ
実質的に返却値と合わせて例外オブジェクトを受け渡すような方法をとれる。
https://cpplover.blogspot.com/2018/07/c.html
江添氏もこれには期待しているらしいことを書いている。
使える例外オブジェクトに制限があるし、
静的例外を投げる可能性がある関数は型として明記しないといけないけれど、
見かけ上は例外の構文を使いつつ
実質的に返却値と合わせて例外オブジェクトを受け渡すような方法をとれる。
https://cpplover.blogspot.com/2018/07/c.html
江添氏もこれには期待しているらしいことを書いている。
913デフォルトの名無しさん
2019/04/21(日) 18:59:12.07ID:ECfCuHga >>911
SOLIDを実践しないからそんなおかしなテストを書くはめになるんでしょうな
SOLIDを実践しないからそんなおかしなテストを書くはめになるんでしょうな
914デフォルトの名無しさん
2019/04/21(日) 19:03:01.42ID:dJmpMhpq 例外便利だけど、例外が高確率で起こる場面じゃ使うと遅くなるから、仕方なく結果コード判定してとかの糞コード書かなきゃいけなくなる。
915デフォルトの名無しさん
2019/04/21(日) 19:10:10.25ID:ECfCuHga916デフォルトの名無しさん
2019/04/21(日) 19:10:58.11ID:ym7YjNtF 俺は戻り値をboolにするかbool*のout引数を用意してエラー内容はメンバに記憶しておき、
成否だけで十分な場面では単純にbool値だけを見て、詳細が必要な場面だけエラー内容を取得する
ってやり方が気に入ってる
成否だけで十分な場面では単純にbool値だけを見て、詳細が必要な場面だけエラー内容を取得する
ってやり方が気に入ってる
917デフォルトの名無しさん
2019/04/21(日) 19:12:17.54ID:ECfCuHga918デフォルトの名無しさん
2019/04/21(日) 19:16:05.70ID:ym7YjNtF ファイルシステムでパスが存在するかとか権限があるかとか
リソースを確保できるかどうかとか
いくらでもあるでしょう
リソースを確保できるかどうかとか
いくらでもあるでしょう
919デフォルトの名無しさん
2019/04/21(日) 19:17:16.59ID:ECfCuHga920デフォルトの名無しさん
2019/04/21(日) 19:38:20.06ID:iFY66t+o そりゃそのシステムの問題じゃね?
例外なら「中途半端に特殊なエラー処理ルール」にならないというわけでもあるまい。
例外なら「中途半端に特殊なエラー処理ルール」にならないというわけでもあるまい。
921デフォルトの名無しさん
2019/04/21(日) 19:45:15.97ID:ECfCuHga922デフォルトの名無しさん
2019/04/21(日) 19:47:17.19ID:ECfCuHga923デフォルトの名無しさん
2019/04/21(日) 20:14:16.72ID:sE/qbOcV 例外にすればエラー検知は簡単になるでしょうが
そのエラーに対してどう処理するのかはケースバイケース
標準的な方法なんて無いと思うけど
そこが肝心な所で優勢かどうかは些末のことだと思うよ
そのエラーに対してどう処理するのかはケースバイケース
標準的な方法なんて無いと思うけど
そこが肝心な所で優勢かどうかは些末のことだと思うよ
924デフォルトの名無しさん
2019/04/21(日) 20:21:35.36ID:ECfCuHga 例外はcatchで標準化されますが?
その後のことは例外とエラーコードの比較って文脈で語ることじゃないな
強いて言えば例外の方が再通知の仕方もより標準的と言えるが
その後のことは例外とエラーコードの比較って文脈で語ることじゃないな
強いて言えば例外の方が再通知の仕方もより標準的と言えるが
925デフォルトの名無しさん
2019/04/21(日) 20:24:46.24ID:ym7YjNtF 戻り値がboolならそれが正常終了したかどうかを表していることは誰にでもわかる
呼び出し元を正常系と異常系の単純な分岐にでもしておけば致命的なバグになることはない
例外の場合はその発生率が極めて低い場合にtry-catch忘れが起こると致命的なバグを含んだままリリースされかねない
呼び出し元を正常系と異常系の単純な分岐にでもしておけば致命的なバグになることはない
例外の場合はその発生率が極めて低い場合にtry-catch忘れが起こると致命的なバグを含んだままリリースされかねない
926デフォルトの名無しさん
2019/04/21(日) 20:34:33.10ID:ECfCuHga >>925
boolの解釈は人それぞれ
bool is_invalid() const;みたいなのもあるよね
あるいはただのビットフラグのON/OFFを示してるかもかもしれない
そもそもそれが処理の成否を表しているかどうかすら統一されてない
リターンコード方式ではリターンコードと分岐の洪水による目くらましでコーディングミスが多発する
それは必要なcatchを書き忘れる確率よりもずっと高い確率で発生する
例外は処理すべきものだけしか書かないから見通しが良く仕様書との比較もしやすい
リターンコード形式では何もしなくてもいいのに定型処理を書かねばならず
それによってどのエラー処理が仕様書に書かれた本当に必要なエラー処理なのか目で見てわかりにくい
boolの解釈は人それぞれ
bool is_invalid() const;みたいなのもあるよね
あるいはただのビットフラグのON/OFFを示してるかもかもしれない
そもそもそれが処理の成否を表しているかどうかすら統一されてない
リターンコード方式ではリターンコードと分岐の洪水による目くらましでコーディングミスが多発する
それは必要なcatchを書き忘れる確率よりもずっと高い確率で発生する
例外は処理すべきものだけしか書かないから見通しが良く仕様書との比較もしやすい
リターンコード形式では何もしなくてもいいのに定型処理を書かねばならず
それによってどのエラー処理が仕様書に書かれた本当に必要なエラー処理なのか目で見てわかりにくい
927デフォルトの名無しさん
2019/04/21(日) 20:43:33.90ID:baAUkWKA catch 以降でエラー内容に応じて振り分ける訳ですか?
気が遠くなりませんか?
気が遠くなりませんか?
928デフォルトの名無しさん
2019/04/21(日) 20:47:31.48ID:ECfCuHga >>916
エラー値を取得するタイミングがずれるようだとスレッドセーフを保障できなくなるのでは?
エラー値を取得するタイミングがずれるようだとスレッドセーフを保障できなくなるのでは?
933デフォルトの名無しさん
2019/04/21(日) 21:08:36.84ID:ECfCuHga934デフォルトの名無しさん
2019/04/21(日) 21:11:37.57ID:ECfCuHga >>932
例外はエラー対応を忘れないようにするためのものではありません
例外はエラーの通知方法を標準化することとコーディングの労力を大幅に低減するための機構です
エラーコード形式でも分岐を忘れることはありえます
むしろ不要な分岐も定型処理として書かなければならないエラーコード形式ではノイズが多くミスや忘れが多く発生します
例外はエラー対応を忘れないようにするためのものではありません
例外はエラーの通知方法を標準化することとコーディングの労力を大幅に低減するための機構です
エラーコード形式でも分岐を忘れることはありえます
むしろ不要な分岐も定型処理として書かなければならないエラーコード形式ではノイズが多くミスや忘れが多く発生します
>>933
>レスを読んでください
どのレスかアンカーをいただけませんか?
>>933
>異なる世代の衝突があった場合は今を優先すべきでしょう
>過去の過ぎ去ったことにいつまでも縋り付いては先へ進めません
「今の方が昔よりよくなった」という世界観に立脚しているのであれば、その説は説明できますが
「今よりも悪くなった」と考えている人を説得することができないのではないでしょうか?
>>933 が必要なのは「今の方がよくなった」と言い切れるメリットがなにか具体的に明示することだと思います。
単に「新しい方がよい」という主観だけを振り回しても、アンチ exception の意見を持つ人は納得できません
>>933 は具体的なメリットを明示することをせずに「新しい方がよい」という主観ばかり述べているのだから、議論の仕方をしらない「馬鹿な文系」に私からはみえるのです…
>レスを読んでください
どのレスかアンカーをいただけませんか?
>>933
>異なる世代の衝突があった場合は今を優先すべきでしょう
>過去の過ぎ去ったことにいつまでも縋り付いては先へ進めません
「今の方が昔よりよくなった」という世界観に立脚しているのであれば、その説は説明できますが
「今よりも悪くなった」と考えている人を説得することができないのではないでしょうか?
>>933 が必要なのは「今の方がよくなった」と言い切れるメリットがなにか具体的に明示することだと思います。
単に「新しい方がよい」という主観だけを振り回しても、アンチ exception の意見を持つ人は納得できません
>>933 は具体的なメリットを明示することをせずに「新しい方がよい」という主観ばかり述べているのだから、議論の仕方をしらない「馬鹿な文系」に私からはみえるのです…
>>934
私の考えるところの exception の利点の一つは、exception の発生した階層から遠く離れたところでも、その exception を catch して処理を記述できるところにある、と考えています
もう一つは exception を catch するとき指定するのは class だから、このエラークラスを派生関係として階層化することで、エラー体系の構造化ができるところでしょうか(派生クラスでも基底クラスでも catch できる、という点です)
しかし exception の話が持ち上がる度に、私の思う上記二点の excption の利点は言及されたためしがありません…
これでは exception の本当にいいところがメリットとして理解されていない、というか、メリットになり得ていないようですね…
exception は単なる無駄コスト食らいなんじゃないですかね…
私の考えるところの exception の利点の一つは、exception の発生した階層から遠く離れたところでも、その exception を catch して処理を記述できるところにある、と考えています
もう一つは exception を catch するとき指定するのは class だから、このエラークラスを派生関係として階層化することで、エラー体系の構造化ができるところでしょうか(派生クラスでも基底クラスでも catch できる、という点です)
しかし exception の話が持ち上がる度に、私の思う上記二点の excption の利点は言及されたためしがありません…
これでは exception の本当にいいところがメリットとして理解されていない、というか、メリットになり得ていないようですね…
exception は単なる無駄コスト食らいなんじゃないですかね…
937デフォルトの名無しさん
2019/04/21(日) 21:29:57.46ID:ECfCuHga >>935
沢山あるので面倒です
今日のレスを読み直してください
悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
普及してしまった時点で一部のロートル以外は良くなったと考えている証拠です
沢山あるので面倒です
今日のレスを読み直してください
悪くなったのが事実であれば新しいものが普及する前に消えるでしょう
普及してしまった時点で一部のロートル以外は良くなったと考えている証拠です
938デフォルトの名無しさん
2019/04/21(日) 21:34:59.57ID:ECfCuHga >>936
離れた位置で捉えられる点はコーディングの省力化に暗に含まれると考えていいでしょう
全ての階層で定型処理を書かなくてもいい==離れた階層でも捉えたいところでだけ処理を書けばいい
ということです
例外の階層化についてはその通りですね
地味なので忘れがちですが便利です
離れた位置で捉えられる点はコーディングの省力化に暗に含まれると考えていいでしょう
全ての階層で定型処理を書かなくてもいい==離れた階層でも捉えたいところでだけ処理を書けばいい
ということです
例外の階層化についてはその通りですね
地味なので忘れがちですが便利です
>>934
>エラーの通知方法を標準化することとコーディングの労力を大幅に低減する
ここでもバズワード「標準化」を使っていますね、漠然とした抽象的な単語を並べればいい、という思考の粗さが気になります
それに異常系の記述はどうあがいても、場合わけして都度逐一記述するしかないのは、return-value 派にしても exception 派にしても同じで、記述する中身が減るわけじゃありません
それとも exception で書けば記述が減るというのなら、何か書いてみてください
>>934 を読むにつけても、>>934 は本当に物事を突き詰めて考えているのですか?
世間がこういっている、とか、Java や C# ではそうしている、とかいう空気の読みあい、ポジション取りの忖度しかしていないのでは?
>>934 はたぶん文系プログラマなんでしょうね、私には強くそう推察されるのです…
>エラーの通知方法を標準化することとコーディングの労力を大幅に低減する
ここでもバズワード「標準化」を使っていますね、漠然とした抽象的な単語を並べればいい、という思考の粗さが気になります
それに異常系の記述はどうあがいても、場合わけして都度逐一記述するしかないのは、return-value 派にしても exception 派にしても同じで、記述する中身が減るわけじゃありません
それとも exception で書けば記述が減るというのなら、何か書いてみてください
>>934 を読むにつけても、>>934 は本当に物事を突き詰めて考えているのですか?
世間がこういっている、とか、Java や C# ではそうしている、とかいう空気の読みあい、ポジション取りの忖度しかしていないのでは?
>>934 はたぶん文系プログラマなんでしょうね、私には強くそう推察されるのです…
>>937
アンカーを書くことくらいもできないのですか?
アンカーを書くことくらいもできないのですか?
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 中国側が首相答弁の撤回要求、日本側拒否★5 [夜のけいちゃん★]
- 「厚かましい挑発的発言だ」中国国連大使が高市首相発言に強く反発 日本の常任理事国入りに明確に反対 [ぐれ★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- 解体ごみ約2.3トンを山に不法投棄か トルコ国籍解体工を逮捕 埼玉 [どどん★]
- 【悲報】ファブル「━━━書かれた文面を読むだけの岸田と違って、高市は決断力や行動力があり、自分で責任を取れる。 [257926174]
- 【悲報】高市早苗さん、たった一人で日本を崩壊へ導く [714769305]
- 【悲報】「やったー!こだわりまくった洋館仕立ての家を建てたぞ!」➡「「離婚したんで住まずに売ります……」 [158478931]
- 【悲報】高市総理モノマネにとろサーモン久保田がブチギレ。「しょーもない。高市さんは頑張ろうとしてるやろ」😮 [518915984]
- 精神する時の🏡
- 【画像】日本のリン肥料、7割が中国だった!レアじゃないアースを禁輸されただけて餓死へ [347751896]
