前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
C++相談室 part159
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP283デフォルトの名無しさん
2022/02/27(日) 14:51:04.74ID:ai7feBss >>282
ありがとうございます。
アップキャストダウンキャストも関わっていたのですね
すぐにはわかりませんでした。
たとえばなんですけど派生クラスBは基本クラスAに別の名前を付けてかつBで新たに
加えられたメンバはBから紐づけられていて、これらをセットにして見やすくしたものが
派生クラスBになると言う感じなのです?
ありがとうございます。
アップキャストダウンキャストも関わっていたのですね
すぐにはわかりませんでした。
たとえばなんですけど派生クラスBは基本クラスAに別の名前を付けてかつBで新たに
加えられたメンバはBから紐づけられていて、これらをセットにして見やすくしたものが
派生クラスBになると言う感じなのです?
284はちみつ餃子 ◆8X2XSCHEME
2022/02/27(日) 15:01:31.40ID:ftSqTRxL 派生クラスのオブジェクトには基底クラスのオブジェクトが含まれる。
派生クラスの一部であるようなオブジェクト (基底やデータメンバ) をサブオブジェクトという。
派生クラスの一部であるようなオブジェクト (基底やデータメンバ) をサブオブジェクトという。
285デフォルトの名無しさん
2022/02/27(日) 16:18:03.61ID:ai7feBss286デフォルトの名無しさん
2022/02/27(日) 16:44:15.33ID:+yReYAPt ダウンキャストは危険で、本来無条件にやっていいものではない
なので実行時型チェックをして使っている今回は問題ないだけ
なお、static_cast<ClassB*>(obj)->VirFunc()は最近のコンパイラ(gcc11.2)だと
最適化なし時はClassA*として仮想関数呼び出しと同じ方法で呼び出す
最適化あり時はvtableがClassB::VirtFunc()かどうか確認してインライン展開したものが実行される
(万一確認失敗したら仮想関数呼び出しと同じ方法で呼び出す)
なので実行時型チェックをして使っている今回は問題ないだけ
なお、static_cast<ClassB*>(obj)->VirFunc()は最近のコンパイラ(gcc11.2)だと
最適化なし時はClassA*として仮想関数呼び出しと同じ方法で呼び出す
最適化あり時はvtableがClassB::VirtFunc()かどうか確認してインライン展開したものが実行される
(万一確認失敗したら仮想関数呼び出しと同じ方法で呼び出す)
287デフォルトの名無しさん
2022/02/27(日) 17:38:03.37ID:HuUTW9GQ ダウンキャストをするならstatic_castではなくdynamic_castを使うべき。
見ているobjの実体がclassBじゃないなら失敗してnullptrを返してくれる。
そもそもダウンキャストが必要になること自体良い設計ではないが
auto* pb=dynamic_cast<classB*>(pobj);
if(pb){
pb->...;
}
見ているobjの実体がclassBじゃないなら失敗してnullptrを返してくれる。
そもそもダウンキャストが必要になること自体良い設計ではないが
auto* pb=dynamic_cast<classB*>(pobj);
if(pb){
pb->...;
}
288デフォルトの名無しさん
2022/02/27(日) 17:46:47.65ID:NpJPdMJB 「キャストはなるべくするな、特にdynamicはコストが高い」と古文書にもあった
289デフォルトの名無しさん
2022/02/27(日) 17:54:22.89ID:+yReYAPt 今回はそれをtypeidでやりたかったんでしょ
290デフォルトの名無しさん
2022/02/27(日) 18:02:07.86ID:HfpUvsK0 ダイナミックダイクマ
291デフォルトの名無しさん
2022/02/27(日) 20:42:58.79ID:ai7feBss なんかC++が気になるので実践的な情報でもなんでもありがたいです。
C++で食べてる人と話したこともないし・・・
C++で食べてる人と話したこともないし・・・
292デフォルトの名無しさん
2022/02/27(日) 20:45:27.70ID:NpJPdMJB 古文書には「#defineではなくconst,enum,inlineを使うといい」ってあるよ
293デフォルトの名無しさん
2022/02/27(日) 20:47:31.05ID:nGlHhzSe 死海文書では「constexpr, enum struct, enum class」を使うことで難を逃れたと書いてある
294デフォルトの名無しさん
2022/02/27(日) 20:56:43.39ID:o7kRBzLD const使えば分かる。#defineのほうがやっぱり便利だわ。
295デフォルトの名無しさん
2022/02/27(日) 21:21:58.39ID:Xl3wWN+O C++のenumは機能が弱いからなあ
Rustのenumみたいに任意の型の変数値を格納できるようにしてほしい
Rustのenumみたいに任意の型の変数値を格納できるようにしてほしい
296デフォルトの名無しさん
2022/02/27(日) 21:31:32.92ID:nXG/aSfD297デフォルトの名無しさん
2022/02/27(日) 21:36:52.29ID:o7kRBzLD char*やシンプルな構造体ならconst使うのはメリットあると思うが、
あれこれ機能が詰め込まれるクラスになると不便さ、面倒さのほうが際立つ。
多重継承並にハゲる原因になる。
あれこれ機能が詰め込まれるクラスになると不便さ、面倒さのほうが際立つ。
多重継承並にハゲる原因になる。
298デフォルトの名無しさん
2022/02/27(日) 22:28:50.95ID:hjaMvOv0 まーたしかにconst_castだらけになるかもしれないね
299はちみつ餃子 ◆8X2XSCHEME
2022/02/27(日) 23:37:06.31ID:ftSqTRxL const_cast を正しく使うのは難しい。
const なオブジェクトから const を剥がして書き換えるのは未定義。
数年前に LLVM が const 指定の情報を最適化に活用する方向に舵を切ったというニュースもあった。
const ではないオブジェクトに対して const なポインタや参照を経由している場合には
const を外して書き換えるのは許されるはずだが、
それが必要になるようだと設計を見直したほうがいい。
現在のコンパイラは賢くて、 const 指定をしてなくても書き換えられる可能性がないことを見抜いて最適化することも多いんで、
const の指定自体は最適化にはそれほど寄与しないよ。
ただ、 const を前提とした設計はコンパイラにとって最適化しやすい構造である可能性はある。
@ const を前提にした設計にできるもんならしたほうがいい
A そうできないなら無理に const を付けないほうがいい (後で場当たり的に const_cast で const をはがすとどこかで間違う)
const なオブジェクトから const を剥がして書き換えるのは未定義。
数年前に LLVM が const 指定の情報を最適化に活用する方向に舵を切ったというニュースもあった。
const ではないオブジェクトに対して const なポインタや参照を経由している場合には
const を外して書き換えるのは許されるはずだが、
それが必要になるようだと設計を見直したほうがいい。
現在のコンパイラは賢くて、 const 指定をしてなくても書き換えられる可能性がないことを見抜いて最適化することも多いんで、
const の指定自体は最適化にはそれほど寄与しないよ。
ただ、 const を前提とした設計はコンパイラにとって最適化しやすい構造である可能性はある。
@ const を前提にした設計にできるもんならしたほうがいい
A そうできないなら無理に const を付けないほうがいい (後で場当たり的に const_cast で const をはがすとどこかで間違う)
300デフォルトの名無しさん
2022/02/27(日) 23:43:44.46ID:o7kRBzLD 書き換えないコードの場合はどういう最適化がされるのかを知りたいのだが。
301デフォルトの名無しさん
2022/02/27(日) 23:51:40.12ID:HuUTW9GQ getterにlockを仕込む場合にgetterをconstにするべきかどうか悩む
const扱いにしてmutexに関してだけconstをはがすべきなのか
class C{
std::mutex _mtx;
int _a;
public:
int get_a(){
std::lock_guard lk(_mtx);
return _a;
}
void set_a(int a);
};
const扱いにしてmutexに関してだけconstをはがすべきなのか
class C{
std::mutex _mtx;
int _a;
public:
int get_a(){
std::lock_guard lk(_mtx);
return _a;
}
void set_a(int a);
};
302デフォルトの名無しさん
2022/02/28(月) 00:43:20.93ID:7GK6w4Z4 >>301
俺ならgetterにはconst付けてmutexメンバ変数にはmutable付けるね。
俺ならgetterにはconst付けてmutexメンバ変数にはmutable付けるね。
303はちみつ餃子 ◆8X2XSCHEME
2022/02/28(月) 00:54:54.67ID:R6BwoFXD304デフォルトの名無しさん
2022/02/28(月) 01:18:45.25ID:EeqSDih1 >>300
だからお前は何を調べたとずっと聞いてるんだがw
だからお前は何を調べたとずっと聞いてるんだがw
305デフォルトの名無しさん
2022/02/28(月) 01:22:01.28ID:LWo9z6at 言い出した本人が逃げ出して答えないし、誰もはっきりと答えないんだからウソなんじゃね?
306デフォルトの名無しさん
2022/02/28(月) 01:25:22.84ID:EeqSDih1 状況に依るけどmutableにするなら俺はunique_ptrとかにするかもしれない
307デフォルトの名無しさん
2022/02/28(月) 01:42:21.31ID:EeqSDih1 >>305
言い出した本人はいるし、「お前は何を調べたとずっと聞いてる」のにしかも何度も聞いてるのに答えない=お前が逃げ続けてるからだろ?w
言い出した本人はいるし、「お前は何を調べたとずっと聞いてる」のにしかも何度も聞いてるのに答えない=お前が逃げ続けてるからだろ?w
308デフォルトの名無しさん
2022/02/28(月) 01:47:08.01ID:LWo9z6at 本人いたのか。自分で言い出したはいいが実はさっぱり分からないって感じか。
それはそれで仕方ない。発狂してたら余計にやっぱりウソなんだ〜ってなるだけだぞ。
それはそれで仕方ない。発狂してたら余計にやっぱりウソなんだ〜ってなるだけだぞ。
309デフォルトの名無しさん
2022/02/28(月) 01:50:37.25ID:EeqSDih1 もう寝るけど、お前がただただ煽りながら発狂しちゃってる間も、毎日何某か書いてるんだがw
いつになったらお前がどこまで何を調べたのか詳細に説明してくれるのか心待ちにしてるよw
いつになったらお前がどこまで何を調べたのか詳細に説明してくれるのか心待ちにしてるよw
310デフォルトの名無しさん
2022/02/28(月) 01:50:44.99ID:h02lB8BP311デフォルトの名無しさん
2022/02/28(月) 01:54:51.97ID:LWo9z6at >>309
やっぱりウソなのか。散々暴れといてしょうもない奴だな、おまえ。
やっぱりウソなのか。散々暴れといてしょうもない奴だな、おまえ。
312デフォルトの名無しさん
2022/02/28(月) 01:56:18.18ID:h02lB8BP void f(const std::vector<int>&v){
for(size_t i=0; i!=v.size(); ++i)...
}
とかで
本来v.size()を毎回呼ばなきゃいけないけどconstだから1回呼ぶだけで十分って話とかじゃないの?
まあ俺も-O2コンパイル結果を読む気力はないからエアプ扱いしてもらって構わんが
for(size_t i=0; i!=v.size(); ++i)...
}
とかで
本来v.size()を毎回呼ばなきゃいけないけどconstだから1回呼ぶだけで十分って話とかじゃないの?
まあ俺も-O2コンパイル結果を読む気力はないからエアプ扱いしてもらって構わんが
313デフォルトの名無しさん
2022/02/28(月) 02:03:13.46ID:/gADsoXI constなんていつでもconst_castで引っぺがせるんだから、勝手に定数畳み込みとかは出来ないし
じゃあそういうのが無いのを検知すれば出来るだろというと、そんなに賢いならconst無しの変数でも同じ事が出来るはず
結論から言うとconstは最適化に何の影響も及ぼさない
畳み込ませたい定数はconstじゃなくenumか#defineで定義するのが正解
じゃあそういうのが無いのを検知すれば出来るだろというと、そんなに賢いならconst無しの変数でも同じ事が出来るはず
結論から言うとconstは最適化に何の影響も及ぼさない
畳み込ませたい定数はconstじゃなくenumか#defineで定義するのが正解
314デフォルトの名無しさん
2022/02/28(月) 02:14:26.59ID:EeqSDih1 複数IDで暴れとるwwwww 朝までに具体的な事例を書いてねw
環境も明記されてないコンパイルも通ってないモノでは想像で言ってるだけってことになるよw
環境も明記されてないコンパイルも通ってないモノでは想像で言ってるだけってことになるよw
315デフォルトの名無しさん
2022/02/28(月) 06:31:25.23ID:Zh+6zBsp >>312
この例は毎回v.size()呼んで遅くなりうる
それは最初に1回一時変数に受ければ解決するがそれがconstかどうかはまずパフォーマンスに影響しないだろう
もっというとこれは生のfor文の欠陥でこれからはstd::views::iotaを使っていくべき理由の1つだと思う
この例は毎回v.size()呼んで遅くなりうる
それは最初に1回一時変数に受ければ解決するがそれがconstかどうかはまずパフォーマンスに影響しないだろう
もっというとこれは生のfor文の欠陥でこれからはstd::views::iotaを使っていくべき理由の1つだと思う
316デフォルトの名無しさん
2022/02/28(月) 06:47:54.89ID:EeqSDih1 >>315
その例はconstにしようがしなかろうがインライン展開されるので最適化結果に違いはないよ
そもそも最適化しやすくなると言ってるだけで、違いがあるとまでは言ってなかったんだけどw
>>314に書いたとおり、煽るだけ君は結局「想像で言ってるだけ」なんだなw
妄想はほどほどにしてくれw
最適化コードに違いがある例が以下。マクロの定義を空にすればconstなしのコードになる。
https://godbolt.org/z/YavYzrE3z
#define CONST const
template<typename T>
struct s {
T value;
operator T() CONST {return value;}
};
CONST s<int> a[] = {1,2,3,4,5};
template<typename T> T func() {
T r = 1;
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
r *= a[i];
}
return r;
}
int main() {
return func<double>();
}
その例はconstにしようがしなかろうがインライン展開されるので最適化結果に違いはないよ
そもそも最適化しやすくなると言ってるだけで、違いがあるとまでは言ってなかったんだけどw
>>314に書いたとおり、煽るだけ君は結局「想像で言ってるだけ」なんだなw
妄想はほどほどにしてくれw
最適化コードに違いがある例が以下。マクロの定義を空にすればconstなしのコードになる。
https://godbolt.org/z/YavYzrE3z
#define CONST const
template<typename T>
struct s {
T value;
operator T() CONST {return value;}
};
CONST s<int> a[] = {1,2,3,4,5};
template<typename T> T func() {
T r = 1;
for (int i = 0; i < sizeof(a)/sizeof(a[0]); ++i) {
r *= a[i];
}
return r;
}
int main() {
return func<double>();
}
317デフォルトの名無しさん
2022/02/28(月) 07:29:26.73ID:Zh+6zBsp >>316
俺はこの話題に関して初めて書き込んだ者だが
俺はこの話題に関して初めて書き込んだ者だが
318デフォルトの名無しさん
2022/02/28(月) 07:34:24.42ID:Od0J2fCm >>316
都合の良い例にしすぎだろ
都合の良い例にしすぎだろ
319デフォルトの名無しさん
2022/02/28(月) 07:43:08.18ID:EeqSDih1 反証は1つで十分w 具体例の1つも書けない人は黙ってようねw
320デフォルトの名無しさん
2022/02/28(月) 08:14:09.88ID:Od0J2fCm ああすまん、変化しない例を出してるつもりだと思ってた
そんなコードでも変化したりするのね
そんなコードでも変化したりするのね
321デフォルトの名無しさん
2022/02/28(月) 10:21:52.93ID:ftLJb++c 古文書には#defineは良くないってあったけど今のC++ってその辺り改善されたんですか?
323デフォルトの名無しさん
2022/02/28(月) 10:56:01.32ID:xzjNndYE324デフォルトの名無しさん
2022/02/28(月) 11:04:38.67ID:ftLJb++c >>323
他所からパクってきたコードですが、#defineはそのまま書き換えるだけだから以下や
#define SIX 1 + 5
#define NINE 8 + 1
int main(void)
{
printf( "What you get if you multiply six by nine: %d\n", SIX * NINE );
return 0;
}
以下の関数の呼び出しなどで意図しない挙動になったりとかです
#define SquareMulti(x, y) x * x * y
SquareMulti(++a, b)
他所からパクってきたコードですが、#defineはそのまま書き換えるだけだから以下や
#define SIX 1 + 5
#define NINE 8 + 1
int main(void)
{
printf( "What you get if you multiply six by nine: %d\n", SIX * NINE );
return 0;
}
以下の関数の呼び出しなどで意図しない挙動になったりとかです
#define SquareMulti(x, y) x * x * y
SquareMulti(++a, b)
325はちみつ餃子 ◆8X2XSCHEME
2022/02/28(月) 11:14:22.32ID:R6BwoFXD >>324
その程度なら inline や constexpr を活用するのが今は良い作法
その程度なら inline や constexpr を活用するのが今は良い作法
326デフォルトの名無しさん
2022/02/28(月) 11:19:01.97ID:xzjNndYE327デフォルトの名無しさん
2022/02/28(月) 11:20:49.97ID:+7QZaSxQ >>321
#defineじゃないとできない/面倒なパターンが減ったという意味ならある程度はマシになってる
<numeric>とか<source_location>とかconstexpr/constevalとか
#defineじゃないとできない/面倒なパターンが減ったという意味ならある程度はマシになってる
<numeric>とか<source_location>とかconstexpr/constevalとか
328デフォルトの名無しさん
2022/02/28(月) 11:24:50.52ID:s9ebK7Me >>321
#付いてるから、基本プリプロセッサ文だかんな
#付いてるから、基本プリプロセッサ文だかんな
329デフォルトの名無しさん
2022/02/28(月) 11:39:25.77ID:42wjdHim スコープ付きの#defineが欲しい時ってあるよね…w
330デフォルトの名無しさん
2022/02/28(月) 12:09:06.26ID:EeqSDih1 ねーよw
331デフォルトの名無しさん
2022/02/28(月) 12:16:38.60ID:WvOgTxGl #define NAMESPACE namespase
#define NS ns
NAMESPACE NS{
void f();
}
void g(){
NS::f();
}
このへんのコードをプリプロセスの段階で正しく解釈するのは無理なのがね
#pragma defines(push)
みたいのが言語標準になればいけるか?
#define NS ns
NAMESPACE NS{
void f();
}
void g(){
NS::f();
}
このへんのコードをプリプロセスの段階で正しく解釈するのは無理なのがね
#pragma defines(push)
みたいのが言語標準になればいけるか?
332デフォルトの名無しさん
2022/02/28(月) 12:32:49.89ID:EeqSDih1 馬鹿の妄想は放置して、マクロでないと困る例
#include <iostream>
#define PRINT_LOCATION() (::std::cout << __FILE__ ":" << __LINE__ << ":" << __PRETTY_FUNCTION__ << "\n")
namespace hoge {
void func() {
PRINT_LOCATION();
}
}
using namespace std;
using namespace hoge;
int main() {
PRINT_LOCATION();
func();
return 0;
}
#include <iostream>
#define PRINT_LOCATION() (::std::cout << __FILE__ ":" << __LINE__ << ":" << __PRETTY_FUNCTION__ << "\n")
namespace hoge {
void func() {
PRINT_LOCATION();
}
}
using namespace std;
using namespace hoge;
int main() {
PRINT_LOCATION();
func();
return 0;
}
333デフォルトの名無しさん
2022/02/28(月) 12:41:59.91ID:xzjNndYE 友達いなさそうだな
334デフォルトの名無しさん
2022/02/28(月) 12:49:02.69ID:EeqSDih1 そんなこと気になっちゃう程度の馬鹿よりは多そうだけど、多けりゃいいってもんでもないと思うぞw
335デフォルトの名無しさん
2022/02/28(月) 13:48:09.49ID:ftLJb++c 多くの回答ありがとうございます
やはり可能な限り#defineは避けた方が良さそうですね
ただ#defineでもできないことや、#defineにしかできないこともあるので変に毛嫌いせず勉強を進めてこうと思います
やはり可能な限り#defineは避けた方が良さそうですね
ただ#defineでもできないことや、#defineにしかできないこともあるので変に毛嫌いせず勉強を進めてこうと思います
336デフォルトの名無しさん
2022/02/28(月) 14:03:01.00ID:EeqSDih1 例外中の例外なので、毛嫌いして全く問題なく、勉強する必要も全くないw
337デフォルトの名無しさん
2022/02/28(月) 15:55:04.33ID:Yx2Q2Rjy Include Guard Macro以外の#defineは忘れてもいいと思う。
338デフォルトの名無しさん
2022/02/28(月) 17:13:33.60ID:HhKI/yF6 ほんそれ
一生ソロプレイかつCにしがみつくつもりなら構わないけど
そうじゃないなら基本的に使わないべき遺物
一生ソロプレイかつCにしがみつくつもりなら構わないけど
そうじゃないなら基本的に使わないべき遺物
339デフォルトの名無しさん
2022/02/28(月) 20:11:29.53ID:Zh+6zBsp ほぼ同じ演算子オーバーロードを延々と書く場合とかマクロでまとめていいと思うけどね
テンプレートではどうしようもないレベルのメタプログラミングの手段として未だに有効
テンプレートではどうしようもないレベルのメタプログラミングの手段として未だに有効
340デフォルトの名無しさん
2022/02/28(月) 20:17:53.65ID:xrBOKM6i むしろ、他言語にマクロ展開機能がないことが不満
341デフォルトの名無しさん
2022/02/28(月) 20:19:01.14ID:EeqSDih1 そうなる仕組みもどうかと思うけど、必要悪として採用するケースが「あってもいい」という程度だよ
342デフォルトの名無しさん
2022/02/28(月) 20:39:17.05ID:xzjNndYE343デフォルトの名無しさん
2022/02/28(月) 21:11:31.61ID:EeqSDih1 だよなじゃねーよw
本当にマクロでないとできないケースなのかすら怪しいw
本当にマクロでないとできないケースなのかすら怪しいw
344デフォルトの名無しさん
2022/02/28(月) 21:21:08.91ID:TawWBZkT345デフォルトの名無しさん
2022/02/28(月) 23:32:29.49ID:7SSxP2tw346デフォルトの名無しさん
2022/02/28(月) 23:58:07.07ID:EeqSDih1 ゴミのような文化を踏襲してしまった残念言語のRustさんのヘイトを上げるのはやめましょうw
347デフォルトの名無しさん
2022/03/01(火) 00:33:34.91ID:Sj28peWv C++使ってるおれすげーみたいな
348デフォルトの名無しさん
2022/03/01(火) 01:06:15.88ID:PkY5rkFL C++を使いこなせないから皆下流行語の修得を目指す
349デフォルトの名無しさん
2022/03/01(火) 06:11:28.76ID:qblu1Z+O350デフォルトの名無しさん
2022/03/01(火) 06:34:48.00ID:MT73K7Vw351デフォルトの名無しさん
2022/03/01(火) 06:35:21.34ID:MT73K7Vw352デフォルトの名無しさん
2022/03/01(火) 07:02:46.96ID:qblu1Z+O354デフォルトの名無しさん
2022/03/01(火) 09:06:42.29ID:cUOzOJ3p355デフォルトの名無しさん
2022/03/01(火) 10:19:23.90ID:Hv9eImco struct B{...}*bP;
struct D1 : public B{...} d1;
struct D2 : public B{...} d2;
bP = (...)? &d1 : &d2;
これって駄目なんですね
struct D1 : public B{...} d1;
struct D2 : public B{...} d2;
bP = (...)? &d1 : &d2;
これって駄目なんですね
356デフォルトの名無しさん
2022/03/01(火) 10:40:29.97ID:MQDieCXt357デフォルトの名無しさん
2022/03/01(火) 11:01:53.10ID:Hv9eImco なるほど
素直にif文にしておきます
素直にif文にしておきます
358デフォルトの名無しさん
2022/03/01(火) 11:08:34.73ID:cMGuQY9h つ static_cast<bP>(&d#)
359デフォルトの名無しさん
2022/03/01(火) 11:13:51.24ID:qblu1Z+O360デフォルトの名無しさん
2022/03/01(火) 11:14:23.15ID:qblu1Z+O rnd() & 1
は無視してくれw
は無視してくれw
361デフォルトの名無しさん
2022/03/01(火) 11:14:50.30ID:Hv9eImco ああ、それでいいんですね
ありがとうございます
ありがとうございます
362デフォルトの名無しさん
2022/03/01(火) 11:54:42.57ID:MT73K7Vw 今度はCに毒されていくC++スレw
プリプロセッサはincludeパス的に言語や標準ライブラリを結構意識したりしますw
プリプロセッサはincludeパス的に言語や標準ライブラリを結構意識したりしますw
363デフォルトの名無しさん
2022/03/01(火) 23:30:51.45ID:cUOzOJ3p >>355
そういうのはRustがすっきり実現していていい感じ
静的モノモーフィングでコンパイル時に解決させる方法と
動的ディスパッチで実行時に解決させる方法の2種類を選びつつ簡単かつ安全に記述できる
そういうのはRustがすっきり実現していていい感じ
静的モノモーフィングでコンパイル時に解決させる方法と
動的ディスパッチで実行時に解決させる方法の2種類を選びつつ簡単かつ安全に記述できる
364デフォルトの名無しさん
2022/03/02(水) 01:32:22.77ID:/wwlA8Tq なんでこんなとこにrust信者が湧いてるん?
365デフォルトの名無しさん
2022/03/02(水) 03:41:00.25ID:re9dUtRi C++のstatic_castで十分すっきりしてるし安全なんだがw
366デフォルトの名無しさん
2022/03/02(水) 03:51:26.38ID:S8+3WyDZ うむ
まあRustはトレイトを導入しているためもっとフレキシブルに機能毎に事実上のキャストができる点で先に進んでる感じ
まあRustはトレイトを導入しているためもっとフレキシブルに機能毎に事実上のキャストができる点で先に進んでる感じ
367デフォルトの名無しさん
2022/03/02(水) 04:16:03.37ID:re9dUtRi std::visitで十分じゃないの?
368デフォルトの名無しさん
2022/03/02(水) 06:05:07.28ID:+cCq037X >>364
メンタルはルビ基地と同じだから相手すんな
メンタルはルビ基地と同じだから相手すんな
369デフォルトの名無しさん
2022/03/02(水) 08:02:10.51ID:UQPkqsb3 >>364
スレ違い野郎はNG推奨
スレ違い野郎はNG推奨
370デフォルトの名無しさん
2022/03/02(水) 10:15:53.71ID:KGds3ROy RustはUnityで作られてるんだからC#スレ行けよ
371デフォルトの名無しさん
2022/03/03(木) 11:52:56.52ID:YmcISO0J 有名なライブラリのコード覗いて見るとC++でもマクロ結構使ってるよね
372デフォルトの名無しさん
2022/03/03(木) 12:21:01.59ID:aVzPtAzs まあそこは女性のウェストが50cmだと思ってるスペック厨のオタクと現実に生きて実用的なものを開発してる人の違いだね
373デフォルトの名無しさん
2022/03/03(木) 12:24:43.91ID:adLRB/+A 有名ライブラリこそマクロに頼らないとやってられんとこあるからな
コンパイル環境(gcc/clang/MSVC)のスイッチとか
C++バージョンのスイッチとか(#define CONSTEVAL20 consteval/constexpr)
ボイラープレートの簡略化はどれぐらいやってるかは知らんが
コンパイル環境(gcc/clang/MSVC)のスイッチとか
C++バージョンのスイッチとか(#define CONSTEVAL20 consteval/constexpr)
ボイラープレートの簡略化はどれぐらいやってるかは知らんが
374デフォルトの名無しさん
2022/03/03(木) 15:14:53.11ID:dDnSjvDO 条件コンパイルには#ifdefがいるね
375デフォルトの名無しさん
2022/03/03(木) 16:48:19.79ID:PsZF8bq4 文法ばかり勉強してコード書かないからマクロの必要性が見えないんだよ。
376デフォルトの名無しさん
2022/03/03(木) 18:39:02.62ID:c7Jb1Y/C ああ、マクロ不要論者は自分でライブラリ書いたことないというオチか
腑に落ちたわ
腑に落ちたわ
377デフォルトの名無しさん
2022/03/03(木) 19:24:38.63ID:hTxF5AaQ まともにコード書く量も質も足りない人にはマクロの弊害を認識できてないんだろうなw
インクルードガードなどの条件コンパイルはプリプロセスではあるものの、一般的なマクロ置換処理ではないw
インクルードガードなどの条件コンパイルはプリプロセスではあるものの、一般的なマクロ置換処理ではないw
378デフォルトの名無しさん
2022/03/03(木) 19:49:49.09ID:l1hFvrU8 本気でいってんの?このバカ
379デフォルトの名無しさん
2022/03/03(木) 20:05:07.59ID:hTxF5AaQ 単発IDで中身のない煽りだけの人が早速出現w
臆病すぎwwww
臆病すぎwwww
380デフォルトの名無しさん
2022/03/04(金) 05:56:44.52ID:1RB3fRbG > マクロ不要論者
誰? いたっけ、そんなやつ
誰? いたっけ、そんなやつ
381デフォルトの名無しさん
2022/03/04(金) 06:37:36.91ID:DqQFNqIa382デフォルトの名無しさん
2022/03/04(金) 06:43:28.40ID:1RB3fRbG ああ、あのキチか
相手すると馬鹿が伝染るからやめようぜ
相手すると馬鹿が伝染るからやめようぜ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 俳優 高岡蒼佑「エジプト出身とかナイジェリア出身とかの人が、日本の代表顔して移民の事とか話してるの見るとなんか違う気がする」★2 [Anonymous★]
- アベノミクス」で投資対象と化したマンション ローンの低金利が続き「年収の12倍」借りる20代まで😲 [861717324]
- 高市早苗総理につけたい二つ名 [245325974]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 中国発日本行の航空券、491,000件(全体の32%)がキャンセルされたと判明。高市どうすんのこれ [603416639]
