X



C++相談室 part133
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ 1fcf-H1rY)
垢版 |
2017/11/24(金) 16:52:50.43ID:WoNXR2ax0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part132
http://mevius.5ch.net/test/read.cgi/tech/1507561894/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/

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

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
0232デフォルトの名無しさん (ワッチョイ f1c8-wAwf)
垢版 |
2017/12/02(土) 00:35:41.73ID:i2vG1ua/0
最近長えレスが多くて辛えぞえ
0234デフォルトの名無しさん (ワッチョイ a580-o8PC)
垢版 |
2017/12/02(土) 01:17:01.05ID:Ppnhc3/B0
コルーチンをキャンセルとか意味わかんない事言ってるから途中から読んですらない。
0236デフォルトの名無しさん (ワッチョイ 6680-9RvO)
垢版 |
2017/12/02(土) 03:07:38.26ID:UE7qzU9L0
>>226
引数が違うだけで、内部的には、どれも同じだろ。
つまり、ラッパー関数

OS をすべて知っている奴は、いない

だから皆、神の書と呼ばれる、この本を枕にして寝ている。
著者は、man ページの作者。
この本が翻訳されているのは、日本だけ

Linux プログラミング・インタフェース、2012
0238デフォルトの名無しさん (ワッチョイ 6680-9RvO)
垢版 |
2017/12/02(土) 20:34:54.85ID:UE7qzU9L0
Linux 資格の、LPIC 取得者も、半分以上は日本人だろ

日本は、Linux 大国
0240デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
垢版 |
2017/12/02(土) 21:04:09.64ID:TmTI6KJY0
Linuxは日本に入ってきたのが早かったし、最初期に一気に広まった。
日本がLinux王国というのは間違いではない。
しかし、それを生かせなかった。
なんでだろ。
0241デフォルトの名無しさん (ワッチョイ 5d78-ToxZ)
垢版 |
2017/12/02(土) 21:06:05.55ID:IxwO1O770
PC98がMSDOSを採用し続けたせい
0243デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
垢版 |
2017/12/02(土) 21:25:07.65ID:TmTI6KJY0
当時書店でBoWとか売ってたけど、そのせいで遅れたような感じはしなかったけどなあ。
むしろLinuxでX11動かすのに四苦八苦してた頃、すでにコンソールで日本語が使えてたのは、
UNIXの人たちのおかげのような気がする。
0244デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
垢版 |
2017/12/02(土) 21:38:52.02ID:TmTI6KJY0
検索してみるとコンパックショックが1994年なんだな。
DOS/V機自作したのが1993年だからもうちょっと前かと思ってたけど。
正規流通前にショップが輸入して売ってたんだろか。
0249デフォルトの名無しさん (ワッチョイ a580-o8PC)
垢版 |
2017/12/03(日) 01:40:24.23ID:MtUE51Zo0
>>248
そんなに糞だったのか自社製ソフト
0251デフォルトの名無しさん (ワッチョイ 9e9f-GQwd)
垢版 |
2017/12/03(日) 08:56:43.57ID:I8IEjg5G0
>>250
自由にクラスを設計すればいいよ。
デストラクタを仮想クラスを必ず定義しておかなければならないとか、そんな義務はない。
あらかじめ定義しておくと、仕様変更があった時などで、派生クラスで、デストラクタを使いたい時に、基底クラスをいじらずに定義できるだけだよ。
仮に、複数人で、アプリを作ってるなら、基底クラス担当がいたとして、わざわざ基底クラスをいじりますよーとか連絡しないでいいという利点はあるかもな。
もし、基底クラス担当で、他人に基底クラスを触らせたくないなら定義しておいたほうがいい。
基底クラスをいじられて、変なバグとか追加されても困るw
0253デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/03(日) 09:26:11.28ID:hz5Rl7cd0
うん、これは頭悪い発言スレでやればウケてた
0254デフォルトの名無しさん (ワッチョイ a580-o8PC)
垢版 |
2017/12/03(日) 09:31:06.52ID:MtUE51Zo0
>>250
規格は知らんが問題が発生するコンパイラは存在しないと思う。が、デストラクタで何もしないというのはデータメンバーも含まれるからね。
派生クラスにstd::stringのメンバーが居るだけでアウト
そんな事を気にするより素直にvirtual付けるか基底クラスでdeleteされないようにする方が有意義に時間を使えると思うよ。
0255デフォルトの名無しさん (ワッチョイ 8abd-17nN)
垢版 |
2017/12/03(日) 09:49:40.40ID:lnc2VqP30
>>254
>派生クラスにstd::stringのメンバーが居るだけでアウト
それだけでアウトなのではない
DerivedがBaseの派生だとして、実体はDerivedなのにコンパイラからはBaseにしか見えないケースで問題になるだけ
DerivedをDerivedとして宣言したらスコープを抜けたらちゃんとDerivedのデストラは呼ばる

問題なやつの例:
 Derived g_d;
 void foo() {
  Base* p = (Base*)&g_d;
  /*...*/
  delete p; // Base::~Base()は呼ばれるがDerived::~Derived()は呼ばれない
 }
0256デフォルトの名無しさん (ワッチョイ 8abd-17nN)
垢版 |
2017/12/03(日) 09:53:01.97ID:lnc2VqP30
ごめ、一点抜けた
誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース
正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース

なお、(規格でどういう言葉使いをしているかわ知らんが、)
Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない
0257デフォルトの名無しさん (ワッチョイ 8abd-17nN)
垢版 |
2017/12/03(日) 09:53:10.45ID:lnc2VqP30
ごめ、一点抜けた
誤: 実体はDerivedなのにコンパイラからはBaseにしか見えないケース
正: 実体はDerivedなのにコンパイラからはBaseにしか見えない状態で当該オブジェクトが破棄されるケース

なお、(規格でどういう言葉使いをしているかわ知らんが、)
Derivedが多態性をきちんと実装してあるなら、Derivedは「コンパイラからはBaseにしか見えないケース」には該当しない
0258デフォルトの名無しさん (ワッチョイ a580-o8PC)
垢版 |
2017/12/03(日) 09:57:14.66ID:MtUE51Zo0
>>255
だから
「基底クラスでdeleteされないようにする方が」
って言ってんだろ
0259デフォルトの名無しさん (ワッチョイ 8abd-17nN)
垢版 |
2017/12/03(日) 09:58:13.14ID:lnc2VqP30
大事なことなので2回ry

まあ一般論として、>>255の問題なやつがプログラム内に存在しないことの確実で安価で
ウザく無い検出方法というものはこの世に存在しないので、
継承関係を使うならデストラクタを見たらvirtualにするパブロフの犬に徹するべきではある
0260デフォルトの名無しさん (ワッチョイ b5b3-HgL3)
垢版 |
2017/12/03(日) 10:48:30.75ID:YKcJD0pm0
>delete p; // Base::~Base()は呼ばれるがDerived::~Derived()は呼ばれない

~Derived()が呼ばれないけど、
呼ばれたとして何も仕事をしないのであれば、呼ばれなくても不都合ないのでは?
0262デフォルトの名無しさん (スップ Sdea-t0Iq)
垢版 |
2017/12/03(日) 11:06:05.82ID:OF+rgUqYd
メイヤーズが言ってる
ポリモーフィズムを目的とした基底クラスはvirtualデストラクタにする
それ以外はしないってルールでいいだろ
0265デフォルトの名無しさん (スプッッ Sdea-gD61)
垢版 |
2017/12/03(日) 13:39:28.04ID:JZXkgVFzd
>>254
暗黙的なメンバー変数の破棄が呼ばれるべきってのはあるけど、何もアウトなことはないぞ?
0266デフォルトの名無しさん (ワッチョイ a580-o8PC)
垢版 |
2017/12/03(日) 13:42:24.66ID:MtUE51Zo0
>>265
お前質問読んでないだろ
0269デフォルトの名無しさん (オッペケ Srbd-MUmZ)
垢版 |
2017/12/03(日) 16:29:14.83ID:gYv1de+4r
継承関係を使う=vtbl
と考えてしまうような無知な者には理解するのは難しい
他人の作ったものも構わずナマポをdeleteしておいて「virtualにしておけば安全」というのはマッチポンプと言えよう
0272デフォルトの名無しさん (ワッチョイ b5b3-HgL3)
垢版 |
2017/12/03(日) 17:12:44.51ID:YKcJD0pm0
結局のところ
何も仕事をしないデストラクタはあるが、(空のデストラクタかつメンバ変数なし)
基底クラスのデストラクタだけで派生クラスをdeleteすることが未定義だから
基底クラスのデストラクタは仮想にしないとダメという理解でよろしいでしょうか。
0273デフォルトの名無しさん (ワッチョイ ea34-YBdU)
垢版 |
2017/12/03(日) 17:28:04.25ID:ti2y6lW/0
デストラクタは仮想にしておくことにより通常の仮想関数と違って継承元辿って全自動ですべて呼び出されるから基底はやることなくても以後継承で実装を変更することがあるのなら空の{}で括っておいたほうが良いよ
0277デフォルトの名無しさん (ワッチョイ 8abd-17nN)
垢版 |
2017/12/03(日) 19:55:36.14ID:lnc2VqP30
くそー>>254の簡潔すぐる日本語のせいで暗黒の日曜日になってしまったわ、

だいたい質問者の>>250も簡潔すぐる
初心者質問と思ったし、だいたい理解している上で確認の意味で質問しているのならそう書いてホスイ、
0281デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/03(日) 21:05:16.05ID:hz5Rl7cd0
>>278
自殺乙
0283デフォルトの名無しさん (ブーイモ MM81-ZS+9)
垢版 |
2017/12/04(月) 12:38:47.34ID:vRsxBueGM
これまでinlineを関数に適用するとインライン展開されるんじゃなかったでしたっけ?
c++17の説明を読むと翻訳単位で共通のアドレスになるって書いてあるのだけど仕様が変わった?
0292 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/04(月) 18:00:57.88ID:ESsPBxjD0
accelerated c++ をやっている人いませんか?
今やりなおしているけれども、5年ほど前の自分の回答をなくしてしまった…
4章章末練習問題4-6の回答を、よろしければお見せいただけませんか?
この章、EOLine と EOFile を std::cin の eof フラグ 1 個でなんとかしようとしているのが非常にまずいと分かりましたが
逆に教科書掲載のプログラムでうまくいっているのが不思議です…取り組まれた方のコメントをお待ちしています…

普通 getline() をつかうんだろうけれども、なんでこんなに変てこな実装になっているのだろう?
教科書の内容 https://ideone.com/rdtZWG

>>44-45 悪書を薦めてしまいました、ごめんなさい
0293デフォルトの名無しさん (ワッチョイ a580-o8PC)
垢版 |
2017/12/04(月) 19:13:30.50ID:gGPHcFu90
>>289
メソッドチェインしたいだけなら拡張メソッドの方が筋がいいだろ。そっち応援してやれよ
0295 ◆QZaw55cn4c (ワッチョイ 4a60-L6cJ)
垢版 |
2017/12/04(月) 19:43:03.25ID:ESsPBxjD0
>>292
>>44-45
結局のところ、std::stringstream を使うべきだという結論になりました。(std::stringstream は今回初めて知った)
教科書本文(64ページ、項4.2.3、70ページ、項4.5)
https://ideone.com/F761bo

73ページの練習問題4-5の方は
https://ideone.com/H9iE4j

このように >>42 は多大な努力を強いられる教科書ですので、お勧めです、強くなりたい人はどうぞ
私はもう強くなくてもいいから、この本はもういいです…

教科書をお持ちでない人には関係ない話ですみません
0296デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/04(月) 21:39:45.95ID:k2OIwnad0
>>282
0299 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/05(火) 10:37:05.67ID:x6DQdw1l0
>>151
template の話もお願いしていいですか?
型安全を優先するあまりに instantiate(これいい訳がないね) してまで、という思考と void * を許してしまう思考の両方について、比較していただくとうれしいんですけれども
0300 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/05(火) 10:45:00.72ID:x6DQdw1l0
>>168
std::make_shared はあっても unique 版はない、とかなんとか、そこらへんが徹底されていない、とか、確かあったような気が
0301 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/05(火) 10:50:30.93ID:x6DQdw1l0
>>150-152
ファイルのopen/close とか、RAII /デストラクタが Java にもあればなあ、と思っています。
あと、Java の syncronized って、結局、テキトーなダミー変数を mutex 代わりにしちゃう、とかありません?
0303 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/05(火) 10:58:49.04ID:x6DQdw1l0
>>101
>K&Rも「関数ポインタも使えるよ」としか書いて無い。あれはもっと力説されて然るべきだった。

これが本題かな?
いや、関数ポインタってそんなに特筆すべきものだったかな…むしろ setjmp()/longjmp() の方がインパクトが、ってこれはexception として広く採用されていましたっけね
いや、関数ポインタってコールバック(とvtable)は別として、何か使えるネタが他にあるかなって考えてました、今のところ思いつかないな…
0304 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/05(火) 11:06:41.81ID:x6DQdw1l0
>>99
>(instance.method()とstaticMethod(instance)の実行時の違いがほぼ無い、
うーん、Java で、これでもか、これでもか、と this が null でないことをチェックするのを読んだことがあります。
C++ だと(virtual でなければ)普通に this = 0 にして this->method() できちゃうんですが、この this の null チェックって、広く行われているのでしょうか?http://codepad.org/gtEBWFKR
0305 ◆QZaw55cn4c (ワッチョイ 4a60-CnPo)
垢版 |
2017/12/05(火) 11:20:19.80ID:x6DQdw1l0
これでおしまい
try〜catch はいいとして、finally って使いにくい、というか使い方がわからないんですが、finally って意味あるんでしょうか?
0314デフォルトの名無しさん (ワンミングク MM7a-o8PC)
垢版 |
2017/12/05(火) 20:52:26.72ID:sgxJpWORM
>>313
呼び出されなくても泣くなよ
0320デフォルトの名無しさん (ワッチョイ 59e3-HgL3)
垢版 |
2017/12/05(火) 23:55:11.50ID:WoyHGfNJ0
返答を期待しないでただ聞いて文句言ってもらいたんですけど

03以来久し振りにc++いじってます
17だか20の最新仕様も未だにclassでgetter/setter定義しなきゃいけない仕様なんですかね?
C#のpropertyがあれば便利と思うんですけど。今あるか知りませんが

どうなんでしょ?今後の仕様も導入予定なし?

おやすみなさい
0325はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 5e6f-bpph)
垢版 |
2017/12/06(水) 02:05:35.10ID:s33DVBsR0
一応 >>324 を解説しておくと、 this が真のときはもちろん真だし、
this が偽 (ヌル) のときは未定義なのでどういう挙動をしてもかまわないので真と解釈してもええやろという超推論で常に真として扱われる。
0326デフォルトの名無しさん (ワッチョイ b5b3-9GJZ)
垢版 |
2017/12/06(水) 04:07:36.86ID:hjP5HWFz0
++thisってやるとどうなるんだろうねえ。
0327デフォルトの名無しさん (ワッチョイ a66e-hJGX)
垢版 |
2017/12/06(水) 05:07:17.55ID:yhpve1PE0
できないよ
thisは常にconst修飾されている
禿本1stではthisへの代入があったんだけどね
0329デフォルトの名無しさん (スプッッ Sdea-gD61)
垢版 |
2017/12/06(水) 08:02:56.90ID:vAzWmOhld
thisってprvalueじゃないのか?
■ このスレッドは過去ログ倉庫に格納されています

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