※前スレ
C++相談室 part153
https://mevius.5ch.net/test/read.cgi/tech/1602339500/
テンプレここまで
探検
C++相談室 part154
■ このスレッドは過去ログ倉庫に格納されています
2021/01/08(金) 17:54:00.55ID:0DW9z0rL
748デフォルトの名無しさん
2021/02/17(水) 23:46:57.44ID:ZhVk2C4b 普通に言葉通り任意の2つの元を比較できるということなのでは…
木構造で「親は子より大きい」という順序を定義しただけ
(全順序集合(例えば整数)で全ノードをラベル付けしてしまうというチート手段に訴えことなく、
文字通り「if (aはbの親) { a > b; }」という規則と(a, b)の反射律、推移律を導入しただけ
では兄弟間の大小が定まらない、
みたいな
木構造で「親は子より大きい」という順序を定義しただけ
(全順序集合(例えば整数)で全ノードをラベル付けしてしまうというチート手段に訴えことなく、
文字通り「if (aはbの親) { a > b; }」という規則と(a, b)の反射律、推移律を導入しただけ
では兄弟間の大小が定まらない、
みたいな
749デフォルトの名無しさん
2021/02/17(水) 23:47:32.54ID:ZhVk2C4b のは半順序で、
整数みたいなやつが全順序
整数みたいなやつが全順序
750デフォルトの名無しさん
2021/02/17(水) 23:59:39.55ID:ZhVk2C4b なお{ 全順序集合 }⊂{ 半順序集合 }なのは確定的に明らかなので、
反射律・推移律だけしか要請されていなかったらそれは全順序集合の集合を含む半順序集合の集合の意味となりぬ
つまり全順序集合の集合と半順序集合の集合が区別できん
両社を区別したい議論のときは比較可能性の有無を宣明せねばならんぬ、
反射律・推移律だけしか要請されていなかったらそれは全順序集合の集合を含む半順序集合の集合の意味となりぬ
つまり全順序集合の集合と半順序集合の集合が区別できん
両社を区別したい議論のときは比較可能性の有無を宣明せねばならんぬ、
751デフォルトの名無しさん
2021/02/18(木) 00:34:07.44ID:48a8FzyN a≦b または b≦aが成り立つ時、比較可能
弱順序ってしらなかったけど、半順序とは違うようだ
「半順序?弱順序?二項関係・順序関係まとめ」って記事
弱順序ってしらなかったけど、半順序とは違うようだ
「半順序?弱順序?二項関係・順序関係まとめ」って記事
752デフォルトの名無しさん
2021/02/18(木) 03:35:31.61ID:sRdwF113 束論やってるけど弱順序とか初めて聞いた…
マ界用語?
マ界用語?
754デフォルトの名無しさん
2021/02/18(木) 10:08:01.17ID:48a8FzyN 弱順序は、半順序よりは制限強いが全順序より弱いもので、
ある種のソートアルゴリズムでは全順序よりは制限緩められるけど
半順序までは緩められない、ってのがあるみたいね
ある種のソートアルゴリズムでは全順序よりは制限緩められるけど
半順序までは緩められない、ってのがあるみたいね
755デフォルトの名無しさん
2021/02/18(木) 13:16:30.49ID:9Yl3mCZH >>752
束って何で勉強すればいいん?
束って何で勉強すればいいん?
756デフォルトの名無しさん
2021/02/18(木) 14:43:05.98ID:48a8FzyN アルゴリズムとの関連はちょっとわからんけど
数学としての束論って単独の本は少なくて、代数学の本に載ってるんじゃないかな
もしくは順序集合の話として集合論の本
数学としての束論って単独の本は少なくて、代数学の本に載ってるんじゃないかな
もしくは順序集合の話として集合論の本
>>748
>普通に言葉通り任意の2つの元を比較できるということなのでは…
いや、それは全順序ですよ
・擬順序
・順序
これらの演算子を≦としたとき、かならずしも任意の二元 a, b について a ≦ b の真偽が定まらなくてもいいと思います
擬順序に対して「a ≦ b かつ b ≦ a ならば a = b」という縛りが追加されるのが順序、
順序に対して、任意の二元 a, b について「a ≦ b」または「b ≦ a」のどちらかである、という縛りが要請されるのが全順序
だったかと
>普通に言葉通り任意の2つの元を比較できるということなのでは…
いや、それは全順序ですよ
・擬順序
・順序
これらの演算子を≦としたとき、かならずしも任意の二元 a, b について a ≦ b の真偽が定まらなくてもいいと思います
擬順序に対して「a ≦ b かつ b ≦ a ならば a = b」という縛りが追加されるのが順序、
順序に対して、任意の二元 a, b について「a ≦ b」または「b ≦ a」のどちらかである、という縛りが要請されるのが全順序
だったかと
758デフォルトの名無しさん
2021/02/19(金) 20:38:08.11ID:mpGE+xsF wikipediaの「推移関係」の項目より
半順序 - 反対称的な擬順序
擬順序 - 推移的であると同時に反射的
全擬順序 - 完全的な擬順序
同値関係 - 対称的な擬順序
厳密弱順序 - 強半順序関係で等価関係での比較が不可能な場合
全順序 - 推移的で反対称的な完全関係
全順序、半順序くらいしか知らんかった
半順序 - 反対称的な擬順序
擬順序 - 推移的であると同時に反射的
全擬順序 - 完全的な擬順序
同値関係 - 対称的な擬順序
厳密弱順序 - 強半順序関係で等価関係での比較が不可能な場合
全順序 - 推移的で反対称的な完全関係
全順序、半順序くらいしか知らんかった
759デフォルトの名無しさん
2021/02/19(金) 20:51:11.65ID:gWMDVcMR OOPの本だとサブクラス関係は前順序って書いてるよな?擬順序ともいうのか
推移的、A→B∧B→C |- A→C 、サブクラスのサブクラスはサブクラス
かつ反射的、AはAのサブクラス
推移的、A→B∧B→C |- A→C 、サブクラスのサブクラスはサブクラス
かつ反射的、AはAのサブクラス
760デフォルトの名無しさん
2021/02/19(金) 20:55:11.79ID:fAhRarpN >>760
一番弱い順序、推移的かつ反射的であるのみの順序関係は、実は任意の二項間においてかならずしも順序関係の真偽が定まらなくてもいいのですよ
すべての二項間で順序の真偽が定まるのは、順序の中でも一番強いものである全順序で初めて導入される、と私は解釈しています
一番弱い順序、推移的かつ反射的であるのみの順序関係は、実は任意の二項間においてかならずしも順序関係の真偽が定まらなくてもいいのですよ
すべての二項間で順序の真偽が定まるのは、順序の中でも一番強いものである全順序で初めて導入される、と私は解釈しています
762デフォルトの名無しさん
2021/02/19(金) 21:44:53.04ID:gWMDVcMR ブール代数 型システムで検索しても出てこないけど>>523
可補分配束の定義見てると確かにそんな気はしてくる
インスタンス関係かサブクラス関係なのか?どっちでも成り立ちそうだけど、取り敢えず静的チェックをパスすることを考える
要素が無いと言う意味でCのvoidを冪集合ブール代数の最小元、空集合とみなす
void *は何でも指せるという意味で最大元
まともな型システムなら(少なくとも)上記の擬順序以上は要求る
演算は多重継承とvirtual 定義が∨/∧に対応?クラス図書いてみたら成り立ちそうに思える
型チェック通らない全ての型を考えられるし、それが¬
型述語で定義してればそのまま!演算子になる
可補分配束の定義見てると確かにそんな気はしてくる
インスタンス関係かサブクラス関係なのか?どっちでも成り立ちそうだけど、取り敢えず静的チェックをパスすることを考える
要素が無いと言う意味でCのvoidを冪集合ブール代数の最小元、空集合とみなす
void *は何でも指せるという意味で最大元
まともな型システムなら(少なくとも)上記の擬順序以上は要求る
演算は多重継承とvirtual 定義が∨/∧に対応?クラス図書いてみたら成り立ちそうに思える
型チェック通らない全ての型を考えられるし、それが¬
型述語で定義してればそのまま!演算子になる
763デフォルトの名無しさん
2021/02/19(金) 21:55:14.25ID:gWMDVcMR 確証が持てなくてもどかしい…数学できる人ツッコミ待ち
とりあえずダイヤモンド継承を許さない言語だと、常に∧/∨は定義されないからブール代数にはならない事には気付いた
とりあえずダイヤモンド継承を許さない言語だと、常に∧/∨は定義されないからブール代数にはならない事には気付いた
764デフォルトの名無しさん
2021/02/19(金) 21:55:34.53ID:hHLb88jw ググってる時点で、というかそのことを隠しもしないニワカ
765デフォルトの名無しさん
2021/02/19(金) 21:56:36.22ID:gWMDVcMR >>764
隠して5chなんかで偉ぶってどうすんのさ
隠して5chなんかで偉ぶってどうすんのさ
766デフォルトの名無しさん
2021/02/19(金) 22:01:35.27ID:aORwmd7L 質問ですがムーブコンストラクタを有する基底クラスの
派生クラスでムーブコンストラクタを
派生クラスがムーブコンストラクトされる際に基底クラスにアクセスしようとする場合であっても
安全に書く方法って何かあるんでしたっけ
派生クラスでムーブコンストラクタを
派生クラスがムーブコンストラクトされる際に基底クラスにアクセスしようとする場合であっても
安全に書く方法って何かあるんでしたっけ
767デフォルトの名無しさん
2021/02/19(金) 22:03:03.40ID:6z9jMlRH 作ったクラスをmapにいれるときoperator<を書かなきゃいけないのがめんどい
768デフォルトの名無しさん
2021/02/19(金) 22:08:24.37ID:aORwmd7L あとムーブコンストラクタを有するクラスを
詳細を隠ぺいする目的でインターフェースを設けたとき
インターフェース経由でムーブコンストラクトする方法って何かあるんでしたっけ
アブストラクトファクトリイーを作るしか無い?
詳細を隠ぺいする目的でインターフェースを設けたとき
インターフェース経由でムーブコンストラクトする方法って何かあるんでしたっけ
アブストラクトファクトリイーを作るしか無い?
769デフォルトの名無しさん
2021/02/19(金) 22:11:39.72ID:aORwmd7L この場合アブストラクトファクトリイーといっても、元のクラスFooに対して
IFoo IFoo::move() { ... } が定義してあって
IFoo x = (適当な生成手段)
ののち、
IFoo y = x.move()
でxが破壊されるやつ!
IFoo IFoo::move() { ... } が定義してあって
IFoo x = (適当な生成手段)
ののち、
IFoo y = x.move()
でxが破壊されるやつ!
770デフォルトの名無しさん
2021/02/19(金) 22:36:29.47ID:F7SsNRLa それインターフェースとして使えてないよ
771デフォルトの名無しさん
2021/02/20(土) 00:40:16.16ID:iK8Sr3o/ 領域が連続しているコンテナなら何でも良いんですが、たとえば array<T> a を vector< vector<T> > b に n 要素分コピーしたいときって
memcpy(b.data(), a.data(), n*sezeof(T))
で良いんですかね?
UNIXコマンドと順番が違ったりして間違えそうなのですが、他に良いやり方ありますか
memcpy(b.data(), a.data(), n*sezeof(T))
で良いんですかね?
UNIXコマンドと順番が違ったりして間違えそうなのですが、他に良いやり方ありますか
772デフォルトの名無しさん
2021/02/20(土) 01:38:00.62ID:YJV0xwOV >>771
ド素人かよ
ド素人かよ
773デフォルトの名無しさん
2021/02/20(土) 01:42:23.87ID:upzAgg50 >>771
領域確保されてるならたぶんそれが最速だけど、普通はstd::copyかな
領域確保されてるならたぶんそれが最速だけど、普通はstd::copyかな
774デフォルトの名無しさん
2021/02/20(土) 08:11:48.90ID:BRyl48dG775デフォルトの名無しさん
2021/02/20(土) 11:17:36.76ID:ZF+WEG2v 半順序とかいう訳が悪い
英語のpartial orderの方が分かりやすい
英語のpartial orderの方が分かりやすい
777デフォルトの名無しさん
2021/02/20(土) 11:30:33.89ID:ec7b4JGn あとは裁判で争うしかないでしょうね。
我々には判決が出せませんから。
我々には判決が出せませんから。
778はちみつ餃子 ◆8X2XSCHEME
2021/02/20(土) 11:52:10.16ID:N5IkYQZo >>771
前提条件として
・ T の型が trivially copyable である
・ vector の大きさが必要な大きさ分に出来ている
ならそれでもいいよ。
でも、 C の関数を C++ でも使えるのはほとんどが互換性のためでしかなく、
作法的にはあまり使わないに越したことは無いって感じ。
前提条件として
・ T の型が trivially copyable である
・ vector の大きさが必要な大きさ分に出来ている
ならそれでもいいよ。
でも、 C の関数を C++ でも使えるのはほとんどが互換性のためでしかなく、
作法的にはあまり使わないに越したことは無いって感じ。
779はちみつ餃子 ◆8X2XSCHEME
2021/02/20(土) 11:56:56.24ID:N5IkYQZo780デフォルトの名無しさん
2021/02/20(土) 12:51:28.34ID:K0wy5MAI781デフォルトの名無しさん
2021/02/20(土) 14:23:36.69ID:XZPJJfWU782デフォルトの名無しさん
2021/02/20(土) 14:39:27.43ID:ZF+WEG2v vectorのvectorの中身はサイズ値とバッファポインタが連続で並んでるだろうな
783デフォルトの名無しさん
2021/02/20(土) 14:57:30.99ID:upzAgg50784はちみつ餃子 ◆8X2XSCHEME
2021/02/20(土) 15:27:01.55ID:N5IkYQZo785デフォルトの名無しさん
2021/02/20(土) 16:22:37.93ID:UDAFNKrx ほらCと同じ基本の部分を教えずにいきなりSTLとか勧めるからこういう初心者が出てくる・・
786デフォルトの名無しさん
2021/02/20(土) 17:06:29.35ID:1TZxH4Mg ある程度出てきても問題ないだろ。ちゃんとドキュメント読んで理解してくれる人も多いんだろうし、
「Cと同じ基本の部分」を教えたところでちゃんと理解してくれない人も居るだろうし。
「Cと同じ基本の部分」を教えたところでちゃんと理解してくれない人も居るだろうし。
787デフォルトの名無しさん
2021/02/20(土) 17:09:29.42ID:UDAFNKrx ちょっと何言ってるかわかんない
788デフォルトの名無しさん
2021/02/20(土) 17:54:39.09ID:ZF+WEG2v 相談室に初心者が来て何の問題があるのか
790蟻人間 ◆T6xkBnTXz7B0
2021/02/20(土) 19:27:14.79ID:VmESNyRi >>771
> array<T> a を vector< vector<T> > b に n 要素分コピーしたいときって
> memcpy(b.data(), a.data(), n*sezeof(T))
> で良いんですかね?
待てよ、b.data()って&b[0]だから型はvector<T>*だろ。書き換えたらいけないアドレスじゃん。
ダメです。
> array<T> a を vector< vector<T> > b に n 要素分コピーしたいときって
> memcpy(b.data(), a.data(), n*sezeof(T))
> で良いんですかね?
待てよ、b.data()って&b[0]だから型はvector<T>*だろ。書き換えたらいけないアドレスじゃん。
ダメです。
791蟻人間 ◆T6xkBnTXz7B0
2021/02/20(土) 19:49:01.06ID:HfYkFRCd C++のvectorでは、演算子[ ]がオーバーロードされてるから、C言語の常識が通用しないんだよ。
memcpyは危険な関数だから簡単にメモリー破壊できるんだよね。
std::vector v;
int a = 5;
memcpy(&v, &a, sizeof(a)); // vのメモリー破壊。
memcpyは危険な関数だから簡単にメモリー破壊できるんだよね。
std::vector v;
int a = 5;
memcpy(&v, &a, sizeof(a)); // vのメモリー破壊。
792デフォルトの名無しさん
2021/02/20(土) 20:38:26.44ID:PUIofNKd >>791
流石にそれは質問者のレベルにも達してないんで問題外
流石にそれは質問者のレベルにも達してないんで問題外
793デフォルトの名無しさん
2021/02/20(土) 20:44:29.23ID:Rkd/h2tQ 別にここで何が正しいかを結論できなくてもいいのだが
>>776
そう言うなら「推移的かつ反射的であるのみの順序関係」が「弱順序」と書いてある本を
教えてくれる?
手元になかったらうろ覚えでもいいけど。〇〇の××先生がそう言ってたみたいのでもいいw
知識として一応確認しておきたいかなと。
>>776
そう言うなら「推移的かつ反射的であるのみの順序関係」が「弱順序」と書いてある本を
教えてくれる?
手元になかったらうろ覚えでもいいけど。〇〇の××先生がそう言ってたみたいのでもいいw
知識として一応確認しておきたいかなと。
795デフォルトの名無しさん
2021/02/20(土) 21:44:52.70ID:K0wy5MAI std::vector v(sizeof(int));
int a = 5;
memcpy(&(v[0]), &a, sizeof(a)); // おk
int a = 5;
memcpy(&(v[0]), &a, sizeof(a)); // おk
796デフォルトの名無しさん
2021/02/20(土) 21:47:14.25ID:K0wy5MAI つかこうかorz
std::vector<int> v((size_t)1);
const int a = 5;
memcpy_s(&(v[0]), sizeof(v[0]) * v.size(), &a, sizeof(a));
std::vector<int> v((size_t)1);
const int a = 5;
memcpy_s(&(v[0]), sizeof(v[0]) * v.size(), &a, sizeof(a));
797蟻人間 ◆T6xkBnTXz7B0
2021/02/20(土) 21:58:40.54ID:HfYkFRCd この場合は素直にループを書くか、それとも格好良くstd::copy使うのが楽かな。
798デフォルトの名無しさん
2021/02/21(日) 01:26:13.27ID:G4m9GHw4 for文回したら死ぬ病気にでもかかってんのか?
799デフォルトの名無しさん
2021/02/21(日) 01:29:00.28ID:oO8KGr2m 条件を満たすならmemcpyのほうが圧倒的に早いからな
800はちみつ餃子 ◆8X2XSCHEME
2021/02/21(日) 01:32:42.66ID:jd0qgVVy それほど速くならない・速くなくていい場合のほうが圧倒的に多いってのもあるけどな。
801デフォルトの名無しさん
2021/02/21(日) 03:13:29.79ID:ZrTKdY4P そもそもそんなクソみたいなコードはふつう書かない
802770
2021/02/21(日) 03:54:49.57ID:HYHVDYIS >>780
IFooっていう名前からしてインターフェースってJava/C#的な意味でのそれだと思ってたけど
それならポインタなり参照なりじゃないと機能してないよっていうかコンパイルエラーでしょってツッコミ
IFooっていう名前からしてインターフェースってJava/C#的な意味でのそれだと思ってたけど
それならポインタなり参照なりじゃないと機能してないよっていうかコンパイルエラーでしょってツッコミ
803デフォルトの名無しさん
2021/02/21(日) 03:58:42.63ID:0HHdBuLy メモリコピーを最適化する前に、他にすべきこと沢山あるだろ的な答えになるよな、確かに。
PG界の真理情報だわ。
PG界の真理情報だわ。
804デフォルトの名無しさん
2021/02/21(日) 05:11:43.88ID:L28MHLBD valarrayでxorとか
805デフォルトの名無しさん
2021/02/21(日) 07:43:27.01ID:F92hI73d806デフォルトの名無しさん
2021/02/21(日) 07:51:19.71ID:F92hI73d じゃなかったorz
Foo::Foo(const Foo& src) { (srcを変更して新しいインスタンスを初期化) }
はconst_cast<Foo>的な危険手段でないとやれないが
Foo::Foo(Foo& src) { (srcを変更して新しいインスタンスを初期化) }
とするとなんかコンパイラが警告を出すから
Foo::Foo(Foo&& src) { (srcを変更して新しいインスタンスを初期化) }
にせざるおえないという、
Foo::Foo(const Foo& src) { (srcを変更して新しいインスタンスを初期化) }
はconst_cast<Foo>的な危険手段でないとやれないが
Foo::Foo(Foo& src) { (srcを変更して新しいインスタンスを初期化) }
とするとなんかコンパイラが警告を出すから
Foo::Foo(Foo&& src) { (srcを変更して新しいインスタンスを初期化) }
にせざるおえないという、
807デフォルトの名無しさん
2021/02/21(日) 13:21:42.30ID:Dqlg3tSu 関数と関数オブジェクトってどう使い分けるの?
808デフォルトの名無しさん
2021/02/21(日) 13:30:17.46ID:YxY+Ievf こういう馬鹿にはちゃんとベンチマークとれって言ってやるのが正しい行い。
809デフォルトの名無しさん
2021/02/21(日) 14:32:16.15ID:HYHVDYIS >>805
そんなこと聞いてるんじゃなくて
提示されたコード片じゃどう考えても動かないから何したいか分からんのよ
https://wandbox.org/permalink/ancQey3IkQKyWsu1
こっから始めてどこをどうしたいか教えてくれ
そんなこと聞いてるんじゃなくて
提示されたコード片じゃどう考えても動かないから何したいか分からんのよ
https://wandbox.org/permalink/ancQey3IkQKyWsu1
こっから始めてどこをどうしたいか教えてくれ
810デフォルトの名無しさん
2021/02/21(日) 14:47:26.80ID:9WgNecVw 404 Not Found
811デフォルトの名無しさん
2021/02/21(日) 15:33:36.83ID:HYHVDYIS812デフォルトの名無しさん
2021/02/21(日) 16:21:41.69ID:u2qGdVDT 過疎ってるし、初心者どころかJavaの質問でもOKでは?
>>807
この質問に対して回答をつける用意がありますが、しばしお待ちを
この質問に対して回答をつける用意がありますが、しばしお待ちを
>>807,813
昔のコードを今読んでみたんですが、実のところ関数オブジェクトにする必要性があったかどうか、今の価値観のもとでは首をかしげています
数値計算のプログラムって、無自覚にバンバン書いてると例えばルンゲ食ったをやっているとこと他とかが混ざり合って収拾がつかなくなる、と思って関数オブジェクトにアイソレートした記憶があって、それを思い出して読んでみたんですけれども、今読んでみても、なんだか、ねえ‥‥
https://mevius.5ch.net/test/read.cgi/tech/1434079972/72
昔のコードを今読んでみたんですが、実のところ関数オブジェクトにする必要性があったかどうか、今の価値観のもとでは首をかしげています
数値計算のプログラムって、無自覚にバンバン書いてると例えばルンゲ食ったをやっているとこと他とかが混ざり合って収拾がつかなくなる、と思って関数オブジェクトにアイソレートした記憶があって、それを思い出して読んでみたんですけれども、今読んでみても、なんだか、ねえ‥‥
https://mevius.5ch.net/test/read.cgi/tech/1434079972/72
815デフォルトの名無しさん
2021/02/21(日) 20:07:12.76ID:F92hI73d >>809
Fooはこんなやつ、
https://ideone.com/mPPH8I
IFooは、C++ではよく考えたらIFooのオブジェクトを直接生成できないので(>>802の仰せの通り
std::shared_ptr<IFoo>とかで生成することを考えたのだがエラーになるorz
(上のリンク先のコードでコメントアウトしてあるgenerate_IFoo()
思いのほか闇が深かった\(^o^)/
std::shared_ptr<IFoo>が生成できた暁には、
std::shared_ptr<IFoo> pがリソースの所有権を握ったFooを保持しているとき、
std::shared_ptr<IFoo> qというのがいるとして、
*q = *p
で所有権を*pから*qに渡したり、
return *p
で呼び出し元が所有権を有するFooを受け取れるようにしたいワケ
Fooはこんなやつ、
https://ideone.com/mPPH8I
IFooは、C++ではよく考えたらIFooのオブジェクトを直接生成できないので(>>802の仰せの通り
std::shared_ptr<IFoo>とかで生成することを考えたのだがエラーになるorz
(上のリンク先のコードでコメントアウトしてあるgenerate_IFoo()
思いのほか闇が深かった\(^o^)/
std::shared_ptr<IFoo>が生成できた暁には、
std::shared_ptr<IFoo> pがリソースの所有権を握ったFooを保持しているとき、
std::shared_ptr<IFoo> qというのがいるとして、
*q = *p
で所有権を*pから*qに渡したり、
return *p
で呼び出し元が所有権を有するFooを受け取れるようにしたいワケ
816デフォルトの名無しさん
2021/02/21(日) 20:09:12.28ID:F92hI73d ちなみにWandboxでソースコードをフォークする方法は
初心者なので
わかり
ません
初心者なので
わかり
ません
817デフォルトの名無しさん
2021/02/21(日) 20:14:47.49ID:LxNhpnKU generate_Foo()がコケてるのはnewのところでFooのコピコンがないだけだろ
コピコン書くか、ムーコン使いたいならnew Foo(std::move(foo3))にすればいいだけ
後半も意味不明
*q = *pってそれスライシングだぞ
コピコン書くか、ムーコン使いたいならnew Foo(std::move(foo3))にすればいいだけ
後半も意味不明
*q = *pってそれスライシングだぞ
818デフォルトの名無しさん
2021/02/21(日) 20:23:47.49ID:F92hI73d819デフォルトの名無しさん
2021/02/21(日) 20:26:48.03ID:F92hI73d ちょっと補足すると、IFooには現状代入手段が無いから、
*q = *pはそもそもコンパイルが通ることはなく、目的とする機能を形而上的に表す仮想コード
のつもり
*q = *pはそもそもコンパイルが通ることはなく、目的とする機能を形而上的に表す仮想コード
のつもり
820デフォルトの名無しさん
2021/02/21(日) 21:03:58.63ID:+My/Unlg >>814
処理を意味でまとめるようなことなら積極的にやるべきだと思いますが、それは関数オブジェクトじゃなくて関数でもできますよね?
処理を意味でまとめるようなことなら積極的にやるべきだと思いますが、それは関数オブジェクトじゃなくて関数でもできますよね?
821デフォルトの名無しさん
2021/02/21(日) 21:05:03.53ID:HYHVDYIS823デフォルトの名無しさん
2021/02/21(日) 22:29:56.45ID:LxNhpnKU >>818
shared_ptrは関係ないから普通のポインタで話するぞ(同じ事だ)
IFoo* p = new Foo();
IFoo* q = new Foo();
というのがあったとして*q = *p;ってのは何だと思う?
pとqはIFoo*型だ
だからもちろん*pと*qというのはIFoo型だ
すなわち*q = *p;というのはIFoo::operator=(const Foo&)の呼び出しだ
operator=()はvirtualにできないから、pとqが本当はFoo型オブジェクトを指してることなんか知りもしないし考慮もしない
よってIFoo部分の代入だけが行われて、要はqのIFoo部分だけが首チョンパされてpのIFoo部分が代入される
これをスライシングという
shared_ptrは関係ないから普通のポインタで話するぞ(同じ事だ)
IFoo* p = new Foo();
IFoo* q = new Foo();
というのがあったとして*q = *p;ってのは何だと思う?
pとqはIFoo*型だ
だからもちろん*pと*qというのはIFoo型だ
すなわち*q = *p;というのはIFoo::operator=(const Foo&)の呼び出しだ
operator=()はvirtualにできないから、pとqが本当はFoo型オブジェクトを指してることなんか知りもしないし考慮もしない
よってIFoo部分の代入だけが行われて、要はqのIFoo部分だけが首チョンパされてpのIFoo部分が代入される
これをスライシングという
824はちみつ餃子 ◆8X2XSCHEME
2021/02/21(日) 23:00:12.09ID:jd0qgVVy >>822
関数オブジェクトに「関数」とついているのは関数と同じ記法で呼び出せるということに意味があって、インターフェイスの問題。
状態を持った関数 (関数オブジェクト) も状態を持たない関数 (関数ポインタ) も統一的に扱えたらうれしいねって話なので、
状態を持たず、高階関数に渡すこともない場合は関数オブジェクトにする意味はないな。
(普通の関数も static 変数への参照を持ってたりする場合もあるので必ずしも状態を持たないわけではないけど。)
関数オブジェクトに「関数」とついているのは関数と同じ記法で呼び出せるということに意味があって、インターフェイスの問題。
状態を持った関数 (関数オブジェクト) も状態を持たない関数 (関数ポインタ) も統一的に扱えたらうれしいねって話なので、
状態を持たず、高階関数に渡すこともない場合は関数オブジェクトにする意味はないな。
(普通の関数も static 変数への参照を持ってたりする場合もあるので必ずしも状態を持たないわけではないけど。)
>>824,820,(>>813,814,822)
結局、どーでもいい一発芸で、ああ動くね‥‥、と思ったまま放置してましたね<関数オブジェクト
https://mevius.5ch.net/test/read.cgi/tech/1434079972/21
https://ideone.com/9KIuSD
あとはラムダ式の理解のための存在という認識、か
結局、どーでもいい一発芸で、ああ動くね‥‥、と思ったまま放置してましたね<関数オブジェクト
https://mevius.5ch.net/test/read.cgi/tech/1434079972/21
https://ideone.com/9KIuSD
あとはラムダ式の理解のための存在という認識、か
826はちみつ餃子 ◆8X2XSCHEME
2021/02/22(月) 00:10:55.10ID:oiAqsUn6 「ラムダ式が関数オブジェクト (型の定義と生成) の構文糖」というのは
既存のプログラムとの整合性を壊さない上手いアイデアだと思うけど、
しばらくしたら「関数オブジェクトはラムダ式の実体」という説明のほうが
通りがよくなったりするかもしれないね。
既存のプログラムとの整合性を壊さない上手いアイデアだと思うけど、
しばらくしたら「関数オブジェクトはラムダ式の実体」という説明のほうが
通りがよくなったりするかもしれないね。
827デフォルトの名無しさん
2021/02/22(月) 04:39:33.19ID:7qATnC1I 関数オブジェクトで状態を渡せるのは結構なんだが、コピーコンストラクタ渡しなので、
手の込んだ状態管理だった場合は結局、C言語と同じくユーザー定義変数を介して状態を読み書きすることになる。
手の込んだ状態管理だった場合は結局、C言語と同じくユーザー定義変数を介して状態を読み書きすることになる。
828デフォルトの名無しさん
2021/02/22(月) 08:23:10.03ID:Dz0hZ3aS >>827
shared_ptr使えば、大抵の場合は問題ないんじゃない?
shared_ptr使えば、大抵の場合は問題ないんじゃない?
829デフォルトの名無しさん
2021/02/22(月) 09:54:32.23ID:Y0MZ31oO >>807,820ですけどQZで始まる人あまりにもレベル低いというか回答者として不適格だと思うのでNGします
830デフォルトの名無しさん
2021/02/22(月) 10:22:59.45ID:1euWwsnd >>829
答えてもらってる立場で偉そうに。常識ないの?
答えてもらってる立場で偉そうに。常識ないの?
831デフォルトの名無しさん
2021/02/22(月) 11:11:29.17ID:M+ptXBNl いやでも実際・・・QZはね・・・
50過ぎのおっさんが無理して絡みにいってるけど空回りしてる感じなんだよね
ほんと残念だけども
50過ぎのおっさんが無理して絡みにいってるけど空回りしてる感じなんだよね
ほんと残念だけども
832デフォルトの名無しさん
2021/02/22(月) 11:36:36.23ID:7qATnC1I 関数オブジェクトに対するラムダ式の優位性は、ローカル変数を比較的安全かつ手軽に参照渡しできることだろう。
833デフォルトの名無しさん
2021/02/22(月) 12:08:03.12ID:5Ezd+ZoO あわしろ氏がQzはアカン言うてたけど、ターゲット変えたのかな?
急にその手の書き込みが増えてあからさますぎる。
急にその手の書き込みが増えてあからさますぎる。
834デフォルトの名無しさん
2021/02/22(月) 16:15:54.50ID:rpJl6SNk835デフォルトの名無しさん
2021/02/22(月) 17:04:18.35ID:M+ptXBNl 回答者には無条件で感謝しないといかんのか?
気持ち悪いな
気持ち悪いな
836デフォルトの名無しさん
2021/02/22(月) 17:39:33.90ID:rpJl6SNk >>835
感謝しろなんて言ってないぞアホ
感謝しろなんて言ってないぞアホ
837デフォルトの名無しさん
2021/02/22(月) 19:14:24.66ID:SaDkzfTf838デフォルトの名無しさん
2021/02/22(月) 19:28:11.36ID:M+ptXBNl たしかに
勝手にNGしとけば十分で煽るように宣言するは意味はまったくないね
擁護した俺が悪かったごめん
勝手にNGしとけば十分で煽るように宣言するは意味はまったくないね
擁護した俺が悪かったごめん
840デフォルトの名無しさん
2021/02/22(月) 20:02:59.96ID:5Ezd+ZoO そういう書き込みを見ると、あわしろ氏よりQzのほうが大人に見えるなあ。
まあでも、あわしろ氏には技術評論社がついてるからね。
謝っといたほうが良いんじゃないの?
まあでも、あわしろ氏には技術評論社がついてるからね。
謝っといたほうが良いんじゃないの?
841デフォルトの名無しさん
2021/02/22(月) 20:52:21.84ID:jfkpe4Eh >>834
俺も以前質問したら、明らかに見当違いなマウント取りたいだけの回答が来て、言い返した時
君みたいな事言われたよ
回答くれるのは有難いが・・・ねぇ。
まぁそういうのはスルーしろ、ってんならまだわかるけど
ちなまともな回答くれた人には礼言ってるからね
俺も以前質問したら、明らかに見当違いなマウント取りたいだけの回答が来て、言い返した時
君みたいな事言われたよ
回答くれるのは有難いが・・・ねぇ。
まぁそういうのはスルーしろ、ってんならまだわかるけど
ちなまともな回答くれた人には礼言ってるからね
842デフォルトの名無しさん
2021/02/22(月) 21:08:29.88ID:51epSMYu 知らんがな。キミの意見だけ聞いてその時どっちに問題があったかどうやって判断すればいいんだよ
843デフォルトの名無しさん
2021/02/22(月) 21:18:11.70ID:jfkpe4Eh そういう話じゃねーよ
844デフォルトの名無しさん
2021/02/23(火) 00:38:10.30ID:6MWC7t1x あるクラスのメソッドを他所で借りたいというか使いたいときって移譲(インスタンス化)するかコピペするしかないの?
845デフォルトの名無しさん
2021/02/23(火) 00:41:49.01ID:Z5ZYenTn >>844
メソッドをクラスから分離してテンプレート関数にすれば、クラスの継承関係がなくても使えるので便利。
メソッドをクラスから分離してテンプレート関数にすれば、クラスの継承関係がなくても使えるので便利。
846デフォルトの名無しさん
2021/02/23(火) 01:01:30.38ID:48JMuLBY >>844
メンバアクセスしていないならstatic関数にしてクラス名::メソッド名()で呼べる
ただメンバアクセスしていない時点でその関数は本当にそのクラスに属すべきなのか再考したほうがいいけど
あと継承する手もあるけど「借りたいから」程度の理由で場当たり的にやると確実に泥沼化する
メンバアクセスしていないならstatic関数にしてクラス名::メソッド名()で呼べる
ただメンバアクセスしていない時点でその関数は本当にそのクラスに属すべきなのか再考したほうがいいけど
あと継承する手もあるけど「借りたいから」程度の理由で場当たり的にやると確実に泥沼化する
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【雑談】暇人集会所part18
