C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part148
https://mevius.5ch.net/test/read.cgi/tech/1580471646/
このスレもよろしくね。
【初心者歓迎】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++相談室 part149
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2020/02/18(火) 06:19:41.54ID:xvjipUWj632デフォルトの名無しさん
2020/03/05(木) 19:07:31.57ID:HyVcGvBE >>629
昔BASICが人気があったころ、print と print using の二種類有り、
cout は前者の、printf は後者の流儀と同じである。
初心者は、print から使い始め、慣れてくると print using を使うと言われていた。
後者はとっつきにくいが独特の便利さがあるとされた。
つまり、BASICは、cout 方式も使えたのに、敢えて printf 方式も用意したのだ。
このスレやネットには初心者が多いので、覚えることの少ない coutが好まれているだけ。
なぜcoutが問題なのかと言うと、書く量が多くなることと、見た目的に結果を予想しづらくなるからだ。
printf( "(x, y, z, w)=(%d, %d, %d, %d)\n", x, y, z, w );
で済む所が、coutだと、
cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << std::eol;
などとなってしまい、打ち込みにくいだけでなく、結果がどうなるかも直感的に分かりにくい。
出力にカンマや空白を入れるのが難しいのだ。
さらに、これを16進に直したい場合、printf なら、
printf( "(x, y, z, w)=(%X, %X, %X, %X)\n", x, y, z, w );
と僅かな修正だけで済む。さらに、左に0を埋めた8桁の16進数に直したい場合には、
printf( "(x, y, z, w)=(%08X, %08X, %08X, %08X)\n", x, y, z, w );
で済むし、表示に0xを含めたい場合には、
printf( "(x, y, z, w)=(0x%08X, 0x%08X, 0x%08X, 0x%08X)\n", x, y, z, w );
で済む。これで、0x0000ABCD などと表示できる。さらに、0x0000abcd と表示したい場合は、
printf( "(x, y, z, w)=(0x%08x, 0x%08x, 0x%08x, 0x%08x)\n", x, y, z, w );
で済む。どのような表示形式にしても、コンパクトで見易い。
一方、coutでこれと同じようにしようと思ったら、見易くするためには5行くらいの長さになってしまうだろう。
それでもこのように美しい見た目にはならない。
昔のBASICのprint文にも同じような問題点がおきたから、print using が生み出されたのだ。
それを知らないで、coutがprintfより優れていると思ったら大間違いだ。
昔BASICが人気があったころ、print と print using の二種類有り、
cout は前者の、printf は後者の流儀と同じである。
初心者は、print から使い始め、慣れてくると print using を使うと言われていた。
後者はとっつきにくいが独特の便利さがあるとされた。
つまり、BASICは、cout 方式も使えたのに、敢えて printf 方式も用意したのだ。
このスレやネットには初心者が多いので、覚えることの少ない coutが好まれているだけ。
なぜcoutが問題なのかと言うと、書く量が多くなることと、見た目的に結果を予想しづらくなるからだ。
printf( "(x, y, z, w)=(%d, %d, %d, %d)\n", x, y, z, w );
で済む所が、coutだと、
cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << std::eol;
などとなってしまい、打ち込みにくいだけでなく、結果がどうなるかも直感的に分かりにくい。
出力にカンマや空白を入れるのが難しいのだ。
さらに、これを16進に直したい場合、printf なら、
printf( "(x, y, z, w)=(%X, %X, %X, %X)\n", x, y, z, w );
と僅かな修正だけで済む。さらに、左に0を埋めた8桁の16進数に直したい場合には、
printf( "(x, y, z, w)=(%08X, %08X, %08X, %08X)\n", x, y, z, w );
で済むし、表示に0xを含めたい場合には、
printf( "(x, y, z, w)=(0x%08X, 0x%08X, 0x%08X, 0x%08X)\n", x, y, z, w );
で済む。これで、0x0000ABCD などと表示できる。さらに、0x0000abcd と表示したい場合は、
printf( "(x, y, z, w)=(0x%08x, 0x%08x, 0x%08x, 0x%08x)\n", x, y, z, w );
で済む。どのような表示形式にしても、コンパクトで見易い。
一方、coutでこれと同じようにしようと思ったら、見易くするためには5行くらいの長さになってしまうだろう。
それでもこのように美しい見た目にはならない。
昔のBASICのprint文にも同じような問題点がおきたから、print using が生み出されたのだ。
それを知らないで、coutがprintfより優れていると思ったら大間違いだ。
633デフォルトの名無しさん
2020/03/05(木) 19:15:26.67ID:HyVcGvBE >>632
誤: cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << std::eol;
正: cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << w << ")" << std::eol;
誤: cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << std::eol;
正: cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << w << ")" << std::eol;
634デフォルトの名無しさん
2020/03/05(木) 19:18:12.66ID:HyVcGvBE >>633
もっと言えば、この cout は、古いN88-BASIC言語より記述量が多い。
<< を使うからだ。N88-BASIC は、<< の部分が ; となる。
N88-BASIC なら、
print "(x, y, z, w)=("; x ; ", " ; y ; ", " ; z ; ", " ; w ; ")"
もっと言えば、この cout は、古いN88-BASIC言語より記述量が多い。
<< を使うからだ。N88-BASIC は、<< の部分が ; となる。
N88-BASIC なら、
print "(x, y, z, w)=("; x ; ", " ; y ; ", " ; z ; ", " ; w ; ")"
635デフォルトの名無しさん
2020/03/05(木) 19:22:17.12ID:HyVcGvBE 1. N88-BASIC
print "(x, y, z, w)=("; x ; ", " ; y ; ", " ; z ; ", " ; w ; ")"
2. C
printf( "(x, y, z, w)=(%d, %d, %d, %d)\n", x, y, z, w );
3. C++
cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << w << ")" << std::eol;
C++ が最も汚く、書きづらい。
N88-BASIC ---> C の printf() // 進化と言えよう。
N88-BASIC ---> C++ の cout // 後退のように見える。
cout は、classのパワーを例示するために用意されたと聞いている。
もともと実用性は無かったのに、それを知らない人達が使うようになってしまったのが現状である。
print "(x, y, z, w)=("; x ; ", " ; y ; ", " ; z ; ", " ; w ; ")"
2. C
printf( "(x, y, z, w)=(%d, %d, %d, %d)\n", x, y, z, w );
3. C++
cout << "(x, y, z, w)=(" << x << ", " << y << ", " << z << ", " << w << ")" << std::eol;
C++ が最も汚く、書きづらい。
N88-BASIC ---> C の printf() // 進化と言えよう。
N88-BASIC ---> C++ の cout // 後退のように見える。
cout は、classのパワーを例示するために用意されたと聞いている。
もともと実用性は無かったのに、それを知らない人達が使うようになってしまったのが現状である。
636デフォルトの名無しさん
2020/03/05(木) 19:25:02.59ID:wTyki8t2 printfとcoutの議論はgoogleでもやってたな。
型安全と見やすさのどちらが重要かみたいなやつ。
型安全にこだわるやつはたいてい現実見てないなってのが良くわかる例になってる。
型安全と見やすさのどちらが重要かみたいなやつ。
型安全にこだわるやつはたいてい現実見てないなってのが良くわかる例になってる。
637デフォルトの名無しさん
2020/03/05(木) 19:32:35.95ID:HyVcGvBE >>635
一見、printf と cout で記述のしやすさに大差ないと思う人もいるかもしれないが、実際に入れてみると coutの記述のしにくさは異常なほどである。
特に問題なのが、後から "," の後ろに空白を入れたくなったりしたときの修正のしにくさである。
printf の場合は、最初の書式付文字列の中にまとまっているので、非常に修正し易く、数秒で修正できてしまう。
ところが cout の場合は、全体に散らばっているので修正箇所を見出すのが非常に難しく、間違いの元になり易い。
全部修正したつもりでも、いくつか入力し忘れていたり、"・・・" の中に入れなければならない所を、"・・・" の直後の「地の文」に入れてしまったりする羽目になる。
また、よくあるのは、" や << を入れ忘れたりすることである。
一見、printf と cout で記述のしやすさに大差ないと思う人もいるかもしれないが、実際に入れてみると coutの記述のしにくさは異常なほどである。
特に問題なのが、後から "," の後ろに空白を入れたくなったりしたときの修正のしにくさである。
printf の場合は、最初の書式付文字列の中にまとまっているので、非常に修正し易く、数秒で修正できてしまう。
ところが cout の場合は、全体に散らばっているので修正箇所を見出すのが非常に難しく、間違いの元になり易い。
全部修正したつもりでも、いくつか入力し忘れていたり、"・・・" の中に入れなければならない所を、"・・・" の直後の「地の文」に入れてしまったりする羽目になる。
また、よくあるのは、" や << を入れ忘れたりすることである。
638デフォルトの名無しさん
2020/03/05(木) 19:37:42.73ID:HyVcGvBE >>637
coutの場合に、よくあるのが、" の内側と外側の混乱である。
"で文字列を始めたり終えたり何度も繰り返すので、目が混乱して
どっちがどっちか分からなくなる。
コンパイルしたとき、文字列が開きっぱなしになって、酷いときには
ファイルの最後までコンパイルしてしまって、エラーがどこで起きたのかさえ
分からない最悪の間違いを犯してしまう。
だから、perl,ruby,pythonでは、
"#{変数名}"
のような記述が発明された。
これは、printf を進化させたものといえよう。
しかし、coutは退化である。
coutの場合に、よくあるのが、" の内側と外側の混乱である。
"で文字列を始めたり終えたり何度も繰り返すので、目が混乱して
どっちがどっちか分からなくなる。
コンパイルしたとき、文字列が開きっぱなしになって、酷いときには
ファイルの最後までコンパイルしてしまって、エラーがどこで起きたのかさえ
分からない最悪の間違いを犯してしまう。
だから、perl,ruby,pythonでは、
"#{変数名}"
のような記述が発明された。
これは、printf を進化させたものといえよう。
しかし、coutは退化である。
639デフォルトの名無しさん
2020/03/05(木) 19:39:40.38ID:ZxLAHsYQ なんでこの子価値の無い長文書いてしまうん?
640デフォルトの名無しさん
2020/03/05(木) 19:39:40.91ID:0BzRX834 >>638
エディタくらいまともなやつ使え
エディタくらいまともなやつ使え
641デフォルトの名無しさん
2020/03/05(木) 19:41:36.95ID:HyVcGvBE >>640
そんな問題ではない。
そんな問題ではない。
642デフォルトの名無しさん
2020/03/05(木) 19:47:23.03ID:lwuDTkr7 どんなクラスのオブジェクトでもoperator<<さえ定義すれば吐き出せるのがiostreamのメリットよ
クラスは組込型のように振る舞えるべきだっていうオブジェクト指向の理想のために必要だったんだよ
安全な後世から後出しジャンケンで叩くのはフェアじゃないよ
それはそれとしてiostreamは使いづらいクソだという意見は否定しない
クラスは組込型のように振る舞えるべきだっていうオブジェクト指向の理想のために必要だったんだよ
安全な後世から後出しジャンケンで叩くのはフェアじゃないよ
それはそれとしてiostreamは使いづらいクソだという意見は否定しない
643デフォルトの名無しさん
2020/03/05(木) 19:48:11.76ID:LYrzkUWd644デフォルトの名無しさん
2020/03/05(木) 20:14:15.18ID:0JAmDFqx >>639
中学校が休校になって暇を持て余してるんだろう
中学校が休校になって暇を持て余してるんだろう
645デフォルトの名無しさん
2020/03/05(木) 20:37:19.93ID:ZVNOJjMJ646デフォルトの名無しさん
2020/03/05(木) 20:38:33.78ID:eBZoUINk647デフォルトの名無しさん
2020/03/05(木) 20:45:44.87ID:wTyki8t2649デフォルトの名無しさん
2020/03/05(木) 20:53:54.02ID:eBZoUINk >>647
日本語でおk
日本語でおk
>>583
>マジでプロでもフリーソフト開発してるアマチュアでもいいから実際の開発に使ってる人(と初心者)専用の相談スレがあった方がいいかもな
ここがそうだと思います
そう思えないのであれば、それはスルー力が足りないかと
>マジでプロでもフリーソフト開発してるアマチュアでもいいから実際の開発に使ってる人(と初心者)専用の相談スレがあった方がいいかもな
ここがそうだと思います
そう思えないのであれば、それはスルー力が足りないかと
651デフォルトの名無しさん
2020/03/05(木) 20:54:47.02ID:wTyki8t2 なんだ日本語読めないのか。。そりゃ失礼。
652デフォルトの名無しさん
2020/03/05(木) 20:55:46.47ID:eBZoUINk >>612
私は extern "C" くらいしか思いつかないですね…
私は extern "C" くらいしか思いつかないですね…
>>624
>Cで出来ることはC++でもできる。
C++ でできないこともあります
他言語から自由に呼び出せるライブラリを書くときは C で書くしかないでしょうね…
extern "C" というのは、もはや C で書いているのと一緒…
>Cで出来ることはC++でもできる。
C++ でできないこともあります
他言語から自由に呼び出せるライブラリを書くときは C で書くしかないでしょうね…
extern "C" というのは、もはや C で書いているのと一緒…
657デフォルトの名無しさん
2020/03/05(木) 21:03:38.79ID:LYrzkUWd658デフォルトの名無しさん
2020/03/05(木) 21:07:33.42ID:eBZoUINk659デフォルトの名無しさん
2020/03/05(木) 21:29:47.60ID:maJEmc7K660デフォルトの名無しさん
2020/03/05(木) 21:57:41.56ID:maJEmc7K 昔BeOSっていう純粋にC++で書かれたOSがあったけど、コンパイラやAPIのバージョンアップで
マングリング規則やクラスのエクスポート時の互換性が無くなって、
過去のアプリが全く動かなくなったりした(こういうのはBeOS限定の話ではないけど
クラスライブラリの互換性をどうにかするために、MSの場合はvtblが先頭にあることを利用したり
余分な引数を追加したりしてコンパイラ間の互換や後のバージョンアップに対応できるようにしたけど
そもそもvtblを先頭に置くのは規格で決まってるわけではない
上の方でUBUB言ってた人達はこういうのどう思うんだろうね
マングリング規則やクラスのエクスポート時の互換性が無くなって、
過去のアプリが全く動かなくなったりした(こういうのはBeOS限定の話ではないけど
クラスライブラリの互換性をどうにかするために、MSの場合はvtblが先頭にあることを利用したり
余分な引数を追加したりしてコンパイラ間の互換や後のバージョンアップに対応できるようにしたけど
そもそもvtblを先頭に置くのは規格で決まってるわけではない
上の方でUBUB言ってた人達はこういうのどう思うんだろうね
661デフォルトの名無しさん
2020/03/05(木) 22:17:26.19ID:DHJqOPbR >>610
コンパイル時にエラーが出ていました。
下記でコンパイル通りました。
ありがとうございます。
std::regex re( R"(^\s*(^\S+)\s+(\S+))")
ダブルクォーテーションの内側を全部丸括弧でくくればよくて、そのカッコは
下記の results[1] にはセットされないんですね。
知らないとちょっと戸惑いそうだ。
std::regex_search(word, results, re)
コンパイル時にエラーが出ていました。
下記でコンパイル通りました。
ありがとうございます。
std::regex re( R"(^\s*(^\S+)\s+(\S+))")
ダブルクォーテーションの内側を全部丸括弧でくくればよくて、そのカッコは
下記の results[1] にはセットされないんですね。
知らないとちょっと戸惑いそうだ。
std::regex_search(word, results, re)
662はちみつ餃子 ◆8X2XSCHEME
2020/03/05(木) 22:19:16.64ID:2gUuzrSw >>660
OS の製作元と同じマイクロソフトが提供している VS で COM を作る分には別にいいんじゃないの。
移植性を考える必要もないし。
しかし、こういう変な形でなければ C++ で作ったバイナリは運用しづらいということの証明にもなってはいるよな。
OS の製作元と同じマイクロソフトが提供している VS で COM を作る分には別にいいんじゃないの。
移植性を考える必要もないし。
しかし、こういう変な形でなければ C++ で作ったバイナリは運用しづらいということの証明にもなってはいるよな。
663デフォルトの名無しさん
2020/03/05(木) 22:24:01.52ID:LYrzkUWd664デフォルトの名無しさん
2020/03/05(木) 22:33:54.16ID:maJEmc7K665デフォルトの名無しさん
2020/03/05(木) 22:49:02.33ID:LYrzkUWd666はちみつ餃子 ◆8X2XSCHEME
2020/03/05(木) 22:55:28.04ID:2gUuzrSw >>664
まあ実際には VS に合わせてるコンパイラが多いのは知ってる。
gcc とかもデフォルトではビットフィールドの割り当て順序が違ってるんだが、
VS に合わせるオプションとかが用意されてたりもするくらいには Windows では VS が基準。
ただやっぱりそこには「検証の手間」が発生するよ。
VS でやる分にはマイクロソフト自身がやってんだから疑いが入る余地はない、
確実に問題はないという意味で VS に限定して問題ないと表現した。
ひょっとしたら VS 以外のコンパイラでもドキュメントをよく見たらどっかに書いてあるのかもしれんけど、
少なくとも私はそれを確認したことはない。
---
バイナリの規格ってのは「せめて Windows 内では」とかいうレベルのこと?
違うアーキテクチャで統一できないのは仕方ないけど、
主要なアーキテクチャ/OS内ではっきりした規格を定めれていないのはなんでできないんかなぁと思わなくはないな。
うーん、でも Linux なんかだと GCC のマングルが実質的な規格そのものみたいな感じもするし、
Windows だと結局は VS に合わせるしかないんだからそれが規格みたいなもんじゃね?
その規格 (的なもの) に合わせられていないのは単純にやる機運が起こってないだけで。
まあ実際には VS に合わせてるコンパイラが多いのは知ってる。
gcc とかもデフォルトではビットフィールドの割り当て順序が違ってるんだが、
VS に合わせるオプションとかが用意されてたりもするくらいには Windows では VS が基準。
ただやっぱりそこには「検証の手間」が発生するよ。
VS でやる分にはマイクロソフト自身がやってんだから疑いが入る余地はない、
確実に問題はないという意味で VS に限定して問題ないと表現した。
ひょっとしたら VS 以外のコンパイラでもドキュメントをよく見たらどっかに書いてあるのかもしれんけど、
少なくとも私はそれを確認したことはない。
---
バイナリの規格ってのは「せめて Windows 内では」とかいうレベルのこと?
違うアーキテクチャで統一できないのは仕方ないけど、
主要なアーキテクチャ/OS内ではっきりした規格を定めれていないのはなんでできないんかなぁと思わなくはないな。
うーん、でも Linux なんかだと GCC のマングルが実質的な規格そのものみたいな感じもするし、
Windows だと結局は VS に合わせるしかないんだからそれが規格みたいなもんじゃね?
その規格 (的なもの) に合わせられていないのは単純にやる機運が起こってないだけで。
667デフォルトの名無しさん
2020/03/05(木) 23:15:47.07ID:maJEmc7K >>666
マングリングは政治的な問題も絡むのか・・
すまんバイナリって言ったから誤解させたかもしれん、インターフェースの話ね
クラスのエクスポートとか回り道せずに出来るようにならないと、上でも言われてる通りいつまでもCのスタイルに合わせざるを得ない
てかvtblを先頭に置かないコンパイラを知らんのだけど、あったとして合理的な理由とかあるんだろうか
マングリングは政治的な問題も絡むのか・・
すまんバイナリって言ったから誤解させたかもしれん、インターフェースの話ね
クラスのエクスポートとか回り道せずに出来るようにならないと、上でも言われてる通りいつまでもCのスタイルに合わせざるを得ない
てかvtblを先頭に置かないコンパイラを知らんのだけど、あったとして合理的な理由とかあるんだろうか
668デフォルトの名無しさん
2020/03/05(木) 23:18:24.65ID:lncFD5GH どんな状況でも動くことを考えたらCの仕様に行き着く
669デフォルトの名無しさん
2020/03/06(金) 00:04:56.44ID:pppdCZrx iostreamの使いづらさはboost::formatで大体解決する
ってかformat指定をワザワザprintfから改悪してstreamオブジェクトに余計な状態保持をさせてしまったところ
std::vector<bool>が典型的だけど、初期の頃に考えられた言語デモンストレーションの為に、実用性に疑問の残るおかしな仕様が標準化されちゃっているところがあるよね
ってかformat指定をワザワザprintfから改悪してstreamオブジェクトに余計な状態保持をさせてしまったところ
std::vector<bool>が典型的だけど、初期の頃に考えられた言語デモンストレーションの為に、実用性に疑問の残るおかしな仕様が標準化されちゃっているところがあるよね
670デフォルトの名無しさん
2020/03/06(金) 00:09:16.95ID:trP/ijr0 >>630
printf が関数として、特別な機能を持たせている文字は % の1つだけ。
しかし、言語自体が \ をエスケープ記号として使っているので、合計2つが
特別な意味を持っており、これでも問題になる場合がある。
一方、cppfmt の場合、少なくとも %, {, } の3つが特殊記号になっていて、
\と合わせれば、合計4つもが特別な意味を持っており、いくらなんでも多すぎる。
それがセンスの悪さ、と呼ばれるものである。
printf が関数として、特別な機能を持たせている文字は % の1つだけ。
しかし、言語自体が \ をエスケープ記号として使っているので、合計2つが
特別な意味を持っており、これでも問題になる場合がある。
一方、cppfmt の場合、少なくとも %, {, } の3つが特殊記号になっていて、
\と合わせれば、合計4つもが特別な意味を持っており、いくらなんでも多すぎる。
それがセンスの悪さ、と呼ばれるものである。
671デフォルトの名無しさん
2020/03/06(金) 00:13:54.49ID:ba67/VF+672デフォルトの名無しさん
2020/03/06(金) 00:16:09.16ID:trP/ijr0 >>671
64bit モードは使う必要ない。
64bit モードは使う必要ない。
673デフォルトの名無しさん
2020/03/06(金) 00:28:50.27ID:ba67/VF+674デフォルトの名無しさん
2020/03/06(金) 00:34:13.09ID:pppdCZrx675デフォルトの名無しさん
2020/03/06(金) 00:53:15.12ID:trP/ijr0 メリットは何もないのに64bit使う必要なし。
676デフォルトの名無しさん
2020/03/06(金) 00:56:22.87ID:8Rm5TWXP そうか
じゃあお前だけtime_tに32bit使って2038年問題で苦しめ
じゃあお前だけtime_tに32bit使って2038年問題で苦しめ
677デフォルトの名無しさん
2020/03/06(金) 01:00:41.40ID:pppdCZrx printfは型と対応するformat指定法を把握していないと簡単にバグるからね
まあ、最近のまともなコンパイラだとprintfのformat解析まで静的にやって殆んどの場面でエラーなり警告なり出すから大分マシだけど
まあ、最近のまともなコンパイラだとprintfのformat解析まで静的にやって殆んどの場面でエラーなり警告なり出すから大分マシだけど
678デフォルトの名無しさん
2020/03/06(金) 01:04:32.93ID:Lqsy4Vrx (ITドカタの爺さんには)64bitはなんのメリットもない
pythonなんて当然触ったこともない
pythonなんて当然触ったこともない
679デフォルトの名無しさん
2020/03/06(金) 01:55:37.24ID:trP/ijr0680デフォルトの名無しさん
2020/03/06(金) 02:12:28.32ID:hhWvctpB >>679
自分で自分に批判レスするってアホみたい
自分で自分に批判レスするってアホみたい
681デフォルトの名無しさん
2020/03/06(金) 02:13:52.12ID:trP/ijr0 >>680
頭がおかしいね、あなた。
頭がおかしいね、あなた。
682デフォルトの名無しさん
2020/03/06(金) 02:18:58.34ID:8Rm5TWXP 知らなくて驚くかもしれないけど、32bitのシステムでも64bit整数は使えるんだよ
683デフォルトの名無しさん
2020/03/06(金) 02:27:44.01ID:P6VjmRBF 64ビットは不要とか言っちゃう奴がC++の仕様に文句言うとかないわw
684デフォルトの名無しさん
2020/03/06(金) 02:31:48.79ID:trP/ijr0 ハード屋が単に食い扶持確保のために用意しただけのものを勝手に意味があると思い込んでいる馬鹿な人達。
685デフォルトの名無しさん
2020/03/06(金) 02:59:03.29ID:8Rm5TWXP >>684
純粋な疑問なんだけど、あなたは4294967295を超える整数を扱う必要がある時にはどうするの?
純粋な疑問なんだけど、あなたは4294967295を超える整数を扱う必要がある時にはどうするの?
686デフォルトの名無しさん
2020/03/06(金) 04:22:51.72ID:89RQTO1C 構造体を使います。
687デフォルトの名無しさん
2020/03/06(金) 04:28:44.87ID:89RQTO1C 構造体を知らない人が64ビット言ってるんだと思います。
688デフォルトの名無しさん
2020/03/06(金) 04:29:16.89ID:8Rm5TWXP なるほどね
センス悪いねあんた
センス悪いねあんた
689デフォルトの名無しさん
2020/03/06(金) 04:32:38.83ID:89RQTO1C 何のセンスだ。
690デフォルトの名無しさん
2020/03/06(金) 04:35:36.86ID:8Rm5TWXP 仕事のセンスだよ
じゃあ構造体使って1兆÷7を計算するコード書いてみてよ
64bit整数を使えば「100000000000ULL/7」だけで済むものを
どれだけ面倒で下らないコードで水増しして生産性下げてチームに迷惑かけてるのか興味あるからさ
じゃあ構造体使って1兆÷7を計算するコード書いてみてよ
64bit整数を使えば「100000000000ULL/7」だけで済むものを
どれだけ面倒で下らないコードで水増しして生産性下げてチームに迷惑かけてるのか興味あるからさ
691デフォルトの名無しさん
2020/03/06(金) 04:43:17.56ID:3vh2YYy0 64bit機のNintendo64は32bit機のプレステ1に負けたよね。商業的に。
692デフォルトの名無しさん
2020/03/06(金) 04:53:21.52ID:89RQTO1C >>690
構造体知らんの?
構造体知らんの?
693デフォルトの名無しさん
2020/03/06(金) 04:56:22.47ID:8Rm5TWXP 知らないから君の最強の多倍長整数64bit計算を見せてよ
694デフォルトの名無しさん
2020/03/06(金) 05:00:24.98ID:89RQTO1C 構造体学んでからもう一度質問してください。
695デフォルトの名無しさん
2020/03/06(金) 05:04:01.70ID:8Rm5TWXP というか構造体じゃなくて配列でいいよね
uint32_t trillion[2] = {232, 3567587328};
を7で割るコードを見せてください
64bit整数の割り算をわざわざ多倍長整数でやるなんてそんな無意味なコード書いたこともないから知らないんだよね
見本見せてよ
「100000000000ULL/7」よりもずっと優れてるんでしょ?
uint32_t trillion[2] = {232, 3567587328};
を7で割るコードを見せてください
64bit整数の割り算をわざわざ多倍長整数でやるなんてそんな無意味なコード書いたこともないから知らないんだよね
見本見せてよ
「100000000000ULL/7」よりもずっと優れてるんでしょ?
696デフォルトの名無しさん
2020/03/06(金) 05:06:27.71ID:89RQTO1C 構造体を学んでください。
いま素晴らしいアドバイスを与えましたよ?
いま素晴らしいアドバイスを与えましたよ?
697デフォルトの名無しさん
2020/03/06(金) 05:12:53.95ID:8Rm5TWXP じゃあ構造体でいいよ
struct Int64 {uint32_t high, low;};
Int64 trillion = {232, 3567587328};
さっさと7で割れや
逃げるのか?
struct Int64 {uint32_t high, low;};
Int64 trillion = {232, 3567587328};
さっさと7で割れや
逃げるのか?
698デフォルトの名無しさん
2020/03/06(金) 05:14:40.27ID:89RQTO1C いや全然ダメ。
構造体の何たるかが全然わかっていない。
まともな師匠に師事して学ぶべきです。
構造体の何たるかが全然わかっていない。
まともな師匠に師事して学ぶべきです。
699デフォルトの名無しさん
2020/03/06(金) 05:29:10.46ID:8Rm5TWXP しょうがねえな
多倍長の除算を書くのが面倒なんだったら、>>695>>697にはわざと32bit環境での多倍長演算には適さない
問題のある表現使ってやったからそのことを指摘するだけでもいいよ
それすら出来ないならお前こそまともな師匠に師事して出直してこい
多倍長の除算を書くのが面倒なんだったら、>>695>>697にはわざと32bit環境での多倍長演算には適さない
問題のある表現使ってやったからそのことを指摘するだけでもいいよ
それすら出来ないならお前こそまともな師匠に師事して出直してこい
700デフォルトの名無しさん
2020/03/06(金) 06:26:13.08ID:89RQTO1C むしろ16ビットで十分だけどな。
701デフォルトの名無しさん
2020/03/06(金) 06:41:40.07ID:8Rm5TWXP え、マジ?>>695>>697の何がダメか本当にわかんないの?
相手して損した
相手して損した
702デフォルトの名無しさん
2020/03/06(金) 07:17:23.58ID:89RQTO1C 構造体を知らないものが64ビットを愛好するということが分かった。
703デフォルトの名無しさん
2020/03/06(金) 07:25:27.16ID:hYOq9QPM >>661
R"..." はいわゆる生文字リテラルでWindowsのファイルパスとか正規表現文字列を書き易くするための機能やね
ただ無駄に高機能で
R"***(文字列中)")***" ⇒ 文字列中)"
なんてのも指定できるけど個人的にはやりすぎとしか思えない
https://cpprefjp.github.io/lang/cpp11/raw_string_literals.html
R"..." はいわゆる生文字リテラルでWindowsのファイルパスとか正規表現文字列を書き易くするための機能やね
ただ無駄に高機能で
R"***(文字列中)")***" ⇒ 文字列中)"
なんてのも指定できるけど個人的にはやりすぎとしか思えない
https://cpprefjp.github.io/lang/cpp11/raw_string_literals.html
704デフォルトの名無しさん
2020/03/06(金) 08:24:11.44ID:7d5kGJiP そもそも暗号系扱うならそんな長さじゃ全然足らんしね。
構造体構造体言ってる奴もそれわかってなさそうだが。
構造体構造体言ってる奴もそれわかってなさそうだが。
705デフォルトの名無しさん
2020/03/06(金) 08:42:39.21ID:89RQTO1C 暗号系はHaskell一択でしょ。
706デフォルトの名無しさん
2020/03/06(金) 10:08:00.27ID:mgb6nXCA プログラムが実際にかかった時間とCPU時間の2つを最後に表示させるのに何か関数用意されてますか?
clock()はCPU時間だけですよね?
clock()はCPU時間だけですよね?
707デフォルトの名無しさん
2020/03/06(金) 10:13:22.05ID:u9hNYNKX708デフォルトの名無しさん
2020/03/06(金) 10:23:16.85ID:u9hNYNKX709デフォルトの名無しさん
2020/03/06(金) 10:25:39.21ID:u9hNYNKX710デフォルトの名無しさん
2020/03/06(金) 10:33:59.25ID:hYOq9QPM711デフォルトの名無しさん
2020/03/06(金) 10:43:29.63ID:u9hNYNKX712デフォルトの名無しさん
2020/03/06(金) 10:46:24.85ID:u9hNYNKX いや問題はダブルクォーテンションか
そこは訂正
そこは訂正
713デフォルトの名無しさん
2020/03/06(金) 12:26:06.89ID:hYOq9QPM >>711-712
> 閉じカッコを含められない制限に何か合理性ある?
生文字列中にダブルクォーテーションを含めたい機会がどんだけあるんだ?
って話な
Pythonなら R"ABC" "¥"" "def" ってやるだけ(R'ABC"DEF' でもいいけど両方含む場合はとか言い出すだろうからw)
C# なら @"ABC""DEF" でできる
> ptyonだってトリプルクォートとかrawとか建て増しになってとっちらかってるわけで
トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
> 閉じカッコを含められない制限に何か合理性ある?
生文字列中にダブルクォーテーションを含めたい機会がどんだけあるんだ?
って話な
Pythonなら R"ABC" "¥"" "def" ってやるだけ(R'ABC"DEF' でもいいけど両方含む場合はとか言い出すだろうからw)
C# なら @"ABC""DEF" でできる
> ptyonだってトリプルクォートとかrawとか建て増しになってとっちらかってるわけで
トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
714デフォルトの名無しさん
2020/03/06(金) 12:31:07.14ID:1NgZSMCO ダブルクォート含みのCSVとかをパースするための正規表現書く時とかいくらでもあるけど
raw文字列ってそういう時のための物じゃないの?
raw文字列ってそういう時のための物じゃないの?
715デフォルトの名無しさん
2020/03/06(金) 13:57:40.15ID:u9hNYNKX >>713
> トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
それこそお前の感想だよね?w
役割が違う言えば聞こえがいいが、pythonの文字列リテラルは機能の直行性もない短絡的な設計
rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
でそういうのが欲しいケースはいくらでもある
JSONを文字列で埋め込んでおきたい場合とかね
c++のrawは建て増しなのは同じだけど設計の筋は通ってる
ただもう一歩がんばってindent合わせが可能な仕様にしてほしかったな
> トリプルクォートとRaw文字列は役割違うし別にとっちらかってないけど?
それこそお前の感想だよね?w
役割が違う言えば聞こえがいいが、pythonの文字列リテラルは機能の直行性もない短絡的な設計
rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
でそういうのが欲しいケースはいくらでもある
JSONを文字列で埋め込んでおきたい場合とかね
c++のrawは建て増しなのは同じだけど設計の筋は通ってる
ただもう一歩がんばってindent合わせが可能な仕様にしてほしかったな
716デフォルトの名無しさん
2020/03/06(金) 13:59:12.86ID:ytQa5naT >Pythonなら R"ABC" "¥"" "def" ってやるだけ
rawの意味ねぇなww
rawの意味ねぇなww
717デフォルトの名無しさん
2020/03/06(金) 14:24:22.40ID:trP/ijr0718デフォルトの名無しさん
2020/03/06(金) 14:28:35.64ID:trP/ijr0 >>717
それから、本当に桁数の多い数の割り算計算が本質的に必要な場合は多倍長計算ライブラリを使えばいい。
多くのアプリではそういう状況が少ないと言うことだ。
科学技術計算では、doubleか、4倍精度float数を扱えればいいので、64BIT整数が必要な場面は今のところ少ない。
メッシュの個数やループ回数が32BITを超えるようなものは、今のCPUでは重過ぎて普通、計算できない。
それから、本当に桁数の多い数の割り算計算が本質的に必要な場合は多倍長計算ライブラリを使えばいい。
多くのアプリではそういう状況が少ないと言うことだ。
科学技術計算では、doubleか、4倍精度float数を扱えればいいので、64BIT整数が必要な場面は今のところ少ない。
メッシュの個数やループ回数が32BITを超えるようなものは、今のCPUでは重過ぎて普通、計算できない。
719デフォルトの名無しさん
2020/03/06(金) 14:38:19.40ID:2gPy1GFt720デフォルトの名無しさん
2020/03/06(金) 14:41:03.85ID:hYOq9QPM >>715
> rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
まさかと思うがトリプルクォートとRaw文字列を組合せて使えることも知らんのか?
そんな知識で直行性とか語るなよw
> rawは短い正規表現などの用途しか考えてなくて複数行でかつエスケープなしができない
まさかと思うがトリプルクォートとRaw文字列を組合せて使えることも知らんのか?
そんな知識で直行性とか語るなよw
721デフォルトの名無しさん
2020/03/06(金) 14:45:21.47ID:hYOq9QPM722デフォルトの名無しさん
2020/03/06(金) 14:45:22.11ID:gkPkCuAw 業界全体の傾向では「printfへの回帰」が見られる
fmtはprintfの21世紀型強化版として捉える
つまり、+や<<で連結するのはどの言語でも煩わしかった
だからprintf(のようなもの)に戻ってきている
CUIやテキストへの出力はprintf程度で充分だった、と誰もが気付いた
fmtはprintfの21世紀型強化版として捉える
つまり、+や<<で連結するのはどの言語でも煩わしかった
だからprintf(のようなもの)に戻ってきている
CUIやテキストへの出力はprintf程度で充分だった、と誰もが気付いた
723デフォルトの名無しさん
2020/03/06(金) 14:45:35.04ID:2gPy1GFt 複数行できるぞ
std::cout << R"(abc)"
R"(def)"
"\nghi" << std::endl;
しかもエスケープあり/なしを途中で切り替えることまでできる
std::cout << R"(abc)"
R"(def)"
"\nghi" << std::endl;
しかもエスケープあり/なしを途中で切り替えることまでできる
724デフォルトの名無しさん
2020/03/06(金) 14:53:31.38ID:89RQTO1C 普通は16ビットあれば十分ですよ。
64ビット厨はプログラムしたことあるの?
64ビット厨はプログラムしたことあるの?
725デフォルトの名無しさん
2020/03/06(金) 15:11:10.95ID:/2BnMzJ+ ポインタ使えないだろ
726デフォルトの名無しさん
2020/03/06(金) 15:34:10.40ID:1NgZSMCO >>718
へー
お前の世界の普通の会計ソフトは43億円を扱えないし
お前の世界の普通の防犯カメラは43億ミリ秒(たった5日)連続稼働したら落ちるし
お前の世界の普通のOSは4GBのファイルを作れないのか
アホくさ
へー
お前の世界の普通の会計ソフトは43億円を扱えないし
お前の世界の普通の防犯カメラは43億ミリ秒(たった5日)連続稼働したら落ちるし
お前の世界の普通のOSは4GBのファイルを作れないのか
アホくさ
727デフォルトの名無しさん
2020/03/06(金) 15:56:44.11ID:trP/ijr0 >>726
16BIT時代から一兆円は扱えた。
Z80 はマシン語としては整数の掛け算/割り算も浮動小数点も全くサポートしてなかったが、BASIC言語ではどれも普通に出来た。
同様に、32BIT CPUでも、64BIT整数が扱えないわけではない。
16BIT時代から一兆円は扱えた。
Z80 はマシン語としては整数の掛け算/割り算も浮動小数点も全くサポートしてなかったが、BASIC言語ではどれも普通に出来た。
同様に、32BIT CPUでも、64BIT整数が扱えないわけではない。
728デフォルトの名無しさん
2020/03/06(金) 16:00:14.00ID:89RQTO1C intは16ビットが正解。
729デフォルトの名無しさん
2020/03/06(金) 16:03:04.34ID:u9hNYNKX730デフォルトの名無しさん
2020/03/06(金) 16:40:55.40ID:7d5kGJiP pythonは文字列まわりがとっちらかって結局2と3で分裂したが。
731デフォルトの名無しさん
2020/03/06(金) 17:14:18.31ID:1NgZSMCO python2で混乱してたのはraw周りじゃないぞ
文字列の文法は3でもほとんど変わってないはず
strとunicodeとbyte(に相当するもの)の扱いがナイーブ過ぎてグッチャグチャだったのがpython2の大問題
文字列の文法は3でもほとんど変わってないはず
strとunicodeとbyte(に相当するもの)の扱いがナイーブ過ぎてグッチャグチャだったのがpython2の大問題
732デフォルトの名無しさん
2020/03/06(金) 18:10:29.44ID:k+5uYmSv >>729
pythonでも"と'を同時に使わない限り何でもかけるじゃん。
一方、c++は)"という並びを文字列中にかけない制限があるわけなんで、
もちろん後者のほうか確率は低いけど、pythonを一方的に機能不全と言えるほどじゃないなー
pythonでも"と'を同時に使わない限り何でもかけるじゃん。
一方、c++は)"という並びを文字列中にかけない制限があるわけなんで、
もちろん後者のほうか確率は低いけど、pythonを一方的に機能不全と言えるほどじゃないなー
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- とらせん IPあり
- 【DAZN】ワールドカップ欧州予選総合 ★5
- 巨専】
- こいせん 全レス転載禁止
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【J SPORTS】FIFA U-17ワールドカップ ★10
- 高市「次回選挙争点は台湾有事よ!!」自民立憲公明維新国民「やめろーー!!」これが現実になりそうな件 [469534301]
- 経済保安相「気に入らないことがあれば経済的威圧をする国への依存はリスク」日本さん遂にアメリカと断交へ!!! [472617201]
- 自閉症が「んなっしょい」と連呼するお🏡
- 「世の中、バカが多くて疲れません?」👉1991年日本人大発狂 [543236886]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 来年は卵が1パック400円以上になるらしい
