X



C++相談室 part142
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2019/04/01(月) 22:17:05.84ID:wmfpIKt/
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

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

前スレ
C++相談室 part137 (正しくはpart138)
http://mevius.5ch.net/test/read.cgi/tech/1535353320/
C++相談室 part139
https://mevius.5ch.net/test/read.cgi/tech/1538755188/
C++相談室 part140
https://mevius.5ch.net/test/read.cgi/tech/1547326582/
C++相談室 part141
https://mevius.5ch.net/test/read.cgi/tech/1550772463/

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

■長いソースを貼るときはここへ。■
 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
0953デフォルトの名無しさん
垢版 |
2019/06/12(水) 23:51:54.31ID:EuvWtF/E
元の内容について所有権を失っているだけで普通は使える様になっている
スマポならnull相当
vectorみたいなのならemptyもしくは何らかのごみが入っているのでclearか新たに代入すればおk
0954デフォルトの名無しさん
垢版 |
2019/06/13(木) 00:01:02.92ID:GxcaYm6A
>>953
>元の内容について所有権を失っているだけで普通は使える様になっている
moveしたあとの変数について述べているのなら完璧な間違いだ
藻前のプログラムはバグだらけだな
0955デフォルトの名無しさん
垢版 |
2019/06/13(木) 00:16:54.69ID:VunnpS2y
合ってるだろ
ムーブ後のオブジェクトは内容は未規定だけど有効な状態だぞ、少なくとも組み込み型と標準ライブラリはな
褒められたプログラミングスタイルかはともかく、再利用すること自体が即間違いとは言えない
0958デフォルトの名無しさん
垢版 |
2019/06/13(木) 01:25:50.43ID:bj2tv0KH
少なくとも標準ライブラリでこれが出来ないと、メンバ変数の内容一つmoveしただけで親のオブジェクトまで使えなくなる。
メンバ変数再利用する術が無いってことだからね
0959デフォルトの名無しさん
垢版 |
2019/06/13(木) 01:41:54.12ID:/Ra8Vlso
>>957
未初期化の変数をコンパイル時に検出できるんだからmoveした後かどうかも判定できるはずでしょ
0961デフォルトの名無しさん
垢版 |
2019/06/13(木) 03:03:13.46ID:bj2tv0KH
2分木で子のスマポ所有しているような場合、付け替えとかで所有権の移動するときshared_ptrならコピーでokだけど、unique_ptrみたいなのだとmoveする事になるが、メンバ変数で持っていた子の内容をmoveしたあとその変数が再利用可能じゃないと困るだろ
0962デフォルトの名無しさん
垢版 |
2019/06/13(木) 03:21:55.87ID:/TtN03F/
>>961
c++11で導入されたmoveはいわゆる所有権の移動とは違うもなので、その場合はmoveは使えないと思う。
0963デフォルトの名無しさん
垢版 |
2019/06/13(木) 03:33:01.74ID:fPdkPYzy
>>962
unique_ptrのmoveが所有権の移動じゃないと言うなら一体何なら「所有権の移動」だと言うのか。
0965デフォルトの名無しさん
垢版 |
2019/06/13(木) 04:35:02.91ID:qBl/BLKs
ループの中で int a なる整数を使うとき、ループ内で毎回宣言するのとループの外で宣言して使い回すのどっちが結局速いの?
0969デフォルトの名無しさん
垢版 |
2019/06/13(木) 13:18:06.43ID:XHz4etUG
>>967
逆じゃないか?
インスタンスの生成にコストがかかるときはトレードオフだが、そうでないなら可能な限りスコープを狭くなるように変数を宣言した方が良いと思う
0972デフォルトの名無しさん
垢版 |
2019/06/13(木) 15:28:06.57ID:PncfQdvG
cppcheckやVisual Studioのような静的コード解析にかけると「スコープを小さくできるよ?」みたいなアドバイスが出るよね。
実際のところ、どうなんだろうね。typoしにくくなったりスタックサイズが小さくなる利点があるとは思うけど。
0974デフォルトの名無しさん
垢版 |
2019/06/13(木) 16:22:08.63ID:jHLKLHUC
ちょうど今朝cppcheckかけたら
style: The scope of the variable 'c' can be reduced.
「変数 c のスコープを縮小できますよ」って出たわ。
つまり「スコープを狭くできるなら狭くすべき」っていう方針を、
(少なくともcppcheckを作ってる人は)採用してるんだろうな。

どっちが速いかについては、ちょっと最適化オプションつければ
結局同じマシン語になっちゃうんじゃないかしら。
0977デフォルトの名無しさん
垢版 |
2019/06/13(木) 17:32:58.81ID:fC2jn4Im
オブジェクト指向って実はprivate変数のスコープをかなり広く取ってるセミグローバル指向だと思う
0985デフォルトの名無しさん
垢版 |
2019/06/15(土) 19:37:22.36ID:y49ayDRp
グローバル変数と言っているのはオブジェクト指向スレを荒らしてるバカだろ
0986デフォルトの名無しさん
垢版 |
2019/06/16(日) 15:07:40.82ID:TXhOXCMI
任意の型に対応する整数を返すメタ関数ってC++11の標準であったりします?

intなら1
stringなら2
みたいな
上記の技法をなんと呼ぶかわからないので検索ワードも思い付かず…
0989デフォルトの名無しさん
垢版 |
2019/06/16(日) 19:19:35.33ID:PFinGY+5
質問ですがC++のクラスのメソッドは、大別すると、
コンストラクタとデストラクタとsetterとgetterと何になるの?
0991デフォルトの名無しさん
垢版 |
2019/06/16(日) 19:31:47.13ID:Va3vueK+
setterとgetterって何?
Javaじゃあるまいしそんなの言語要素としては用意してないよ
0992デフォルトの名無しさん
垢版 |
2019/06/16(日) 21:57:17.90ID:PFinGY+5
>>991
setterとgetterが何かについてはググった方が良い

Javaは詳しくは知らないが、ググった限りにおいて
Javaでもsetter/getterを定義する専用の言語要素など用意されていない印象
0993デフォルトの名無しさん
垢版 |
2019/06/16(日) 22:03:52.19ID:PFinGY+5
で、C++/Javaどっちも
 { setter } ∪ { getter } ⊂ { メソッド }
であることは明らかだが、では
 Q1. { メソッド } - ( { setter } ∪ { getter } )には何か専用の名前は無いのか?、
というのが>>909の質問の主旨。

ついでに言うと
 Q2. { setter } や{ getter }というのは本当に確定した集合なのか?
と、
 Q3. 「操作」と言ったときそれは{ メソッド }を指すのか { メソッド } - ( { setter } ∪ { getter } ) を指すのかどっちなんじゃ、
とかも知りたい
0995デフォルトの名無しさん
垢版 |
2019/06/16(日) 22:54:20.07ID:PFinGY+5
>>994
シグナルとスロットというのはGUI操作を処理する目的のブツなので、
実行時の時間コストがゼロコストに近いことを気体されているハズ、
よって { メソッド } - ( { setter } ∪ { getter } ) の全て(この中には実行時の時間コストが青天井のブツも含まれる)を
包含しはしないのではないか、

まあここまで書いてオモタが、 { setter } ∪ { getter } こそ実行時時間コスト0を期待されるから、
setterやgetterは次の定義で良いのではないかという気がしてきた…

- 属性を取得する目的の操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがgetter

- 属性を変更する目的の操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがsetter
0996デフォルトの名無しさん
垢版 |
2019/06/16(日) 22:56:35.57ID:PFinGY+5
後ろ2行訂正orz、
正:
- 属性を取得する目的で設けられた操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがgetter

- 属性を変更する目的で設けられた操作であり、かつ実行時時間コスト≒0の実装が今現在も保たれているのがsetter
0997デフォルトの名無しさん
垢版 |
2019/06/16(日) 23:24:38.97ID:PFinGY+5
補足すると、「属性を取得する目的」や「属性を変更する目的」というのは、
インターフェースをクラスの主要な機能とは独立に変更できることを暗に言っている

例えばクラスFooのsetBar()が真にsetterならば、
属性をsetterでセットするのをやめて(Foo::setBar()を廃止して)ファイルから
直接読み込むメソッドFoo::readFromFile()に置き換えても、
クラスの主要な機能Foo::mainFunc()は変更せずに済むハズ

getterについても同様
1000デフォルトの名無しさん
垢版 |
2019/06/17(月) 00:01:28.14ID:7HzfXopw
ずれてるのを承知で書くけど、直接読み込むメソッドってやつも含め setter なんてない方がいいよ
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 76日 1時間 44分 23秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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