C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part149
https://mevius.5ch.net/test/read.cgi/tech/1581974381/
このスレもよろしくね。
【初心者歓迎】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++相談室 part150
■ このスレッドは過去ログ倉庫に格納されています
2020/03/24(火) 00:04:33.93ID:YFRNwZnv
161デフォルトの名無しさん
2020/04/05(日) 14:41:32.21ID:P07lI1PF UChar * と char16_t * の方だから 84-86 行目の方だったスマソ
162デフォルトの名無しさん
2020/04/05(日) 17:57:58.00ID:IgCOpQa5163デフォルトの名無しさん
2020/04/06(月) 00:17:22.43ID:YN01J8oK 2次元のレイキャスティングを作成しようとしてます。
ttps://github.com/OneLoneCoder/olcPixelGameEngine/blob/master/Videos/OneLoneCoder_PGE_ShadowCasting2D.cpp
にあるコードを現在javaで書いており、
ttps://youtu.be/fc3nnG2CG8U?t=1519
のように縦に長く1本線が出来てほしいのですが、
縦やにブロックを並べた時に、なぜか1ブロックごとに線が出来てしまいます。
どうすれば動画みたいに、縦に長い1本線が出来ますでしょうか?
コードは
ttps://ideone.com/spxzNE
に載せてみました。
ttps://github.com/OneLoneCoder/olcPixelGameEngine/blob/master/Videos/OneLoneCoder_PGE_ShadowCasting2D.cpp
にあるコードを現在javaで書いており、
ttps://youtu.be/fc3nnG2CG8U?t=1519
のように縦に長く1本線が出来てほしいのですが、
縦やにブロックを並べた時に、なぜか1ブロックごとに線が出来てしまいます。
どうすれば動画みたいに、縦に長い1本線が出来ますでしょうか?
コードは
ttps://ideone.com/spxzNE
に載せてみました。
164デフォルトの名無しさん
2020/04/06(月) 00:42:09.55ID:JpxE2ikJ Javaの質問ならJavaスレへ逝け
165デフォルトの名無しさん
2020/04/06(月) 00:49:35.43ID:/hNEVjF2 無駄に長い一本糞を作りたいのなら修行を積んでください
166デフォルトの名無しさん
2020/04/06(月) 20:20:19.81ID:umYPTPrb わかりました。javaの法で聞きます。
167デフォルトの名無しさん
2020/04/06(月) 20:22:44.75ID:g7Z03+iy そこをなんとか!
168デフォルトの名無しさん
2020/04/08(水) 01:04:01.57ID:sLx4/ZJO 質問ですが抽象メソッドを有するクラスのデストラクタは
なんで勝手に仮想デストラクタにならないんでしょうか…
なんか有用なイディオムでもあるんでしょうか……………
C#しばらくやった後だったのでC#のつもりでインターフェースを定義して
virtual ~IFoo() { }
を書き忘れた結果盛大にリークすたgrz
なんで勝手に仮想デストラクタにならないんでしょうか…
なんか有用なイディオムでもあるんでしょうか……………
C#しばらくやった後だったのでC#のつもりでインターフェースを定義して
virtual ~IFoo() { }
を書き忘れた結果盛大にリークすたgrz
169はちみつ餃子 ◆8X2XSCHEME
2020/04/08(水) 09:41:04.41ID:kI16h2GK >>168
ゼロオーバーヘッドの原則は C++ 的にはかなり強い要請なので……。
オブジェクトに常にポインタを保持しなければならないことと、
呼び出すときに仮想関数テーブルをたどるコストがあるってのは看過できなかったんだろう。
ゼロオーバーヘッドの原則は C++ 的にはかなり強い要請なので……。
オブジェクトに常にポインタを保持しなければならないことと、
呼び出すときに仮想関数テーブルをたどるコストがあるってのは看過できなかったんだろう。
170デフォルトの名無しさん
2020/04/08(水) 09:52:16.86ID:BKxeQF3m ん〜そもそも抽象と仮想はもともとの発想が違うから似て非なるもの
さらにC#においてclassとinterfaceは似て非なるもの
C++に厳密な意味でinterfaceを実現する機能はない
そのへんはよしなによしなに
ていうか~IFOOの書き忘れがリークの元凶て発想があかん
解放し忘れしたらあかん物はsafe〜とかのクラスに押し込むべき
さらにC#においてclassとinterfaceは似て非なるもの
C++に厳密な意味でinterfaceを実現する機能はない
そのへんはよしなによしなに
ていうか~IFOOの書き忘れがリークの元凶て発想があかん
解放し忘れしたらあかん物はsafe〜とかのクラスに押し込むべき
171デフォルトの名無しさん
2020/04/08(水) 10:09:18.67ID:bRUXA7Cg でも仮想関数を持つクラスのデストラクタをわざわざ非仮想にするメリットってなんかあるの?実際の所
172デフォルトの名無しさん
2020/04/08(水) 10:20:56.86ID:iAMh5USc shared_ptrで管理するなら仮想デストラクタである必要がない
無駄に遅くなる
無駄に遅くなる
173デフォルトの名無しさん
2020/04/08(水) 11:24:20.39ID:BKxeQF3m >>171
インターフェースという位置づけなら仮想・非仮想どちらにしろデストラクタが直に呼ばれるべきじゃないんじゃないかと思うわ
ただのインターフェースだからむしろ非仮想&protectedで隠すのがいいんじゃないかと(しらんけど)
↓こんなイメージで直にデストラクタ触れるのはclass A以降
struct IFOO
{
protected:~IFOO();
};
class A:IFOO
{
public: virtual ~A();
};
class B:A{};
class C:A{};
インターフェースという位置づけなら仮想・非仮想どちらにしろデストラクタが直に呼ばれるべきじゃないんじゃないかと思うわ
ただのインターフェースだからむしろ非仮想&protectedで隠すのがいいんじゃないかと(しらんけど)
↓こんなイメージで直にデストラクタ触れるのはclass A以降
struct IFOO
{
protected:~IFOO();
};
class A:IFOO
{
public: virtual ~A();
};
class B:A{};
class C:A{};
174デフォルトの名無しさん
2020/04/08(水) 11:40:23.05ID:bRUXA7Cg それって要するに解放する時に、IFOOじゃなくてAだとかBだとかの
インスタンスの正体を全て把握しとけってことでしょ?
だったらそもそもIFOOって必要なの?って思う
インスタンスの正体を全て把握しとけってことでしょ?
だったらそもそもIFOOって必要なの?って思う
175デフォルトの名無しさん
2020/04/08(水) 11:48:39.21ID:cOYSaP/H176デフォルトの名無しさん
2020/04/08(水) 12:03:48.95ID:cOYSaP/H 途中で書き込んでしまった
なので、やるとしても警告を出すぐらいだな
って思ってたらVisual Studio 2017だと既に警告出るわ(「警告をすべて有効にする」にしないとダメだけど)
warning C4265: 'C': クラスは仮想関数を含んでいますが、デストラクタはこのクラスの仮想インスタンスではなく、正しく消滅されない可能性があります
なので、やるとしても警告を出すぐらいだな
って思ってたらVisual Studio 2017だと既に警告出るわ(「警告をすべて有効にする」にしないとダメだけど)
warning C4265: 'C': クラスは仮想関数を含んでいますが、デストラクタはこのクラスの仮想インスタンスではなく、正しく消滅されない可能性があります
177デフォルトの名無しさん
2020/04/08(水) 12:54:49.68ID:BKxeQF3m >>174
まあ不要かもしらんけどねぇ
でもC#でも仮想デストラクタを入れてるインターフェースてなくね?
リソース開放を請け負うIDisposableにしても派生クラスのデストラクタから呼び出す形
呼び出さなきゃ勝手に呼ばれるわけでもない
むしろ仮想デストラクタは便利だから使う程度の利点しかなくてインターフェースとしては不要なんじゃないかと言う気がする
まあ不要かもしらんけどねぇ
でもC#でも仮想デストラクタを入れてるインターフェースてなくね?
リソース開放を請け負うIDisposableにしても派生クラスのデストラクタから呼び出す形
呼び出さなきゃ勝手に呼ばれるわけでもない
むしろ仮想デストラクタは便利だから使う程度の利点しかなくてインターフェースとしては不要なんじゃないかと言う気がする
178デフォルトの名無しさん
2020/04/08(水) 13:19:13.33ID:bRUXA7Cg GCがあるC#の話されても困る
179デフォルトの名無しさん
2020/04/08(水) 13:27:08.18ID:lWfV0IAd GCに夢観過ぎ
180デフォルトの名無しさん
2020/04/08(水) 13:32:26.06ID:bRUXA7Cg 夢の話じゃなくてリソース解放戦略が全然違うんだから比べても仕方ないだろ
というかそもそもC#は全部のメソッドがC++で言うところのvirtualなんだから比べようもない
というかそもそもC#は全部のメソッドがC++で言うところのvirtualなんだから比べようもない
181デフォルトの名無しさん
2020/04/08(水) 14:40:59.29ID:lr7ClYRx 学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
PS スカイプ友達の掲示板 ttp://skype.x0000.net
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
PS スカイプ友達の掲示板 ttp://skype.x0000.net
182デフォルトの名無しさん
2020/04/08(水) 21:04:52.01ID:4NV79iCU GC教のやつC++破門な
183デフォルトの名無しさん
2020/04/08(水) 22:17:53.89ID:sLx4/ZJO class IFoo {
virtual int sum(int a, int b) const = 0;
};
これの書き方でリーク原因だったという話、
virtual int sum(int a, int b) const = 0;
};
これの書き方でリーク原因だったという話、
184デフォルトの名無しさん
2020/04/08(水) 22:20:32.95ID:17Fq4h5D コンパイラがクソなだけ
185デフォルトの名無しさん
2020/04/08(水) 22:23:35.70ID:sLx4/ZJO public: を忘れたgrz、
で、
class IFoo {
public:
virtual ~IFoo() { }
virtual int sum(int a, int b) const = 0;
};
としたら治まった、
で、
class IFoo {
public:
virtual ~IFoo() { }
virtual int sum(int a, int b) const = 0;
};
としたら治まった、
186デフォルトの名無しさん
2020/04/08(水) 22:26:09.85ID:sLx4/ZJO >>172
std::shared_ptr<(IFooの派生クラス)> pObj(new (IFooの派生クラス)()) ならそもそもsumの方こそ仮想関数でなくても良い
std::shared_ptr<IFoo> pObj(new (IFooの派生クラス()) ならデストラクタが仮想でないとマズー
仮想関数有りかつ非仮想デストラクタ、を許すC++のこの仕様の理由をゼロオーバーヘッドの原則で説明くのであれば
仮想関数有りかつ非仮想デストラクタ、を許すことで得られる性能上のメリットが指摘されねばならない
std::shared_ptr<(IFooの派生クラス)> pObj(new (IFooの派生クラス)()) ならそもそもsumの方こそ仮想関数でなくても良い
std::shared_ptr<IFoo> pObj(new (IFooの派生クラス()) ならデストラクタが仮想でないとマズー
仮想関数有りかつ非仮想デストラクタ、を許すC++のこの仕様の理由をゼロオーバーヘッドの原則で説明くのであれば
仮想関数有りかつ非仮想デストラクタ、を許すことで得られる性能上のメリットが指摘されねばならない
187デフォルトの名無しさん
2020/04/08(水) 22:35:26.36ID:iAMh5USc てかそれshared_ptrの作り方が悪いだけじゃん
普通make_sharedで作る。
weakを使う場合でオブジェクト自身が巨大なためメモリは即座に解放したいときでも一度newした型のshared_ptr作れと
普通make_sharedで作る。
weakを使う場合でオブジェクト自身が巨大なためメモリは即座に解放したいときでも一度newした型のshared_ptr作れと
188デフォルトの名無しさん
2020/04/08(水) 22:36:00.40ID:d4D5nRup ほう、でそのメリットとは?
189デフォルトの名無しさん
2020/04/08(水) 22:38:08.35ID:iAMh5USc 大体純粋仮想しか持たないクラスって要はinterfaceでしょ
そのポインタで派生オブジェクトのインスタンスのリソース管理するってのとは全く別の概念じゃないか
そのポインタで派生オブジェクトのインスタンスのリソース管理するってのとは全く別の概念じゃないか
190デフォルトの名無しさん
2020/04/08(水) 22:39:37.60ID:sLx4/ZJO >>189
C++に向かって言うと良い
C++に向かって言うと良い
191デフォルトの名無しさん
2020/04/08(水) 22:51:06.86ID:iAMh5USc >>186
あー何となくわかったわ
shared_ptrの使い方分かってないのね
一度派生型のshared_ptrで作ったら、それをbaseのshared_ptrに代入して保持していても、デストラクタは元の型で呼ばれるよ
ってかそういう風に使うもの
newと入れるshared_ptrの型を変えるのはダメな使い方
あー何となくわかったわ
shared_ptrの使い方分かってないのね
一度派生型のshared_ptrで作ったら、それをbaseのshared_ptrに代入して保持していても、デストラクタは元の型で呼ばれるよ
ってかそういう風に使うもの
newと入れるshared_ptrの型を変えるのはダメな使い方
192デフォルトの名無しさん
2020/04/08(水) 22:56:00.22ID:iAMh5USc って思ったけどよく考えたらいきなりbaseのshared_ptrに入れても大丈夫だったはず
193デフォルトの名無しさん
2020/04/08(水) 22:57:35.23ID:sLx4/ZJO (はてさて…よくわかっていないのはどちらなのやろうか…
194デフォルトの名無しさん
2020/04/08(水) 23:01:19.22ID:iAMh5USc195デフォルトの名無しさん
2020/04/08(水) 23:44:04.80ID:oQNNxwBC >一度派生型のshared_ptrで作ったら、それをbaseのshared_ptrに代入して保持していても、デストラクタは元の型で呼ばれるよ
えっそうなん?って試してみたらマジだった。
https://ideone.com/ZRde8G
https://cpprefjp.github.io/reference/memory/shared_ptr.html
> 通常、void*に型変換して代入されたポインタは、delete演算子を呼んだとしても元の型のデストラクタは呼び出されない。しかしshared_ptrの場合は、代入されたポインタの型が持つデストラクタが正しく実行されることが保証される。
知らんかった。
えっそうなん?って試してみたらマジだった。
https://ideone.com/ZRde8G
https://cpprefjp.github.io/reference/memory/shared_ptr.html
> 通常、void*に型変換して代入されたポインタは、delete演算子を呼んだとしても元の型のデストラクタは呼び出されない。しかしshared_ptrの場合は、代入されたポインタの型が持つデストラクタが正しく実行されることが保証される。
知らんかった。
196デフォルトの名無しさん
2020/04/08(水) 23:57:12.53ID:bRUXA7Cg 万能じゃないけどな
作る時に本来の型を教えないといけない
shared_ptr<Base> s(new Derived()) // OK
Base* b = new Derived();
shared_ptr<Base> s(b); // NG
作る時に本来の型を教えないといけない
shared_ptr<Base> s(new Derived()) // OK
Base* b = new Derived();
shared_ptr<Base> s(b); // NG
197デフォルトの名無しさん
2020/04/09(木) 00:30:09.12ID:U7264wso > 作る時に本来の型を教えないといけない
なるほど。
ttps://ideone.com/BUt4xc
教えてくれてありがとうな。勉強になる。
なるほど。
ttps://ideone.com/BUt4xc
教えてくれてありがとうな。勉強になる。
198デフォルトの名無しさん
2020/04/09(木) 00:57:59.70ID:1Z0E9i00 なんのためのvirtualなのか解ってないのか
199デフォルトの名無しさん
2020/04/09(木) 01:01:05.17ID:fPJh3bcf ば、ばーちゃん…
200デフォルトの名無しさん
2020/04/09(木) 02:46:58.11ID:xoGUUmQY 横レスですみませんがそもそもポインタなんてCの配列かscanfくらいでしか使ったことないんですがスマポとかってどんな事(時)に使うんですか?
201デフォルトの名無しさん
2020/04/09(木) 03:49:37.37ID:Jilblwzi スマートポインタどころか、new deleteさえ使わなくなったな。
202デフォルトの名無しさん
2020/04/09(木) 06:58:42.11ID:G208HopB >>200
動的なメモリ確保をしたことがない?
動的なメモリ確保をしたことがない?
203デフォルトの名無しさん
2020/04/09(木) 07:41:56.66ID:Jilblwzi 昔はよくやりましたよね。
204デフォルトの名無しさん
2020/04/09(木) 07:44:32.83ID:jjLWwUCO 結局、計算資源はそのスコープで管理するってのが主流になりつつある。
205デフォルトの名無しさん
2020/04/09(木) 08:55:49.91ID:LQ7/CkSE C++は昔からそうだったと思うが
まぁCだと関数が確保して呼び出し元でどうこうするのも多かったけど
まぁCだと関数が確保して呼び出し元でどうこうするのも多かったけど
206デフォルトの名無しさん
2020/04/09(木) 09:06:44.43ID:jjLWwUCO 例外入れてそういう性質は薄れてるでしょ。
207デフォルトの名無しさん
2020/04/09(木) 16:57:05.68ID:J3GRH2ud https://ideone.com/FvsiNz
意味わからん。
意味わからん。
208デフォルトの名無しさん
2020/04/09(木) 17:00:04.84ID:J3GRH2ud std::make_shared<hoge>(); 知らんの?
209デフォルトの名無しさん
2020/04/09(木) 17:34:40.74ID:l1qMzl9z >>207
mainでsort呼び出すところで、boolの後にret=みたいなのが無いせいで変に解釈されている
mainでsort呼び出すところで、boolの後にret=みたいなのが無いせいで変に解釈されている
210デフォルトの名無しさん
2020/04/09(木) 18:20:12.74ID:uChXMS9h >>200
CreateWindowExのlParam経由でオブジェクトのポインタを渡して受けて側でunique_ptrに格納して管理したりしてるよ
CreateWindowExのlParam経由でオブジェクトのポインタを渡して受けて側でunique_ptrに格納して管理したりしてるよ
211デフォルトの名無しさん
2020/04/09(木) 18:20:40.62ID:RTR2QVCs >>204
スコープを飛び越えて永続的にデータを保持するために使うのが Heap なんだが。
スコープを飛び越えて永続的にデータを保持するために使うのが Heap なんだが。
212デフォルトの名無しさん
2020/04/09(木) 19:11:41.90ID:jjLWwUCO213デフォルトの名無しさん
2020/04/09(木) 19:18:35.93ID:l1qMzl9z 使わんように成っていないよなぁ
214デフォルトの名無しさん
2020/04/09(木) 19:58:02.69ID:J3GRH2ud >>209 thx!
215デフォルトの名無しさん
2020/04/09(木) 21:40:49.11ID:c2wEsJAp216デフォルトの名無しさん
2020/04/09(木) 22:37:55.19ID:jjLWwUCO python,go,rustあたり見てもスコープ抜けた時に後処理する機構をサポートしとる。
217デフォルトの名無しさん
2020/04/09(木) 22:46:51.57ID:Yh5weH6+ お前はスコープで管理するのが主流っていったわけだけど
gcのないc++ではスコープで管理できるものはスコープで管理するのは
大昔から当たり前ではないでしょうか
何がいいたいのやらわからん
gcのないc++ではスコープで管理できるものはスコープで管理するのは
大昔から当たり前ではないでしょうか
何がいいたいのやらわからん
218デフォルトの名無しさん
2020/04/09(木) 23:15:28.15ID:U1el1zKz C++はおじょーずでも日本語アレな奴多いよね
職場でちゃんとコミュニケーションとれてるか?www
職場でちゃんとコミュニケーションとれてるか?www
219デフォルトの名無しさん
2020/04/09(木) 23:46:04.93ID:l1qMzl9z そんなん昔からじゃん
それこそcどころかアセンブラの頃から
それこそcどころかアセンブラの頃から
220デフォルトの名無しさん
2020/04/10(金) 02:12:51.60ID:W/LKdoJE コンピュータとコミュニケーション取る方が大事だから
221デフォルトの名無しさん
2020/04/10(金) 05:02:14.17ID:sn6MPl7m222デフォルトの名無しさん
2020/04/10(金) 06:08:55.13ID:JXOjZTrq プログラミングスタイルが変わってきてるんだよね。
アジャイルとOOPは相性が悪いのかもしれない。
アジャイルとOOPは相性が悪いのかもしれない。
223デフォルトの名無しさん
2020/04/10(金) 06:35:52.26ID:+a3yzOMH sort(
vecVisibilityPolygonPoints.begin(),
vecVisibilityPolygonPoints.end(),
[&](const tuple<float, float, float> &t1, const tuple<float, float, float> &t2)
{
return get<0>(t1) < get<0>(t2);
});
はt1の最初に設定されたfloatとt2の最初に設定されたfloatを比較して昇順に並べているのでしょうか?
[&]の意味はよく分からなくて教えて頂けると幸いです。
vecVisibilityPolygonPoints.begin(),
vecVisibilityPolygonPoints.end(),
[&](const tuple<float, float, float> &t1, const tuple<float, float, float> &t2)
{
return get<0>(t1) < get<0>(t2);
});
はt1の最初に設定されたfloatとt2の最初に設定されたfloatを比較して昇順に並べているのでしょうか?
[&]の意味はよく分からなくて教えて頂けると幸いです。
224デフォルトの名無しさん
2020/04/10(金) 06:43:17.35ID:JXOjZTrq そうですね。
&に何の意味があるのか僕にもわかりません。
&に何の意味があるのか僕にもわかりません。
225デフォルトの名無しさん
2020/04/10(金) 07:08:42.52ID:j4px16+n >>223
>t1の最初に設定されたfloatとt2の最初に設定されたfloatを比較して昇順に並べているのでしょうか?
その通りです。get<0>(t)でタプルの最初の要素を取り出して大小比較してます。
ちなみにget<0>を使わずに直接 t1 < t2 と比較すればタプルの左の要素から順に辞書順でsortされます。リンク先の(3)参照。
https://ja.cppreference.com/w/cpp/utility/tuple/operator_cmp
[&]はラムダ式の中で使われる外部の変数を参照で持ってくるものです。リンク先のラムダキャプチャを参照。
ただ上の例ではそもそも外部の変数を使っていないので[&]ではなく単に[]で問題ないです。
https://ja.cppreference.com/w/cpp/language/lambda
>t1の最初に設定されたfloatとt2の最初に設定されたfloatを比較して昇順に並べているのでしょうか?
その通りです。get<0>(t)でタプルの最初の要素を取り出して大小比較してます。
ちなみにget<0>を使わずに直接 t1 < t2 と比較すればタプルの左の要素から順に辞書順でsortされます。リンク先の(3)参照。
https://ja.cppreference.com/w/cpp/utility/tuple/operator_cmp
[&]はラムダ式の中で使われる外部の変数を参照で持ってくるものです。リンク先のラムダキャプチャを参照。
ただ上の例ではそもそも外部の変数を使っていないので[&]ではなく単に[]で問題ないです。
https://ja.cppreference.com/w/cpp/language/lambda
226デフォルトの名無しさん
2020/04/10(金) 09:22:51.69ID:dM0rZx5j227デフォルトの名無しさん
2020/04/10(金) 10:43:26.39ID:Ntz3fYqx >>226
お前さんがそこで流れと言っているものは別に最近できた流れでもなく、昔からあったし随時拡充されてきているものだぞ。
お前さんがそこで流れと言っているものは別に最近できた流れでもなく、昔からあったし随時拡充されてきているものだぞ。
228デフォルトの名無しさん
2020/04/10(金) 11:08:46.24ID:JXOjZTrq じゃあnewしたら負けって事で。
229デフォルトの名無しさん
2020/04/10(金) 11:14:55.67ID:JXOjZTrq 僕も流れを感じますね。
このフォースを感じ取れないものもいるんですね。
少し驚きました。
このフォースを感じ取れないものもいるんですね。
少し驚きました。
230デフォルトの名無しさん
2020/04/10(金) 11:17:22.22ID:nz1tlAhX get<0> とか get<1> とか観るとげんなりする
なんで動的にアクセスできないんだ
なんで動的にアクセスできないんだ
231デフォルトの名無しさん
2020/04/10(金) 11:19:41.31ID:W/LKdoJE そりゃ0番目と1番目の型が違うかもしれないからだよ
232はちみつ餃子 ◆8X2XSCHEME
2020/04/10(金) 11:23:39.14ID:n212JbcP233デフォルトの名無しさん
2020/04/10(金) 11:27:18.78ID:JXOjZTrq 格納する値の型を知っているのに相称型でしかアクセスできないのは不便ではないかというご提案として、受け付けました。
進捗状況は、ご提案番号1として随時ご確認できます。
格納する値が実行時にしか確定しない以上、コンパイラが値の型にアクセスすることも出来ないんだよな。
std::variantのoperator==は荒業でアクセスしてるよね。
進捗状況は、ご提案番号1として随時ご確認できます。
格納する値が実行時にしか確定しない以上、コンパイラが値の型にアクセスすることも出来ないんだよな。
std::variantのoperator==は荒業でアクセスしてるよね。
234デフォルトの名無しさん
2020/04/10(金) 11:53:36.61ID:OfwBXl+o あらかじめインデックス渡した関数テンプレートを実体化して
boost::anyみたいなものを返すという力技でどうにか出来なくもないだろうけど
上の方で何でもコンパイル時にやるのが良い事みたいに思ってるアホがいたけど
この辺の問題全く分かってないんだろうなぁ
(tupleを否定してるわけじゃないので変な噛み付き方しないように
boost::anyみたいなものを返すという力技でどうにか出来なくもないだろうけど
上の方で何でもコンパイル時にやるのが良い事みたいに思ってるアホがいたけど
この辺の問題全く分かってないんだろうなぁ
(tupleを否定してるわけじゃないので変な噛み付き方しないように
235デフォルトの名無しさん
2020/04/10(金) 12:15:49.17ID:GQp0hxvn 学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
ttp://x0000.net
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
236デフォルトの名無しさん
2020/04/10(金) 12:21:34.43ID:W/LKdoJE int要素が1個だけならget<int>でアクセスできなかったっけ
237デフォルトの名無しさん
2020/04/10(金) 12:33:52.04ID:JXOjZTrq 出来る限りコンパイル時に解決したほうが良いと思います。
238デフォルトの名無しさん
2020/04/10(金) 12:37:34.37ID:JXOjZTrq constexpr ifで実行時の条件分岐数を減らす。
これがいま話題の都会的プログラミング。
これがいま話題の都会的プログラミング。
239デフォルトの名無しさん
2020/04/10(金) 12:52:10.41ID:VwhukIlH240デフォルトの名無しさん
2020/04/10(金) 12:59:34.56ID:VwhukIlH template < typename > union vector3 {
struct {
T x;
T y;
T z;
};
T[3];
T&operator[](int n);
const T& operator [](int n) const;
};
struct {
T x;
T y;
T z;
};
T[3];
T&operator[](int n);
const T& operator [](int n) const;
};
241デフォルトの名無しさん
2020/04/10(金) 12:59:47.08ID:JXOjZTrq 定数に名前つけるのはどうだろか。
242デフォルトの名無しさん
2020/04/10(金) 13:06:38.10ID:VwhukIlH >>238
規模の小さな小さなプログラムでしか効果が無いようなことが都会的かあ
規模の小さな小さなプログラムでしか効果が無いようなことが都会的かあ
243デフォルトの名無しさん
2020/04/10(金) 13:26:20.94ID:JXOjZTrq フォースを感じ取るんだ。
244デフォルトの名無しさん
2020/04/10(金) 13:55:31.86ID:Ntz3fYqx >>242
何も知らない田舎者が漠然と憧れてイメージする都会ってことだろう
何も知らない田舎者が漠然と憧れてイメージする都会ってことだろう
245デフォルトの名無しさん
2020/04/10(金) 14:25:31.83ID:JXOjZTrq 岡山は大都会。
246デフォルトの名無しさん
2020/04/10(金) 15:17:20.24ID:C0/P2P/U 都会が優れていると思っている人を見ると、馬鹿なのかな、と思ってしまう。
247デフォルトの名無しさん
2020/04/10(金) 16:06:17.50ID:JXOjZTrq キミ良いこと言うね。
248デフォルトの名無しさん
2020/04/10(金) 17:42:57.17ID:j4px16+n タプルの分解は構造化束縛でだいぶ楽になったけど使わない変数を読み棄てる機能も欲しい
int main(){
const std::tuple<std::string_view, int> person("nanashi", 35);
const auto [name, age] = person;
std::cout << "name:" << name << ", age:" << age << std::endl;
return 0;
}
int main(){
const std::tuple<std::string_view, int> person("nanashi", 35);
const auto [name, age] = person;
std::cout << "name:" << name << ", age:" << age << std::endl;
return 0;
}
249デフォルトの名無しさん
2020/04/10(金) 19:35:38.21ID:Ekk6JBhA タプルなんて小規模のちょこっとしたプロトタイプコードのときは
楽だなんておもうけど、きちっとした巨大なコードに仕立て上げていく経過で
結局ふつうにちゃんと構造体なりを定義してそれ返すようにしないと後々
混乱しかないのが見えて結局こんなのイラネーな、ってなる
楽だなんておもうけど、きちっとした巨大なコードに仕立て上げていく経過で
結局ふつうにちゃんと構造体なりを定義してそれ返すようにしないと後々
混乱しかないのが見えて結局こんなのイラネーな、ってなる
250デフォルトの名無しさん
2020/04/10(金) 19:38:38.50ID:1+J64Tmd 都会つってもアーバンライフが理想だったりするんだよね
最先端とは言わなくても整った街並み統一された景観
中心部は新旧入り混じったごみ溜めみたいなもん
流行に飛びついてつまみ食いするだけのが最悪
最先端とは言わなくても整った街並み統一された景観
中心部は新旧入り混じったごみ溜めみたいなもん
流行に飛びついてつまみ食いするだけのが最悪
251デフォルトの名無しさん
2020/04/10(金) 19:48:45.27ID:JXOjZTrq タプルはそういう風に使うものじゃないんだが。
252デフォルトの名無しさん
2020/04/10(金) 19:50:40.96ID:nPD3giIX タプルは雑多な多値を返したいときが本来の目的
メタプログラミングでも活躍するけど
メタプログラミングでも活躍するけど
253デフォルトの名無しさん
2020/04/10(金) 19:54:34.60ID:JXOjZTrq 使い方のわからない初心者が要らないというが、必要ないなら標準に入るわけがない。
254デフォルトの名無しさん
2020/04/10(金) 20:30:00.07ID:L+h9leRf >使い方のわからない初心者
自己紹介乙
自己紹介乙
255デフォルトの名無しさん
2020/04/10(金) 21:14:38.73ID:n33I9Qyf256デフォルトの名無しさん
2020/04/10(金) 22:48:19.66ID:uiBwCqn7 タプルはどっちかというと無名クラスそのものな印象
なので>>249に1票を入れたい
さらに言うとC++ではラムダ式の引数にもポインタを渡せるし、
[&]で呼び出し元変数の書き換えもできるしで
ラムダ式との絡みでもタプルという機構はそこはかとなく重畳な印象
、
なので>>249に1票を入れたい
さらに言うとC++ではラムダ式の引数にもポインタを渡せるし、
[&]で呼び出し元変数の書き換えもできるしで
ラムダ式との絡みでもタプルという機構はそこはかとなく重畳な印象
、
257デフォルトの名無しさん
2020/04/10(金) 22:53:18.90ID:uiBwCqn7 ゼロコストのための手段の品揃えが良いのはいかにもC++だが
JavascriptやPythonに似せる方向性の努力はC++的では無い
キモス
JavascriptやPythonに似せる方向性の努力はC++的では無い
キモス
258デフォルトの名無しさん
2020/04/10(金) 22:58:05.31ID:nPD3giIX 貪欲に何もかも狙うのこそがc++だろ
259デフォルトの名無しさん
2020/04/10(金) 23:05:23.72ID:uiBwCqn7 なんじゃそりゃC++はプログラミング言語界のPerlでも目指しとるんか、
260デフォルトの名無しさん
2020/04/10(金) 23:07:46.16ID:uiBwCqn7 というのは半分は冗談で、
スレッド安全のために関数からはオブジェクトのコピーを返したいのだが
オブジェクトのクラスをいちいち定義したくない、と言う場合には多少便利
スレッド安全のために関数からはオブジェクトのコピーを返したいのだが
オブジェクトのクラスをいちいち定義したくない、と言う場合には多少便利
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 気象庁・高市内閣「この後311級の地震の可能性があります。北海道〜関東の人は1週間は地震が来てもすぐ逃げられる格好をしてください」 [597533159]
- 寒さしのげる場所があって食べ物も豊富にあるなら熊は冬眠しないの?
- パチンコ一切やらない人に質問がある
- アクセル・ローズよりカッコいい名前あるの?
- 【動画】ファッションモデルまんこ、裸でランウェイを歩く。これがファッションだと言われて [749674962]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
