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:xvjipUWj569デフォルトの名無しさん
2020/03/05(木) 13:39:59.47ID:TYdcXopQ570はちみつ餃子 ◆8X2XSCHEME
2020/03/05(木) 13:41:04.88ID:2gUuzrSw 何を使ってもいいけど、レイヤは切り分けた方がいいと思う。
string を使ってるときは char の配列と混同させて使うべきではないし、
char 配列を使っているなら string のことは忘れた方がいい。
どこがレイヤの境界なのかはっきりさせて。
string を使ってるときは char の配列と混同させて使うべきではないし、
char 配列を使っているなら string のことは忘れた方がいい。
どこがレイヤの境界なのかはっきりさせて。
571デフォルトの名無しさん
2020/03/05(木) 13:41:08.45ID:HyVcGvBE >>565
初めて聞いたが、書式で{1}{2}など C#に似た使い方が出来るが、
逆に、{ や } の記号を簡単にはかけなくなり printf より使いにくくなってしまう。
しかも、{1}{2}が使い易いとは思わない。むしろ%sや%dより混乱する気がする。
しかも標準ライブラリではない。
初めて聞いたが、書式で{1}{2}など C#に似た使い方が出来るが、
逆に、{ や } の記号を簡単にはかけなくなり printf より使いにくくなってしまう。
しかも、{1}{2}が使い易いとは思わない。むしろ%sや%dより混乱する気がする。
しかも標準ライブラリではない。
572デフォルトの名無しさん
2020/03/05(木) 13:41:55.46ID:HyVcGvBE573デフォルトの名無しさん
2020/03/05(木) 13:46:28.70ID:HyVcGvBE574デフォルトの名無しさん
2020/03/05(木) 13:46:40.22ID:TYdcXopQ >>572
もうそんな時代じゃないので。
いまは、CがC++に依存する時代。
C++で書かれたAPIをCから呼び出す。
C++がスクリプト言語のような柔軟性を持ちつつ、しかしシステム言語として使われるのは、Cから呼び出せるからでは。
もうそんな時代じゃないので。
いまは、CがC++に依存する時代。
C++で書かれたAPIをCから呼び出す。
C++がスクリプト言語のような柔軟性を持ちつつ、しかしシステム言語として使われるのは、Cから呼び出せるからでは。
575デフォルトの名無しさん
2020/03/05(木) 13:52:08.63ID:wTyki8t2 c++がスクリプト言語のような柔軟性をもつ?何言ってんの?病気か?
576デフォルトの名無しさん
2020/03/05(木) 13:55:30.86ID:maJEmc7K >>568
言い返すとこはそこでいいのか?w
ちなrange-based forはまだC++に慣れてない初心者に押し付けるほどのものではないし
ましてrange-basedに合わせるためにoperatorの実装を押し付けるのは論外
ドヤりたいだけの初心者は黙ってろマジ迷惑だから
言い返すとこはそこでいいのか?w
ちなrange-based forはまだC++に慣れてない初心者に押し付けるほどのものではないし
ましてrange-basedに合わせるためにoperatorの実装を押し付けるのは論外
ドヤりたいだけの初心者は黙ってろマジ迷惑だから
577デフォルトの名無しさん
2020/03/05(木) 13:59:58.25ID:HyVcGvBE >>574
coutやstd::stringが使い易いなら誰もCでやろうとは思わないが、現実にはCの方が便利だから
あくまでも使いにくいそれらを使おうとするとのは、今のネットは新しい情報だけが上に来てしまうため、C++しか知らない人が多いためだ。
coutやstd::stringが使い易いなら誰もCでやろうとは思わないが、現実にはCの方が便利だから
あくまでも使いにくいそれらを使おうとするとのは、今のネットは新しい情報だけが上に来てしまうため、C++しか知らない人が多いためだ。
578デフォルトの名無しさん
2020/03/05(木) 14:00:13.40ID:0hm1XC5v579デフォルトの名無しさん
2020/03/05(木) 14:00:44.50ID:HyVcGvBE >>577
一行目の「だから」の直後に「。」が抜けていた。
一行目の「だから」の直後に「。」が抜けていた。
580デフォルトの名無しさん
2020/03/05(木) 14:01:43.36ID:HyVcGvBE581デフォルトの名無しさん
2020/03/05(木) 14:10:16.89ID:TYdcXopQ582デフォルトの名無しさん
2020/03/05(木) 14:11:08.23ID:eBZoUINk >>576
現場でよく使われる関数は何かと尋ねられて
すぐ思い当たるものを正直に述べたのが
初心者に押しつけたように見えるのは
おまえの目か頭のどちらかがおかしいからだ
いや両方か?
C++11に付いていけず置いてかれ
C++03でドヤりたいだけなアウトカーストこそ
マトモな初心者に触るなアホが伝染るから
現場でよく使われる関数は何かと尋ねられて
すぐ思い当たるものを正直に述べたのが
初心者に押しつけたように見えるのは
おまえの目か頭のどちらかがおかしいからだ
いや両方か?
C++11に付いていけず置いてかれ
C++03でドヤりたいだけなアウトカーストこそ
マトモな初心者に触るなアホが伝染るから
583デフォルトの名無しさん
2020/03/05(木) 14:12:52.64ID:maJEmc7K マジでプロでもフリーソフト開発してるアマチュアでもいいから実際の開発に使ってる人(と初心者)専用の相談スレがあった方がいいかもな
開発全くしてない人間でも別に好きにすればいいが、ここはプロや経験長い人にマウント取りたいだけのクソバカが多過ぎる(しかもそれに初心者が騙されて右往左往する)
まぁその役割は初心者スレがすでにある程度担ってんだろうけど
開発全くしてない人間でも別に好きにすればいいが、ここはプロや経験長い人にマウント取りたいだけのクソバカが多過ぎる(しかもそれに初心者が騙されて右往左往する)
まぁその役割は初心者スレがすでにある程度担ってんだろうけど
584デフォルトの名無しさん
2020/03/05(木) 14:13:34.58ID:maJEmc7K >>582
アマチュアで初心者でドヤりたいだけ、ってのは否定しないのかwwww
アマチュアで初心者でドヤりたいだけ、ってのは否定しないのかwwww
585デフォルトの名無しさん
2020/03/05(木) 14:16:27.96ID:TYdcXopQ 乱数とかCライブラリでは辛すぎる。
586デフォルトの名無しさん
2020/03/05(木) 14:16:37.51ID:eBZoUINk >>584
はあ? 俺がアマチュアという事実無根の誹謗中傷をしたことを否定しないのはおまえだろ
はあ? 俺がアマチュアという事実無根の誹謗中傷をしたことを否定しないのはおまえだろ
587デフォルトの名無しさん
2020/03/05(木) 14:17:44.84ID:eBZoUINk 嘘つき野郎と日本語で言っても非難の度合いが弱すぎるので英語でLIAR!!
588デフォルトの名無しさん
2020/03/05(木) 14:17:54.10ID:TYdcXopQ 仕様に「任意の」とついたら、もうCでは拷問になる。
CIA真っ青級の。
CIA真っ青級の。
589デフォルトの名無しさん
2020/03/05(木) 14:18:57.32ID:TYdcXopQ めんどくさいからそろそろ天才がどうたらいういつもの結論行って。
590デフォルトの名無しさん
2020/03/05(木) 14:20:20.54ID:TYdcXopQ Networking TSが入れば追いついてこれるものなど居ない。
591デフォルトの名無しさん
2020/03/05(木) 14:21:04.08ID:wTyki8t2 江添に影響されたバカが増えたよな。
ああいうまともにコード書いてないで知ったかするカス態度はほんと害悪だわ。
ああいうまともにコード書いてないで知ったかするカス態度はほんと害悪だわ。
592デフォルトの名無しさん
2020/03/05(木) 14:23:28.86ID:eBZoUINk 生データからノイズを除去し有益な情報だけを抽出できないやつに江添の文面は無理
593デフォルトの名無しさん
2020/03/05(木) 14:26:52.95ID:maJEmc7K まぁC++専門のライター自身がC++に変な幻想抱いてるしね
スクリプト言語の代わりになったって仕方ないのに
むしろC++にそのように振る舞わせるためにユーザーがアホほどコスト掛けなきゃいけなくなるという
スクリプト言語の代わりになったって仕方ないのに
むしろC++にそのように振る舞わせるためにユーザーがアホほどコスト掛けなきゃいけなくなるという
594デフォルトの名無しさん
2020/03/05(木) 14:32:04.59ID:TYdcXopQ595デフォルトの名無しさん
2020/03/05(木) 14:32:11.09ID:wTyki8t2 ただ新しい言語をなぜやるかの理由の一つとして
年上にマウントとるためってのは実際大きいんだろうなと思う。
これは他言語でもそうだし、昔からそう。
この点についてこの業界は50年以上全く解決されてない。
年上にマウントとるためってのは実際大きいんだろうなと思う。
これは他言語でもそうだし、昔からそう。
この点についてこの業界は50年以上全く解決されてない。
596デフォルトの名無しさん
2020/03/05(木) 14:33:02.32ID:TYdcXopQ C++でワンライナー書けるようになったら、初心者脱出。
597デフォルトの名無しさん
2020/03/05(木) 14:37:10.41ID:LYrzkUWd >>574
cがc++に依存するって何のこと言ってる?
cがc++に依存するって何のこと言ってる?
598デフォルトの名無しさん
2020/03/05(木) 14:41:02.50ID:eBZoUINk 俺が6800のマシン語やり始めた頃
ジジイたちはPCなんてオモチャとバカにしてたから
マウント取りたきゃいつでも取れてたが
そんなパンピーが考えそうなくだらねえことには興味なかった
ジジイたちはPCなんてオモチャとバカにしてたから
マウント取りたきゃいつでも取れてたが
そんなパンピーが考えそうなくだらねえことには興味なかった
599デフォルトの名無しさん
2020/03/05(木) 14:45:43.10ID:TYdcXopQ C++を使いこなせないと老害の始まり。
600デフォルトの名無しさん
2020/03/05(木) 15:16:05.18ID:maJEmc7K601デフォルトの名無しさん
2020/03/05(木) 15:17:50.50ID:TYdcXopQ URL見て気が付いてほしかったが。
602デフォルトの名無しさん
2020/03/05(木) 15:21:51.85ID:maJEmc7K 君そのマウント癖やめた方がいいよ
しょっちゅう恥かいてるだろ?
しかも自爆でw
しょっちゅう恥かいてるだろ?
しかも自爆でw
603デフォルトの名無しさん
2020/03/05(木) 15:28:42.90ID:TYdcXopQ いや、CINTなんていにしえの遺物で、話題になることも無いし。
そこで気づいてほしかったのだが。
そこで気づいてほしかったのだが。
604デフォルトの名無しさん
2020/03/05(木) 15:30:00.52ID:TYdcXopQ まさに老害にぴったりと。
605デフォルトの名無しさん
2020/03/05(木) 15:35:14.30ID:LYrzkUWd >>604
でcがc++に依存するって何のこと?
でcがc++に依存するって何のこと?
606デフォルトの名無しさん
2020/03/05(木) 15:51:28.16ID:eBZoUINk 俺もぜひ拝聴したいねえ
607デフォルトの名無しさん
2020/03/05(木) 16:27:00.86ID:0JAmDFqx このスレって伸びてるときほど中身が薄くなるなw
608デフォルトの名無しさん
2020/03/05(木) 16:33:56.89ID:TYdcXopQ もはやCだけで完結しない。
Cは歴史の遺物。
Cは歴史の遺物。
609デフォルトの名無しさん
2020/03/05(木) 16:35:18.30ID:TYdcXopQ API呼び出したら、中身はC++で書かれてるだろ?
610デフォルトの名無しさん
2020/03/05(木) 16:39:10.51ID:4O4IELXe >>557
エラーってのがコンパイルエラーなら"\\s"とかR"(\s)"にする、実行時ならコンパイラのバージョンを上げる、でどうかな
エラーってのがコンパイルエラーなら"\\s"とかR"(\s)"にする、実行時ならコンパイラのバージョンを上げる、でどうかな
611デフォルトの名無しさん
2020/03/05(木) 16:55:10.20ID:DpzQwxFi その理論だとc++もcでかかれたコード呼ぶだろ
ライブラリがc++のしか用意されてないとかそういう話かと思った
ライブラリがc++のしか用意されてないとかそういう話かと思った
612デフォルトの名無しさん
2020/03/05(木) 16:58:12.34ID:eBZoUINk613デフォルトの名無しさん
2020/03/05(木) 17:08:17.82ID:LYrzkUWd >>609
時代とか大口叩いたくせに後で矮小化すんなよ、くそださい
その例でいうと中の実装言語が何かはc側は関知してないだろ
それはcがc++に依存とは言わない
その関数が提供する機能に依存してるという特定の事例にすぎない
だいたいABIは事実上cベースしかない
c++がcのふりしてるんだよ
時代とか大口叩いたくせに後で矮小化すんなよ、くそださい
その例でいうと中の実装言語が何かはc側は関知してないだろ
それはcがc++に依存とは言わない
その関数が提供する機能に依存してるという特定の事例にすぎない
だいたいABIは事実上cベースしかない
c++がcのふりしてるんだよ
614デフォルトの名無しさん
2020/03/05(木) 17:11:40.19ID:2VKfb2ir 名前修飾の法則は規格化されないんかね
615デフォルトの名無しさん
2020/03/05(木) 17:16:22.18ID:HyVcGvBE >>609
・Windowsの場合、C++のプログラムは最終的には、Win32を呼び出しているが、 Win32は、記述言語もインターフェースもC。
・Linuxでも同様。LinuxのKernel本体はCで書かれている。
GTKやKDE, Qt は原則 C++ だが、最終的には Cで書かれ、かつ、Cのインターフェース を持つ System Call が呼び出される。
どちらも
C++ ---> C
の流れ。基礎部分やバックエンド部分は C になることが多い。
逆に C から C++ を呼び出すことは稀。
だから、事実とは逆。
・Windowsの場合、C++のプログラムは最終的には、Win32を呼び出しているが、 Win32は、記述言語もインターフェースもC。
・Linuxでも同様。LinuxのKernel本体はCで書かれている。
GTKやKDE, Qt は原則 C++ だが、最終的には Cで書かれ、かつ、Cのインターフェース を持つ System Call が呼び出される。
どちらも
C++ ---> C
の流れ。基礎部分やバックエンド部分は C になることが多い。
逆に C から C++ を呼び出すことは稀。
だから、事実とは逆。
616デフォルトの名無しさん
2020/03/05(木) 17:19:27.49ID:HyVcGvBE >>614
gccのマングリング化法は資料がある。
vc++も解析資料がある。
clangはgccのマングリング化法を使っている。
しかし、gccのマングリング化法を使うと、gnu/FSF/GPL 信者から
「真似をした、ずるい」と文句を言われたり、証拠もないのに
「勝手にソースを使った」などと風評被害があるに決まってるから
使いづらい。
gccのマングリング化法は資料がある。
vc++も解析資料がある。
clangはgccのマングリング化法を使っている。
しかし、gccのマングリング化法を使うと、gnu/FSF/GPL 信者から
「真似をした、ずるい」と文句を言われたり、証拠もないのに
「勝手にソースを使った」などと風評被害があるに決まってるから
使いづらい。
617デフォルトの名無しさん
2020/03/05(木) 17:19:36.10ID:2VKfb2ir windowsはc++と混在してたはずよ
win32だけは違うとかあるかも試練が
win32だけは違うとかあるかも試練が
618デフォルトの名無しさん
2020/03/05(木) 17:21:34.22ID:HyVcGvBE >>617
・GDI+ は C++ インターフェースだが、内部では Cの API を呼び出す仕組みになっている。
・DirectXも C++ インターフェースではあるが、COMだから Cからも呼び出せる。
・GDI+ は C++ インターフェースだが、内部では Cの API を呼び出す仕組みになっている。
・DirectXも C++ インターフェースではあるが、COMだから Cからも呼び出せる。
619デフォルトの名無しさん
2020/03/05(木) 17:23:03.34ID:HyVcGvBE620デフォルトの名無しさん
2020/03/05(木) 17:24:33.30ID:wTyki8t2 こいつらextern "C"についてさえまともに理解してなさげ。。
621デフォルトの名無しさん
2020/03/05(木) 17:37:41.82ID:HyVcGvBE >>608
Cだけだと、少し不便なだけで完結する。
むしろ、C++ だけではスクリプト言語的なことしかできないので、完結とはいいがたい。
このスレは新しい言語である C++ をネットで学んだだけで、基礎となる C の部分が学べてない人が多いようだ。
ネットだと新しく入った機能や新しい記事だけが上位に来てしまうから、新しいことしか知らない人が書いたページだけしか見る機会がなくなってしまうが、それだと悪循環になり、古くてももっと良いものがあっても学べない。
Cだけだと、少し不便なだけで完結する。
むしろ、C++ だけではスクリプト言語的なことしかできないので、完結とはいいがたい。
このスレは新しい言語である C++ をネットで学んだだけで、基礎となる C の部分が学べてない人が多いようだ。
ネットだと新しく入った機能や新しい記事だけが上位に来てしまうから、新しいことしか知らない人が書いたページだけしか見る機会がなくなってしまうが、それだと悪循環になり、古くてももっと良いものがあっても学べない。
622デフォルトの名無しさん
2020/03/05(木) 17:47:46.22ID:TYdcXopQ C++を使いこなせない老害がCに固執してると見た。
623デフォルトの名無しさん
2020/03/05(木) 17:48:19.67ID:maJEmc7K このスレに限らず、検索してても初心者が過去の遺物だのオワコンだの死すべしだの
口の悪い厨二病発言するだけで上級者になったつもりのクソブログばっかり上に出るからなぁ
ABIというかマングリングとかバイナリ周りの統一に関しては、C++はいつまで経ってもCの後塵を拝する形になってるんだが、何年かC++やっててもその程度の欠点にも気付かない奴ってのは
要するにそういうことだろ・・・
口の悪い厨二病発言するだけで上級者になったつもりのクソブログばっかり上に出るからなぁ
ABIというかマングリングとかバイナリ周りの統一に関しては、C++はいつまで経ってもCの後塵を拝する形になってるんだが、何年かC++やっててもその程度の欠点にも気付かない奴ってのは
要するにそういうことだろ・・・
624デフォルトの名無しさん
2020/03/05(木) 17:52:51.49ID:TYdcXopQ Cで出来ることはC++でもできる。
C++で出来ることがCには出来ない。
Cは老害。
C++で出来ることがCには出来ない。
Cは老害。
625デフォルトの名無しさん
2020/03/05(木) 17:53:01.97ID:maJEmc7K あんま調べてないけどモジュールも多分ソースコードレベルでのヘッダ依存の解消のためであって
ライブラリファイルみたいな外部に出す方法はまだまだ来ないだろうし
ライブラリファイルみたいな外部に出す方法はまだまだ来ないだろうし
626デフォルトの名無しさん
2020/03/05(木) 18:13:53.71ID:HyVcGvBE627デフォルトの名無しさん
2020/03/05(木) 18:17:40.92ID:HyVcGvBE >>622
このスレで、Cを使うのを朗がい呼ばわりしている人達を見る限り、単にC++に加わった新機能を解説したサイトをネットで学んだだけで古いC++やCを知らないだけに見える。
確かに、Cより優れているC++の部分を使わないのは老害だ。
しかし、C++より優れているCの部分を使わないのは、単にCを知らないだけ。
このスレで、Cを使うのを朗がい呼ばわりしている人達を見る限り、単にC++に加わった新機能を解説したサイトをネットで学んだだけで古いC++やCを知らないだけに見える。
確かに、Cより優れているC++の部分を使わないのは老害だ。
しかし、C++より優れているCの部分を使わないのは、単にCを知らないだけ。
628デフォルトの名無しさん
2020/03/05(木) 18:22:08.41ID:LYrzkUWd629デフォルトの名無しさん
2020/03/05(木) 18:28:00.98ID:VlBePa1i c++より優れているcの機能って言うほど無いだろ
printfとiostreamにしたって好みによるとしか
まあ次の標準に来るから使えるならfmt使っとけ
明らかに上記のどちらよりも優れているから
printfとiostreamにしたって好みによるとしか
まあ次の標準に来るから使えるならfmt使っとけ
明らかに上記のどちらよりも優れているから
630デフォルトの名無しさん
2020/03/05(木) 18:35:08.33ID:LYrzkUWd631デフォルトの名無しさん
2020/03/05(木) 19:01:36.23ID:oXCneOog >>615
インターフェースとか言い出したらWin32APIはPascalやでw
インターフェースとか言い出したらWin32APIはPascalやでw
632デフォルトの名無しさん
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の仕様に行き着く
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【正論】玉木雄一郎「高市さんの答弁は米軍が攻撃を受けた場合を前提としており、撤回するのは難しい」特定野党を完全論破 [519511584]
- タイで中国人観光客が激減でもタイ人は大喜び、タイの人はネトウヨだった [605029151]
- フランス「G7に習近平主席を呼びたい」ドイツ「良い考えだ」 高市さん...? [237216734]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 自閉症が「んなっしょい」と連呼するお🏡
- 【悲報】中国営業に熱心な日本人タレントたち、中国のイベントが続々と中止に… まだ予定中のアイドルとか歌手とかたくさんいるけど [452836546]
