エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1500329247/
探検
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2017/11/04(土) 16:33:35.07ID:NYxCuvMY448445
2018/04/05(木) 15:16:31.21ID:LhrJ/WaU449デフォルトの名無しさん
2018/04/06(金) 18:11:46.66ID:CDFchtjR void Show(const IntArray& array){
...
}
というような関数内で、 array の const メンバ関数ではないメンバ変数を変更しないメンバ関数を
使っているとコンパイルエラーになりますが、それはなぜでしょうか?
コンパイラーはarrayのメンバ関数がメンバ変数を変更していないことはソースコードから
分かるのではないでしょうか?
そういうチェックをするコンパイラを作るのは難しいからということでしょうか?
...
}
というような関数内で、 array の const メンバ関数ではないメンバ変数を変更しないメンバ関数を
使っているとコンパイルエラーになりますが、それはなぜでしょうか?
コンパイラーはarrayのメンバ関数がメンバ変数を変更していないことはソースコードから
分かるのではないでしょうか?
そういうチェックをするコンパイラを作るのは難しいからということでしょうか?
450デフォルトの名無しさん
2018/04/06(金) 18:16:26.47ID:CDFchtjR const メンバ関数の中でメンバ変数の内容を変更しているとコンパイルエラーになります。
ということはどのみちメンバ変数を変更しているかどうかはチェック可能ということですよね?
ということはどのみちメンバ変数を変更しているかどうかはチェック可能ということですよね?
451デフォルトの名無しさん
2018/04/06(金) 18:17:58.47ID:KjpzCJso void Show(IntArray& const array)
452デフォルトの名無しさん
2018/04/06(金) 19:04:45.09ID:zGB1Hjc3453デフォルトの名無しさん
2018/04/06(金) 19:43:28.40ID:EFVHWowI454デフォルトの名無しさん
2018/04/07(土) 02:18:30.08 >>449
メンバ変数を変更しないなら素直にメンバ関数にconst付けれや
メンバ変数を変更しないなら素直にメンバ関数にconst付けれや
455デフォルトの名無しさん
2018/04/07(土) 12:11:18.49ID:BRhgC8GS コンタミュ連鎖地獄ω
456デフォルトの名無しさん
2018/04/08(日) 06:44:19.17ID:fQMOYFpe457デフォルトの名無しさん
2018/04/08(日) 07:56:39.59ID:peS6i82l C#のフォームからオフィスを立ち上げ、オフィスを終了したら立ち上げたフォームに
戻るようにするにはどうした出来ますか?
戻るようにするにはどうした出来ますか?
458デフォルトの名無しさん
2018/04/08(日) 08:06:10.70ID:hcdQKQ5m >>457
COM使えばできるけど、スレタイも読めないお前にできるかどうかはわからん
COM使えばできるけど、スレタイも読めないお前にできるかどうかはわからん
459デフォルトの名無しさん
2018/04/08(日) 08:13:28.62ID:peS6i82l そんなことは当たり前ですね。その方法が説明できますか?
460デフォルトの名無しさん
2018/04/08(日) 08:25:17.68ID:28momF5z >>459
できるがスレチだからな
できるがスレチだからな
461デフォルトの名無しさん
2018/04/08(日) 08:29:30.70ID:fQMOYFpe C#のことはC#のスレッドで尋ねればいいでしょ、てお話。
C/C++のスレッドに質問を持ち込むより確実で早いと思うよ。
C/C++のスレッドに質問を持ち込むより確実で早いと思うよ。
462デフォルトの名無しさん
2018/04/08(日) 08:37:40.87ID:peS6i82l あ、ごめん。++が#に見えた。でも普通は++を#に書き間違ったんだろうと判断すると
思うが。
思うが。
463デフォルトの名無しさん
2018/04/08(日) 08:39:38.92ID:peS6i82l ところでC++のフォームからオフィスを立ち上げ、オフィスを終了したら立ち上げたフォームに
戻るようにするにはどうした出来ますか?
戻るようにするにはどうした出来ますか?
464デフォルトの名無しさん
2018/04/08(日) 08:44:37.90ID:TD+h4nB6 >>462
判断する訳ねーだろガイジか
判断する訳ねーだろガイジか
465デフォルトの名無しさん
2018/04/08(日) 08:50:08.72ID:D3gITJpj >>463
CreateProcess() win32API スレへgo
CreateProcess() win32API スレへgo
466デフォルトの名無しさん
2018/04/08(日) 08:56:58.76ID:peS6i82l >>465 thanks yey!
467デフォルトの名無しさん
2018/04/08(日) 08:58:12.94ID:hcdQKQ5m468デフォルトの名無しさん
2018/04/08(日) 09:14:13.86ID:peS6i82l >>464
it is conditional on your ability, although its mean applying in the case of a usual Japanese.
it is conditional on your ability, although its mean applying in the case of a usual Japanese.
469デフォルトの名無しさん
2018/04/08(日) 09:23:25.66ID:tUhRYmJS 真性の障害者手帳持ちだったか
470デフォルトの名無しさん
2018/04/08(日) 09:44:32.26ID:nHJNjK41 main関数の中でstaticを使う意味は何でしょうか?
ロベールの本のpp.318-319にそのような例が出てきて意味不明です。
ロベールの本のpp.318-319にそのような例が出てきて意味不明です。
471デフォルトの名無しさん
2018/04/08(日) 11:18:10.91ID:4aXSD6ZQ キチガイに触るな
472デフォルトの名無しさん
2018/04/08(日) 11:47:04.28ID:fQMOYFpe ロベールの本を持ってないんで、適切な回答じゃないかもしれんが。
main() 関数の中でstatic変数を使う意味といえば、
単純型の初期化の処理時間を回避したいか、
セクション(変数のメモリ配置)の説明のためか、
「staticなインスタンスのコンストラクタはmain()より前に実行される」
ていう話の前フリかなぁ。
main() 関数の中でstatic変数を使う意味といえば、
単純型の初期化の処理時間を回避したいか、
セクション(変数のメモリ配置)の説明のためか、
「staticなインスタンスのコンストラクタはmain()より前に実行される」
ていう話の前フリかなぁ。
473はちみつ餃子 ◆8X2XSCHEME
2018/04/08(日) 13:50:30.74ID:RvzgDq0H474デフォルトの名無しさん
2018/04/08(日) 14:41:24.43ID:b4O4Usd0 普通に考えると、
単にスコープをローカルにしたいってのがまず考えられる
単にスコープをローカルにしたいってのがまず考えられる
475デフォルトの名無しさん
2018/04/08(日) 14:46:24.29ID:drN9+cfC476デフォルトの名無しさん
2018/04/08(日) 15:12:26.18ID:nkM5b3tX477デフォルトの名無しさん
2018/04/08(日) 15:18:18.11ID:4aXSD6ZQ 覗きでもやってんのか?
478デフォルトの名無しさん
2018/04/08(日) 15:20:01.32ID:drN9+cfC >>474は
関数内でstatic変数を使うのは静的変数のスコープを関数ローカルにしたいからでは、
というごく当たり前の文意だろ普通に読むと。
どう読むと
関数内だからファイルローカルの話とか関係ない!勘違いするな!となるんだよ
自分以外は文法もセマンティックもろくに知らないという前提はやめるべき
関数内でstatic変数を使うのは静的変数のスコープを関数ローカルにしたいからでは、
というごく当たり前の文意だろ普通に読むと。
どう読むと
関数内だからファイルローカルの話とか関係ない!勘違いするな!となるんだよ
自分以外は文法もセマンティックもろくに知らないという前提はやめるべき
479デフォルトの名無しさん
2018/04/08(日) 20:18:51.07ID:B7amW+qm >>470
スコープはmaim( )内にしたいけどスタックは使いたくないってケースかな
スコープはmaim( )内にしたいけどスタックは使いたくないってケースかな
480はちみつ餃子 ◆8X2XSCHEME
2018/04/09(月) 01:15:21.26ID:fbTUuQs/ >>470
ウェブ版をざっと探してみたら main 内で satatic 変数を使ってるのはこれだけだったんだけど、
これのことか?
http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02037.html
ウェブ版をざっと探してみたら main 内で satatic 変数を使ってるのはこれだけだったんだけど、
これのことか?
http://www7b.biglobe.ne.jp/~robe/cpphtml/html02/cpp02037.html
481472
2018/04/09(月) 08:00:59.66ID:4Qmw3/oH 関数スコープのstaticなクラス・インスタンスのコンストラクタは
main()以前でなく、最初にその部分が実行されたときに初期化されるんだっけか。
static なら一律にmain()の前、基本型や単純な構造体のstaticはロード時に初期化、
だと勘違いしていた。
訂正してくれてありがとう。そして間違ったことを書いてすまぬ。
main()以前でなく、最初にその部分が実行されたときに初期化されるんだっけか。
static なら一律にmain()の前、基本型や単純な構造体のstaticはロード時に初期化、
だと勘違いしていた。
訂正してくれてありがとう。そして間違ったことを書いてすまぬ。
482デフォルトの名無しさん
2018/04/09(月) 08:28:16.55ID:arNj8dw4 初期化が固定データのメモリコピーで済むものはロード時に初期化するコンパイラが普通
483デフォルトの名無しさん
2018/04/09(月) 14:14:56.77ID:iBEYls0Z いつやっても同じものはいつやっても同じだからな
484デフォルトの名無しさん
2018/04/09(月) 15:10:57.47ID:cuDt6une >>480
ありがとうございます。本とは内容が違うようです。
int main() {
static const double ARRAY1[] = {1, 2, 3, -1};
static const double ARRAY2[] = {0.5, 1.5, ,-1};
static const double ARRAY3[] = {-1};
static const double* const ARRAY[] = {ARRAY1, ARRAY2, ARRAY3};
…
}
というコードが該当箇所です。
ありがとうございます。本とは内容が違うようです。
int main() {
static const double ARRAY1[] = {1, 2, 3, -1};
static const double ARRAY2[] = {0.5, 1.5, ,-1};
static const double ARRAY3[] = {-1};
static const double* const ARRAY[] = {ARRAY1, ARRAY2, ARRAY3};
…
}
というコードが該当箇所です。
485片山博文MZ ◆T6xkBnTXz7B0
2018/04/09(月) 15:13:59.63ID:4wbW7ji0 staticを付けなければスタックに確保されるかもしれない。その場合、どうしても遅くなる。
486デフォルトの名無しさん
2018/04/09(月) 15:16:14.76ID:cuDt6une487デフォルトの名無しさん
2018/04/09(月) 15:31:05.83ID:iBEYls0Z488デフォルトの名無しさん
2018/04/09(月) 15:38:58.45ID:7w9BViIO 定数だからstatic constにした
というだけのことでそれ以上の意味はないと思うが
というだけのことでそれ以上の意味はないと思うが
489デフォルトの名無しさん
2018/04/09(月) 15:39:52.73ID:Cpp6LEO8 その変数をコンパイル時点で確定しようとしている。
ローディング時間も早くなる
ローディング時間も早くなる
490はちみつ餃子 ◆8X2XSCHEME
2018/04/09(月) 15:40:56.15ID:fbTUuQs/491デフォルトの名無しさん
2018/04/09(月) 15:57:19.85ID:XexqtlKa492デフォルトの名無しさん
2018/04/09(月) 16:42:59.75ID:cuDt6une クラスの定義をヘッダファイルに書くときに、
privateなメンバまで書くのはなぜですか?
必要ないように思います。
privateなメンバまで書くのはなぜですか?
必要ないように思います。
493デフォルトの名無しさん
2018/04/09(月) 16:45:14.78ID:cuDt6une494デフォルトの名無しさん
2018/04/09(月) 16:46:43.49ID:cuDt6une495デフォルトの名無しさん
2018/04/09(月) 16:48:38.97ID:EW8VU1tO sizeof で大きさ取れなくなるね
496デフォルトの名無しさん
2018/04/09(月) 16:50:38.53ID:cuDt6une498デフォルトの名無しさん
2018/04/09(月) 18:17:18.89ID:R2K+YmFs >>493
あの部分では特別に速度を意識した記述ではなく普通に意識する程度の事だから一々説明されないということではないかな
速度や使用メモリを気にするのはCやC++プログラマの癖または習慣みたいなもので特にロベールみたいな昔の人は体に染み付いているだろうからね
あの部分では特別に速度を意識した記述ではなく普通に意識する程度の事だから一々説明されないということではないかな
速度や使用メモリを気にするのはCやC++プログラマの癖または習慣みたいなもので特にロベールみたいな昔の人は体に染み付いているだろうからね
499デフォルトの名無しさん
2018/04/09(月) 18:28:43.00ID:arNj8dw4 >>493
今回はたまたまmainであり、
たまたま小さなデータだったというだけで、
より汎用性の高いコードにするのはプログラミングの基本
staticを付けるメリットは
・データ構造の初期化が1回(ROMだと0回)で済む
・スタックを浪費しない
・関数を抜けてもデータが保持される
・番地が固定
デメリットは
・関数を通らなくても初期化される
・関数外でもメモリを使う
今回はたまたまmainであり、
たまたま小さなデータだったというだけで、
より汎用性の高いコードにするのはプログラミングの基本
staticを付けるメリットは
・データ構造の初期化が1回(ROMだと0回)で済む
・スタックを浪費しない
・関数を抜けてもデータが保持される
・番地が固定
デメリットは
・関数を通らなくても初期化される
・関数外でもメモリを使う
500デフォルトの名無しさん
2018/04/09(月) 18:32:13.19ID:arNj8dw4 一番重要なのは>>491
PCプログラムしかやらない人は知らないだろうけど
PCプログラムしかやらない人は知らないだろうけど
501デフォルトの名無しさん
2018/04/09(月) 18:49:30.99ID:m9zaOBXx test2の形だと上手く動作しないのですが何故でしょうか
環境はvc6とstlport521です
void test1(const char* cstr, ...) {
char buf[1024];
va_list args;
va_start(args, cstr);
vsprintf(buf, cstr, args);
va_end(args);
printf(buf);
}
void test2(std::string str, ...) {
const char* cstr = str.c_str();
char buf[1024];
va_list args;
va_start(args, cstr);
vsprintf(buf, cstr, args);
va_end(args);
printf(buf);
}
void main() {
test1("hello1 %d\n", 123);
test2("hello2 %d\n", 123);
}
//結果
//hello1 123
//hello2 1819043176
環境はvc6とstlport521です
void test1(const char* cstr, ...) {
char buf[1024];
va_list args;
va_start(args, cstr);
vsprintf(buf, cstr, args);
va_end(args);
printf(buf);
}
void test2(std::string str, ...) {
const char* cstr = str.c_str();
char buf[1024];
va_list args;
va_start(args, cstr);
vsprintf(buf, cstr, args);
va_end(args);
printf(buf);
}
void main() {
test1("hello1 %d\n", 123);
test2("hello2 %d\n", 123);
}
//結果
//hello1 123
//hello2 1819043176
502デフォルトの名無しさん
2018/04/09(月) 18:56:07.59ID:arNj8dw4 引数を std::string &str, ... にすればなおる
503デフォルトの名無しさん
2018/04/09(月) 19:06:25.54ID:m9zaOBXx 引数を参照とポインタでも試してみましたが結果は変わらなかったです
void test3(std::string& str, ...) {
const char* cstr = str.c_str();
・・・
void test4(std::string* str, ...) {
const char* cstr = str->c_str();
・・・
void main() {
・・・
std::string str3("hello3 %d\n");
test3(str3, 123);
std::string str4("hello4 %d\n");
test4(&str4, 123);
}
//結果
//hello1 123
//hello2 1819043176
//hello3 1819043176
//hello4 1819043176
void test3(std::string& str, ...) {
const char* cstr = str.c_str();
・・・
void test4(std::string* str, ...) {
const char* cstr = str->c_str();
・・・
void main() {
・・・
std::string str3("hello3 %d\n");
test3(str3, 123);
std::string str4("hello4 %d\n");
test4(&str4, 123);
}
//結果
//hello1 123
//hello2 1819043176
//hello3 1819043176
//hello4 1819043176
504デフォルトの名無しさん
2018/04/09(月) 19:14:40.36ID:arNj8dw4 va_start(args, cstr);
なんでcstr?
なんでcstr?
505片山博文MZ ◆T6xkBnTXz7B0
2018/04/09(月) 19:15:26.84ID:4wbW7ji0 va_startの指定が間違ってる。
506デフォルトの名無しさん
2018/04/09(月) 19:22:49.12ID:m9zaOBXx ああなんとなく意味が分かってきました
va_startはマクロであってcstrの部分は引数の変数名が指定されなければならないということですかね
va_startはマクロであってcstrの部分は引数の変数名が指定されなければならないということですかね
507デフォルトの名無しさん
2018/04/09(月) 19:41:37.65ID:m9zaOBXx こういうコードにすると期待した動作をするようになりました
ありがとうございました
void test5(std::string str, ...) {
char buf[1024];
va_list args;
va_start(args, str);
vsprintf(buf, str.c_str(), args);
va_end(args);
printf(buf);
}
void main() {
・・・
test5("hello5 %d\n", 123);
}
//結果
//hello1 123
//hello2 1819043176
//hello3 1819043176
//hello4 1819043176
//hello5 123
ありがとうございました
void test5(std::string str, ...) {
char buf[1024];
va_list args;
va_start(args, str);
vsprintf(buf, str.c_str(), args);
va_end(args);
printf(buf);
}
void main() {
・・・
test5("hello5 %d\n", 123);
}
//結果
//hello1 123
//hello2 1819043176
//hello3 1819043176
//hello4 1819043176
//hello5 123
508デフォルトの名無しさん
2018/04/09(月) 19:45:39.82ID:yhCzF70B ついでに言うと va_start の第二引数については仕様上結構な制限、
各 argument に課される制約と同じ制約がある
配列はダメ、参照はダメ、基本型が格上げされる型との互換性が必要、など
最後のはクラスオブジェクトや float はダメということ
仕様として結果が不定なだけで違反してもエラーにはならないし
意図した通りに動くことも多い
詳しくは default argument promotions va_start
で検索
各 argument に課される制約と同じ制約がある
配列はダメ、参照はダメ、基本型が格上げされる型との互換性が必要、など
最後のはクラスオブジェクトや float はダメということ
仕様として結果が不定なだけで違反してもエラーにはならないし
意図した通りに動くことも多い
詳しくは default argument promotions va_start
で検索
509片山博文MZ ◆T6xkBnTXz7B0
2018/04/09(月) 20:00:39.54ID:4wbW7ji0 va_listとC++は、相性が合わないんだよな。呼び出し側でc_str()するとか。
510デフォルトの名無しさん
2018/04/09(月) 20:14:56.03ID:arNj8dw4 相性が合わない
511はちみつ餃子 ◆8X2XSCHEME
2018/04/10(火) 00:44:35.92ID:141aKXKv 特に強い理由がなければ variadic template を使った方が安全だし簡単に書ける。
template<class... T>
void test6(std::string str, T... args) {
char buf[1024];
std::sprintf(buf, str.c_str(), args...);
std::printf(buf);
}
template<class... T>
void test6(std::string str, T... args) {
char buf[1024];
std::sprintf(buf, str.c_str(), args...);
std::printf(buf);
}
512デフォルトの名無しさん
2018/04/10(火) 08:29:44.17ID:aAychsYe strがなんで値渡し?
アホなの?
アホなの?
513はちみつ餃子 ◆8X2XSCHEME
2018/04/10(火) 11:04:36.10ID:141aKXKv クソザコです
514デフォルトの名無しさん
2018/04/10(火) 21:38:17.71ID:sbGIaKQd なにこのバッファ溢れさせてくださいって釣り針
515デフォルトの名無しさん
2018/04/11(水) 07:10:13.25ID:5X4H9iqq 色々とクソコテクオリティ
516はちみつ餃子 ◆8X2XSCHEME
2018/04/11(水) 11:17:54.25ID:ZSzBt9iE えー、可変長引数の例にしただけなので、そんなどうでもいいとこを言われても困るよ。
517デフォルトの名無しさん
2018/04/11(水) 12:37:28.30ID:FCilzVhB そう言うところにしか突っ込めない雑魚の相手するなよ...
518デフォルトの名無しさん
2018/04/11(水) 12:58:23.58ID:0UD5Vzkt わざわざ互換性を下げなくてもいいのに
519デフォルトの名無しさん
2018/04/11(水) 21:16:27.05ID:0UD5Vzkt520デフォルトの名無しさん
2018/04/11(水) 21:20:49.36ID:yjo2onbY 実行目的ならvprintf使うんじゃね?
521デフォルトの名無しさん
2018/04/11(水) 21:29:16.68ID:0UD5Vzkt 普通はね
クソコテがコードサイズ、互換性、実行速度など
全て犠牲にしてもテンプレートを使いたかったみたい
クソコテがコードサイズ、互換性、実行速度など
全て犠牲にしてもテンプレートを使いたかったみたい
522デフォルトの名無しさん
2018/04/11(水) 21:46:51.95ID:4xNEGOrU va_start の第2引数の型の制限を知らなくてもor気にしなくても良いように
C++ らしく va_start 使わない例を出したんだろ…
と書いてはみたが、
そういう意図が通じるわけないか
通じる人は最初からわかってるもんな
C++ らしく va_start 使わない例を出したんだろ…
と書いてはみたが、
そういう意図が通じるわけないか
通じる人は最初からわかってるもんな
523デフォルトの名無しさん
2018/04/11(水) 21:49:14.05ID:4xNEGOrU そもそも何でbufにって質問は
コメント元の>>507にすべきだろ
コメント元の>>507にすべきだろ
524デフォルトの名無しさん
2018/04/11(水) 21:50:42.77ID:IGuJq2PQ こんな辺境ですらイキリ散らすなんて呆れる他ありませんわ
525デフォルトの名無しさん
2018/04/11(水) 21:54:51.56ID:5X4H9iqq >>522
誰も求めてないwww
誰も求めてないwww
526デフォルトの名無しさん
2018/04/11(水) 22:01:42.55ID:5X4H9iqq 危険てんこ盛りなコードの危険性が低い部分をなおしてどうすんの?アホなの?
オナニーは隠れてやれ
オナニーは隠れてやれ
527デフォルトの名無しさん
2018/04/11(水) 22:53:04.70ID:4xNEGOrU c++ スレで variadic template 紹介されてこの反応
528はちみつ餃子 ◆8X2XSCHEME
2018/04/12(木) 00:24:16.88ID:csgoYI7G529デフォルトの名無しさん
2018/04/12(木) 02:27:29.73ID:iYyApZ27 >>501とvariadic templateは関係ないわけだが
530デフォルトの名無しさん
2018/04/12(木) 02:36:35.20ID:iYyApZ27 わざわざ環境まで書いてあるのに
アホですね
アホですね
531デフォルトの名無しさん
2018/04/12(木) 10:41:06.56ID:KhnSMF/h const double const ARRAY[] = { 3, -1 };
const double ARRAY[] = { 3, -1 };
の違いを教えてください。
const double ARRAY[] = { 3, -1 };
の違いを教えてください。
532デフォルトの名無しさん
2018/04/12(木) 10:48:56.23ID:ySRK5Kj5 ポインタ変数なら
・変数も指し先も書き換えられない
・変数は書き換え可能。 指し先は書き換えられない
のパターンだけど
対象が配列の場合、元々変数の書き換えができないから同じ意味じゃないかと
・変数も指し先も書き換えられない
・変数は書き換え可能。 指し先は書き換えられない
のパターンだけど
対象が配列の場合、元々変数の書き換えができないから同じ意味じゃないかと
533デフォルトの名無しさん
2018/04/12(木) 12:23:14.02ID:aCAyQDuf534デフォルトの名無しさん
2018/04/12(木) 12:25:36.92ID:KhnSMF/h535デフォルトの名無しさん
2018/04/12(木) 14:29:59.20ID:ZdndFYj4 あいうえお
536デフォルトの名無しさん
2018/04/12(木) 14:43:04.91ID:Htzfym0f おこそとの
538デフォルトの名無しさん
2018/04/12(木) 21:59:02.17ID:nMaemNOx const double const a[];
は
const double a[];
と同じ意味
const const double const const a[];
なんて書いてもいいし
double const a[];
と書いてもいい
const typename と typename const と同じ
しかもconstはいくつ書いてもいい
は
const double a[];
と同じ意味
const const double const const a[];
なんて書いてもいいし
double const a[];
と書いてもいい
const typename と typename const と同じ
しかもconstはいくつ書いてもいい
539デフォルトの名無しさん
2018/04/13(金) 10:38:13.53ID:roGFrSR8 Win32のBOOL型を返す関数を複数回呼んで、
すべて成功したときのみTRUEを返したいのですが
(途中で失敗しても関数自体はすべて呼んでおく)、
BOOL Test()
{
BOOL bResult = TRUE;
bResult &= Api(...);
bResult &= Api(...);
bResult &= Api(...);
return bResult;
}
と書いてとりあえず動くのですが、よく考えたら&=はビット演算だし、
Win32のBOOL関数は成功時にTRUEを返すとは書いていないので、
例えば関数が成功時に2を返すパターンがあったら、
すべて成功しても戻り値はFALSEになるのではと思っています。
この場合、
bResult = Api(...) && bResult;
bResult = Api(...) && bResult;
bResult = Api(...) && bResult;
みたいな書き方をするしかないのでしょうか。
すべて成功したときのみTRUEを返したいのですが
(途中で失敗しても関数自体はすべて呼んでおく)、
BOOL Test()
{
BOOL bResult = TRUE;
bResult &= Api(...);
bResult &= Api(...);
bResult &= Api(...);
return bResult;
}
と書いてとりあえず動くのですが、よく考えたら&=はビット演算だし、
Win32のBOOL関数は成功時にTRUEを返すとは書いていないので、
例えば関数が成功時に2を返すパターンがあったら、
すべて成功しても戻り値はFALSEになるのではと思っています。
この場合、
bResult = Api(...) && bResult;
bResult = Api(...) && bResult;
bResult = Api(...) && bResult;
みたいな書き方をするしかないのでしょうか。
540デフォルトの名無しさん
2018/04/13(金) 10:57:04.94ID:UdLtdLwz result &= !!api(...);
という風に!!を使うのも zero, non zero を false/true に正規化するイディオムだけど、
何にしても見た目は汚いと思う
文字数は増えるがif文を使って
if (!api()) result=false;
の方が可読性高いかもしれない
という風に!!を使うのも zero, non zero を false/true に正規化するイディオムだけど、
何にしても見た目は汚いと思う
文字数は増えるがif文を使って
if (!api()) result=false;
の方が可読性高いかもしれない
541デフォルトの名無しさん
2018/04/13(金) 11:38:56.36ID:OgXHMhZG >>539
成功した回数をカウントして呼び出す関数が3つなら3でTRUEにするかな
BOOL Test()
{
int count = 0;
if(Api() != FALSE) count++;
if(Api() != FALSE) count++;
if(Api() != FALSE) count++;
if(count == 3) return TRUE;
}
成功した回数をカウントして呼び出す関数が3つなら3でTRUEにするかな
BOOL Test()
{
int count = 0;
if(Api() != FALSE) count++;
if(Api() != FALSE) count++;
if(Api() != FALSE) count++;
if(count == 3) return TRUE;
}
542デフォルトの名無しさん
2018/04/13(金) 12:44:10.91ID:mVcRE5FO 結果を std::vector にでもまとめておいて、 std::all_of で全てがFALSEでないことを確認するとか。
543デフォルトの名無しさん
2018/04/13(金) 12:50:27.67ID:UkpF6ptq544デフォルトの名無しさん
2018/04/13(金) 14:35:54.06ID:OgXHMhZG >>543
1年後の自分がやらかしそうだわw
1年後の自分がやらかしそうだわw
545デフォルトの名無しさん
2018/04/13(金) 14:37:30.50ID:eQfDSJES 普通に&で繋げてしまえば。
return Api()&Api()&Api()...;
return Api()&Api()&Api()...;
546デフォルトの名無しさん
2018/04/13(金) 14:44:49.05ID:lxf6ix6+ >>545
そもそもの質問のキモがわかってないよ
そもそもの質問のキモがわかってないよ
547539
2018/04/13(金) 15:24:49.14ID:roGFrSR8 みなさんご意見ありがとうございます。
例を簡略化しすぎてしまいましたが、処理は状況によって分かれるため、
常に同じ関数が3回というわけではありませんでした。
失礼しました。
bResult = Api(...) && bResult;
の書き方自体は、そこまで汚いわけではないのですね。
同じような書き方をしているソースも、検索してみたら出てきました。
個人的には、
bResult &&= Api(...);
のような記述ができるとありがたかったです。
例を簡略化しすぎてしまいましたが、処理は状況によって分かれるため、
常に同じ関数が3回というわけではありませんでした。
失礼しました。
bResult = Api(...) && bResult;
の書き方自体は、そこまで汚いわけではないのですね。
同じような書き方をしているソースも、検索してみたら出てきました。
個人的には、
bResult &&= Api(...);
のような記述ができるとありがたかったです。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- テレビ朝日 本社から男性が転落し死亡。関連会社社員か 当たった通行人が左肩軽傷 [阿弥陀ヶ峰★]
- テレビ朝日本社から20~30代の関連会社社員とみられる男性が転落し死亡 六本木けやき坂通りの通行人にはけが人なし [少考さん★]
- 小島瑠璃子さん、代表取締役を務める会社を破産申請 [牛丼★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★3 [少考さん★]
- 【サッカー】日本代表、FIFAランキング“4位”の強豪イングランドとの対戦が正式決定! 来年3月に聖地ウェンブリーで激突へ [久太郎★]
- タイがカンボジアを空爆、トランプ氏仲介の和平合意は“事実上崩壊”軍事衝突へ タイ首相「もはや対話の余地ない」 [お断り★]
- VIPにも一人くらいは人肉食べたいやつとかいるのかな?
- すまん、飲食チェーン店での一幕なんだがオマエラはこれを見て何を思うかおしえてくれ。
- 粗品「南原が3億も貰えんの?」 [279254606]
- 朝雑談
- 毎日菊花茶飲んでたら美肌になったよ
- 【朗報】VTuber、とうとうスパロボに参戦する
