次スレを立てる時は本文の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
探検
C++相談室 part142
■ このスレッドは過去ログ倉庫に格納されています
2019/04/01(月) 22:17:05.84ID:wmfpIKt/
679デフォルトの名無しさん
2019/05/30(木) 22:59:49.76ID:aiZ1ZVIC T f();
auto a = f<Type>();
auto a = f<Type>();
680デフォルトの名無しさん
2019/05/30(木) 23:10:37.32ID:rl6Tun4v >>679
これはよくやる
これはよくやる
681デフォルトの名無しさん
2019/05/30(木) 23:12:17.72ID:rl6Tun4v auto a=std::make_shared<A>();
みたいな感じで
みたいな感じで
682デフォルトの名無しさん
2019/05/30(木) 23:16:18.93ID:z7aQRPDh 実数と複素数のジェネリックプログラミングってどうやるの
実パラメータの数が違うから、結局ほとんどの機能を特殊化してるんだが
実パラメータの数が違うから、結局ほとんどの機能を特殊化してるんだが
684デフォルトの名無しさん
2019/05/30(木) 23:19:32.75ID:s4B+etfT 複素数と実数をジェネリクスでまとめると大抵死ぬぞ。
行列ライブラリなんかも基本別関数だから。
行列ライブラリなんかも基本別関数だから。
685デフォルトの名無しさん
2019/05/30(木) 23:40:09.00ID:z7aQRPDh >>684
やらないのが正解ってことで良いですか?
やらないのが正解ってことで良いですか?
686デフォルトの名無しさん
2019/05/31(金) 19:07:02.02ID:5tY3IGQl ジェネリック医薬品。
687デフォルトの名無しさん
2019/05/31(金) 20:46:39.86ID:SYuh0ZxQ >>685
そう。やらないのが正解。
そう。やらないのが正解。
688デフォルトの名無しさん
2019/05/31(金) 22:32:45.09ID:YZ9ZViZw なんでよ 理由を教えてくれ
689デフォルトの名無しさん
2019/05/31(金) 22:41:35.25ID:8uAssd9+ 理由?やる理由がないからだよ
できるからというだけの理由で無駄な汎用性を持たせようとして無駄に複雑で使いづらい糞が生み出されて結局使われないパターンを嫌というほど見てきたわ
できるからというだけの理由で無駄な汎用性を持たせようとして無駄に複雑で使いづらい糞が生み出されて結局使われないパターンを嫌というほど見てきたわ
690デフォルトの名無しさん
2019/05/31(金) 22:51:46.17ID:YZ9ZViZw うーんそういうもんかね
ある型について定義したジェネリック関数群全てを特殊化するはめになって
もうこれ型パラメータの意味ほぼねぇな
ってなったことはあったけど
ある型について定義したジェネリック関数群全てを特殊化するはめになって
もうこれ型パラメータの意味ほぼねぇな
ってなったことはあったけど
691デフォルトの名無しさん
2019/06/01(土) 01:01:06.10ID:jOO/UBvi パワー系がいて、通り過ぎる人が眼鏡をかけていれば「メガネ、メガネ」、胸の大きい女性なら「オッパイ、オッパイ」と特徴を呟いていたんです。
私は「ヒゲ」と言われたのですが、ひげ生やしていないんですよね。
誰かこの暗号解ける?
私は「ヒゲ」と言われたのですが、ひげ生やしていないんですよね。
誰かこの暗号解ける?
692デフォルトの名無しさん
2019/06/01(土) 01:21:48.47ID:amrEPTXm >>690
今の複素数の例がそれそのものじゃん
今の複素数の例がそれそのものじゃん
693デフォルトの名無しさん
2019/06/01(土) 01:28:26.64ID:vdsZQvk5 >>692
一応関数インターフェースの統一ができるから…
一応関数インターフェースの統一ができるから…
694デフォルトの名無しさん
2019/06/01(土) 01:34:23.92ID:5ncHXmxx std::complex使えばおおよその計算はdoubleその他と共通化できない?
虚部実部を見に行かない範囲ならなんとか
虚部実部を見に行かない範囲ならなんとか
695デフォルトの名無しさん
2019/06/01(土) 07:39:23.04ID:gFsX3PNG そこまで無理に場合分けして共通化させるなら初めから
独立に定義したほうがいい。
しっかり勉強してきた奴ほど無理やり継承ツリーでまとめようとする傾向にある。
それが行き過ぎると無駄なジェネリックの登場となる。
独立に定義したほうがいい。
しっかり勉強してきた奴ほど無理やり継承ツリーでまとめようとする傾向にある。
それが行き過ぎると無駄なジェネリックの登場となる。
696デフォルトの名無しさん
2019/06/01(土) 08:15:26.41ID:uvuK6mvN まあ一度はそういう経験しておいた方がいいな
697デフォルトの名無しさん
2019/06/01(土) 08:43:52.63ID:QzRnFnM6 コルモゴロフ複雑性は計算不能なのだから
プログラムのあるべきコンパクトさについて一般論は存在しない
この点プログラムの記述方法の選択はまさに個々人のセンスに依存したartであり
真に人間らしい営みであると言える
プログラムのあるべきコンパクトさについて一般論は存在しない
この点プログラムの記述方法の選択はまさに個々人のセンスに依存したartであり
真に人間らしい営みであると言える
698デフォルトの名無しさん
2019/06/01(土) 09:38:35.51ID:zEOJGQ26 仮に実数と複素数を継承関係にさせるとして、どっちを親にすべきかで広い合意は取れないからな
円楕円問題と同じ
円楕円問題と同じ
699デフォルトの名無しさん
2019/06/01(土) 11:24:10.29ID:x6StDmNU たとえすべての関数を特殊化することになったとしても、大部分のifを共通化できるはずで、他のクラスのテンプレ引数として区別なく使えるようになるからそれなりに意味はあるでしょ。
700デフォルトの名無しさん
2019/06/01(土) 13:24:21.51ID:ws//1RZ4 意味はないよ
そもそも複素数なんて仮にそれを多用する分野のタスクだったとしても実数に比べて使用頻度は低いんだから、
タスクで本当に必要なものだけを実装すればよい
そもそも複素数なんて仮にそれを多用する分野のタスクだったとしても実数に比べて使用頻度は低いんだから、
タスクで本当に必要なものだけを実装すればよい
701デフォルトの名無しさん
2019/06/01(土) 14:00:28.34ID:jOO/UBvi いや、実数が使えたためしがないから、俺の爺ちゃんが量子を考案したのだが。
702デフォルトの名無しさん
2019/06/01(土) 14:17:26.49ID:eS53UGey お前のじーちゃんシュレーディンガーかよ
703デフォルトの名無しさん
2019/06/01(土) 14:38:11.54ID:jOO/UBvi 高校のとき、心のお兄ちゃんとか心の妹とか流行ってたな。
704デフォルトの名無しさん
2019/06/01(土) 15:52:18.02ID:gFsX3PNG 29=(5+2i)(5-2i)
こんな風に因数分解して欲しくケースなんてほとんどないだろ。
変にポリモルフィックにやるべきじゃない。
こんな風に因数分解して欲しくケースなんてほとんどないだろ。
変にポリモルフィックにやるべきじゃない。
705デフォルトの名無しさん
2019/06/01(土) 16:12:58.52ID:vdsZQvk5 おじちゃん今継承とか動的多態の話しはしてないよ?
706デフォルトの名無しさん
2019/06/01(土) 16:28:52.97ID:gFsX3PNG は?c++でジェネリクスやろうとすればデフォルトで使うことになるだろ?
ボケちゃったのかな?
ボケちゃったのかな?
707デフォルトの名無しさん
2019/06/01(土) 16:40:59.16ID:vdsZQvk5 えっそうなの?
C++でジェネリクスてtemplate使うから継承とか関係なくね
例えば実数と虚数に対応するplus関数を作るとしてどういう実装を想定してんの
C++でジェネリクスてtemplate使うから継承とか関係なくね
例えば実数と虚数に対応するplus関数を作るとしてどういう実装を想定してんの
708デフォルトの名無しさん
2019/06/01(土) 18:04:51.32ID:ws//1RZ4 >>707
テンプレートによるstructual subtypingはポリモーフィズムの実装の一種だよ
テンプレートによるstructual subtypingはポリモーフィズムの実装の一種だよ
709デフォルトの名無しさん
2019/06/01(土) 18:35:49.34ID:y869pNJN conceptはともかく現行のc++のそれを構造的部分型とは言いたくない気持ちがあるのは分からないではない
710デフォルトの名無しさん
2019/06/01(土) 20:21:39.08ID:HfNJIaau マルチエージェントシミュレーションをしたいんですけど、環境と個々のエージェントのクラスはどういった関係で持てばいいんでしょうか
現在はエージェント・環境の全部のインスタンスを進行を行うクラスに持たせています
しかし個々のエージェントが相互の情報を知りたいときに相互にアクセスできるようにするにはどうしたらいいでしょうか?
全てのエージェントが全てのエージェントの参照を手にするのはどこで書き換えが起こるか分からなくなるのでしたくありません
現在はエージェント・環境の全部のインスタンスを進行を行うクラスに持たせています
しかし個々のエージェントが相互の情報を知りたいときに相互にアクセスできるようにするにはどうしたらいいでしょうか?
全てのエージェントが全てのエージェントの参照を手にするのはどこで書き換えが起こるか分からなくなるのでしたくありません
711デフォルトの名無しさん
2019/06/01(土) 20:32:54.41ID:ws//1RZ4 >>710
お前は街にいる人間全員のパンツの柄を知っているのか?
意味のあるシミュレーションをやるからにはエージェントが知ることのできる情報の範囲や内容は明確に定義されていなければならないはずだろう
その定義に従った情報を取得する手段がエージェントに提供されていればよい
お前は街にいる人間全員のパンツの柄を知っているのか?
意味のあるシミュレーションをやるからにはエージェントが知ることのできる情報の範囲や内容は明確に定義されていなければならないはずだろう
その定義に従った情報を取得する手段がエージェントに提供されていればよい
712デフォルトの名無しさん
2019/06/01(土) 20:55:47.81ID:HfNJIaau 例えば互いの距離を知りたい場合どうすればいいですか?
713蟻人間 ◆T6xkBnTXz7B0
2019/06/01(土) 21:01:47.55ID:O6/ikTFN GPSで二つの位置を測定して、その差を求める。
714デフォルトの名無しさん
2019/06/01(土) 21:14:48.00ID:QKlis6p8 二人の心の距離は測れますか
715デフォルトの名無しさん
2019/06/01(土) 21:14:55.91ID:wq+pItFK >>712
神クラスが更新対象のエージェントと周囲の各エージェントとの距離を予め計算し、更新対象のエージェントに計算結果のセットを渡す
そして更新対象エージェントはその結果セットの内容のみに従った行動をするだけ
それをエージェント毎、ステップ毎に繰り返す
実際に必要とされるまで計算を遅延する等、効率化のための実装の工夫は必要だろうけどね
神クラスが更新対象のエージェントと周囲の各エージェントとの距離を予め計算し、更新対象のエージェントに計算結果のセットを渡す
そして更新対象エージェントはその結果セットの内容のみに従った行動をするだけ
それをエージェント毎、ステップ毎に繰り返す
実際に必要とされるまで計算を遅延する等、効率化のための実装の工夫は必要だろうけどね
716デフォルトの名無しさん
2019/06/01(土) 23:30:04.77ID:vdsZQvk5 あらゆる数値型二つを引数にとるdistance関数を定義しろ
あとは二人の心の位置を表す型で特殊化しろ
あとは二人の心の位置を表す型で特殊化しろ
717デフォルトの名無しさん
2019/06/02(日) 10:02:04.84ID:+QRUS/U1 STGの当たり判定やガンパレの頭から伸びるラインだろ
神のような仲介者mediatorを置けばいい
神のような仲介者mediatorを置けばいい
718デフォルトの名無しさん
2019/06/02(日) 11:00:43.72ID:JfX2j2vB >互いの距離
<<質問の意味不明。再入力せよ>>
<<質問の意味不明。再入力せよ>>
719デフォルトの名無しさん
2019/06/02(日) 11:44:35.03ID:JfX2j2vB 神クラスが全エージェント間の距離を計算し続けるのはエージェントN個の完全グラフの枝
N*(N-1)/2個の長さを更新し続けるということであっていかにも無駄が大きい少なくともエー
ジェントが置かれる環境のデータ表現と「互い」とは何かが定義されねばならないありがちな
環境表現としては二次元座標のリストとか正方形や六角形のセル表現とかがありがちで「
互い」というのは普通はエージェントの感覚器と環境(遮蔽物とか)とのインタラクションで規
定されるように作るからそういったブツもシミュレートせよ
N*(N-1)/2個の長さを更新し続けるということであっていかにも無駄が大きい少なくともエー
ジェントが置かれる環境のデータ表現と「互い」とは何かが定義されねばならないありがちな
環境表現としては二次元座標のリストとか正方形や六角形のセル表現とかがありがちで「
互い」というのは普通はエージェントの感覚器と環境(遮蔽物とか)とのインタラクションで規
定されるように作るからそういったブツもシミュレートせよ
720デフォルトの名無しさん
2019/06/02(日) 14:25:56.91ID:RszfEHjQ >>714
まずは心の距離を定義するところからはじめよう
まずは心の距離を定義するところからはじめよう
721デフォルトの名無しさん
2019/06/02(日) 15:22:27.64ID:aSoefH8n 質問よろしいでしょうか?CORBAってもう古いですか?
CORBAのサンプルをこねくり回して送受信するオブジェクトを2つと一時停止や終了をコントロールする
オブジェクトを作ったのですが、お互いに送受信すると思ったら片方が送信しまくって受信が検出できな
いようで困ってます。送信を止めると前に送ったものを受信します。
送信する時に少しsleepを入れると遅いですが思った通りの動きになります。
出来ればsleepなしで動いてほしいのですが、omniORBって同時に送受信できないのでしょうか?
CORBAのサンプルをこねくり回して送受信するオブジェクトを2つと一時停止や終了をコントロールする
オブジェクトを作ったのですが、お互いに送受信すると思ったら片方が送信しまくって受信が検出できな
いようで困ってます。送信を止めると前に送ったものを受信します。
送信する時に少しsleepを入れると遅いですが思った通りの動きになります。
出来ればsleepなしで動いてほしいのですが、omniORBって同時に送受信できないのでしょうか?
722デフォルトの名無しさん
2019/06/02(日) 21:49:55.34ID:a7zvk5vs CORBAの動きはよく分からんあれ本当にまともに動くのか
723デフォルトの名無しさん
2019/06/03(月) 21:34:05.54ID:76rl+S7D d1の実部 d1の虚部
d2の実部 d2の虚部
...
か
d1
d2
...
というフォーマットのファイル(の名前)が与えられたときに、前者なら複素数として、後者なら実数として読んで vector に格納する関数ってどう書くべきでしょうか
d2の実部 d2の虚部
...
か
d1
d2
...
というフォーマットのファイル(の名前)が与えられたときに、前者なら複素数として、後者なら実数として読んで vector に格納する関数ってどう書くべきでしょうか
724デフォルトの名無しさん
2019/06/03(月) 22:02:24.30ID:NMMhu3n8 auto f(std::filesystem::path const& n)
{
using T=double;
auto ret=
std::vector<std::complex<T>>{};
std::ifstream in(n);
std::string line;
while(std::getline(in,s)) {
std::istringstream ss(s);
T r{},i{};
ss >> r >> i;
ret.emplace_back(r,i);
}
rerurn ret;
}
{
using T=double;
auto ret=
std::vector<std::complex<T>>{};
std::ifstream in(n);
std::string line;
while(std::getline(in,s)) {
std::istringstream ss(s);
T r{},i{};
ss >> r >> i;
ret.emplace_back(r,i);
}
rerurn ret;
}
725デフォルトの名無しさん
2019/06/04(火) 07:18:40.68ID:mXL6ajVk726デフォルトの名無しさん
2019/06/04(火) 11:04:36.97ID:stwnRIgs 【速報】金券五百円分とすかいらーく優侍券をすぐもらえる
https://pbs.twimg.com/media/D8I_oeBUIAc0a-m.jpg
@ スマホでたいむばんくを入手
A 会員登録を済ませる
B マイページへ移動する
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)
今なら更に4日18時までの登録で2倍の600円の紹介金を入手
クオカードとすかいらーく優待券を両方ゲットできます。
数分で出来ますのでぜひお試し下さい
https://pbs.twimg.com/media/D8I_oeBUIAc0a-m.jpg
@ スマホでたいむばんくを入手
A 会員登録を済ませる
B マイページへ移動する
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)
今なら更に4日18時までの登録で2倍の600円の紹介金を入手
クオカードとすかいらーく優待券を両方ゲットできます。
数分で出来ますのでぜひお試し下さい
727デフォルトの名無しさん
2019/06/04(火) 12:18:01.44ID:ZmMHo7YV valgrindって今も使われてますか?
通信にBoost.MPI、ファイル入出力にHDF5を使う並列プログラムをInfinibandなネットワーク環境で走らせてるんですが
valgrindにかけるとアホみたいにエラーが出てうんざりします。
シコシコSuppression Fileを用意するしかないんですかね
通信にBoost.MPI、ファイル入出力にHDF5を使う並列プログラムをInfinibandなネットワーク環境で走らせてるんですが
valgrindにかけるとアホみたいにエラーが出てうんざりします。
シコシコSuppression Fileを用意するしかないんですかね
728デフォルトの名無しさん
2019/06/04(火) 13:24:01.81ID:iQLgDYhZ >>726
早速入れた
早速入れた
729デフォルトの名無しさん
2019/06/04(火) 16:02:32.14ID:puihIuc4 vectorなりstringなりの各要素をfor文で回すとき何も考えずに例えば
for(int i = 0; i < v.size(); ++i)みたいなコード書いてたんだけどさ
C++プライマーで勉強してたらやっぱsize_typeとかautoとかイテレーターとか使ったほうがいいのかなぁって
signedかunsignedかなんてまず問題にならないようなちょっとしたループでも気をつけるべき?気をつけてます?
for(int i = 0; i < v.size(); ++i)みたいなコード書いてたんだけどさ
C++プライマーで勉強してたらやっぱsize_typeとかautoとかイテレーターとか使ったほうがいいのかなぁって
signedかunsignedかなんてまず問題にならないようなちょっとしたループでも気をつけるべき?気をつけてます?
730デフォルトの名無しさん
2019/06/04(火) 16:10:21.98ID:uZb76vTJ 全要素ならrange-based forは便利。
731デフォルトの名無しさん
2019/06/04(火) 18:48:19.92ID:Rd1vYitp 男は黙ってfor eachやぞ
732デフォルトの名無しさん
2019/06/04(火) 19:03:30.86ID:payOgJqe for eachは環境依存では
733デフォルトの名無しさん
2019/06/04(火) 19:17:46.45ID:Gdf9cmgA 要素インデックスを表現する変数にはint型を使わずsize_t型を使うようにする、とかかな。
nposによる未検出判定があるから仕方なしにだけど。
nposによる未検出判定があるから仕方なしにだけど。
734デフォルトの名無しさん
2019/06/04(火) 20:55:52.96ID:5jXXyAl7 んなくだらんことで悩むくらいならその外側で監視するコードでも組んだ方が100倍生産的だわ。
735デフォルトの名無しさん
2019/06/04(火) 21:36:28.65ID:u5rIm+gJ ループ変数にsize_t使うのを徹底しようと思い立ったことも昔あったけど
operator[]とかにsize_t変数入れると「intじゃない!!!ムキー!!!」って警告ほざくクソライブラリがこの世に多すぎて挫折した
operator[]とかにsize_t変数入れると「intじゃない!!!ムキー!!!」って警告ほざくクソライブラリがこの世に多すぎて挫折した
736デフォルトの名無しさん
2019/06/04(火) 21:46:44.91ID:Gdf9cmgA 今や64bitコンパイラが普通だからintよりも暗黙な64bit対応としてsize_tを使うこと増えたんじゃないかな。
intみたいな32bit変数のままだとコンパイル時に警告が大量に出るし、とりあえず無難にsize_tにしとくわ的な感じになってる。
intみたいな32bit変数のままだとコンパイル時に警告が大量に出るし、とりあえず無難にsize_tにしとくわ的な感じになってる。
737デフォルトの名無しさん
2019/06/04(火) 22:05:00.56ID:sAkXOF3J size_tは符号ありにすべきだった
と誰か反省してたよな
ホントめんどくさい
と誰か反省してたよな
ホントめんどくさい
738デフォルトの名無しさん
2019/06/04(火) 22:10:32.07ID:ZspfbBdH intが64ビットになる日はいつですか
739デフォルトの名無しさん
2019/06/04(火) 22:15:44.59ID:5jXXyAl7 その前にビットサイズ付きintでかかれるケースが増えるだろ。
740デフォルトの名無しさん
2019/06/04(火) 22:24:52.24ID:payOgJqe じゃあ128bit整数はいつですか
741デフォルトの名無しさん
2019/06/04(火) 23:51:58.43ID:Q7pPWYoh なんでお前らの職場って大卒欲しがるの?
742デフォルトの名無しさん
2019/06/04(火) 23:57:38.92ID:V/nSGYnK 修士の方が多くね?
743デフォルトの名無しさん
2019/06/05(水) 00:02:44.18ID:4AufAgsU BigInteger書いてるんだけど、補数表現がわけわかめで死にそうになってる。
ウィキペディア頼りで加減算はできたけど、掛け算どうやるねん。
そこで、補数で小学生にもわかるレベルの補数表現の解説プリーズ。
ウィキペディア頼りで加減算はできたけど、掛け算どうやるねん。
そこで、補数で小学生にもわかるレベルの補数表現の解説プリーズ。
744デフォルトの名無しさん
2019/06/05(水) 00:24:44.84ID:oecfF/bP そのままunsigned同士の掛け算すればいいんじゃね?
で長くなったbit数の結果からMSBから変わる直前まで好きなように切り詰める。
で長くなったbit数の結果からMSBから変わる直前まで好きなように切り詰める。
745デフォルトの名無しさん
2019/06/05(水) 01:13:53.17ID:UjRB/6p5 >>743
とりあえず4bitで正数、負数を使った四則演算を手で紙に書いて解いてけば理解できないかな
とりあえず4bitで正数、負数を使った四則演算を手で紙に書いて解いてけば理解できないかな
746デフォルトの名無しさん
2019/06/05(水) 04:56:49.99ID:y/B41+FI コピーコンストラクタを避ける目的でswap使うことってありますか?
747デフォルトの名無しさん
2019/06/05(水) 09:35:36.43ID:BFsqA4Jd748デフォルトの名無しさん
2019/06/05(水) 10:08:32.94ID:2Gd2m+Lo 会社に行っても仕事しないのに、リモートワークとか無理だわ
749デフォルトの名無しさん
2019/06/05(水) 12:06:46.64ID:LHcMHkph 給料は働いた分だけでいいならリモートワークやりたい
750デフォルトの名無しさん
2019/06/05(水) 16:43:40.53ID:gnp+gTKs751デフォルトの名無しさん
2019/06/05(水) 17:11:31.00ID:4AufAgsU 743です。
解説ありがとう。理解できない頭をボンバヘッしたい感じです。
しばらく凍結させるので供養しておきます。
供養:https://dotup.org/uploda/dotup.org1865161.zip
解説ありがとう。理解できない頭をボンバヘッしたい感じです。
しばらく凍結させるので供養しておきます。
供養:https://dotup.org/uploda/dotup.org1865161.zip
752デフォルトの名無しさん
2019/06/05(水) 17:22:41.48ID:EHQtou0g void func(int& n){...}
int main(){int a = 0; func(a)}
こんな感じで関数の引数が参照のとき呼び出す側は変数そのまま突っ込みますよね
これなんで&aにしないんですかね。型がちげーよって怒られそうなもんですが
基本的なことだと思うんですけどどうもググっても大丈夫な理由が見つからないもので
そもそも
int val = 0;
int& refval = val;
みたいな書き方もしますよね。やっぱり左右で型違うよねって
ポインタならint* p pval = &valって&つけるのに。どうなってんでしょ
int main(){int a = 0; func(a)}
こんな感じで関数の引数が参照のとき呼び出す側は変数そのまま突っ込みますよね
これなんで&aにしないんですかね。型がちげーよって怒られそうなもんですが
基本的なことだと思うんですけどどうもググっても大丈夫な理由が見つからないもので
そもそも
int val = 0;
int& refval = val;
みたいな書き方もしますよね。やっぱり左右で型違うよねって
ポインタならint* p pval = &valって&つけるのに。どうなってんでしょ
753デフォルトの名無しさん
2019/06/05(水) 17:38:39.24ID:W6wnsWg/ 後付けの機能だから考えても仕方ないぞ
754蟻人間 ◆T6xkBnTXz7B0
2019/06/05(水) 17:58:17.41ID:keYZi/8b 型に互換性があるから。
755デフォルトの名無しさん
2019/06/05(水) 18:58:47.42ID:LHcMHkph >>750
ネコぱらがアホみたいに売れたから気前よくなってる可能性
ネコぱらがアホみたいに売れたから気前よくなってる可能性
756デフォルトの名無しさん
2019/06/05(水) 19:47:28.87ID:vfI9OlW2 template <auto N>とかできるんだな。
757デフォルトの名無しさん
2019/06/05(水) 23:39:10.84ID:g8AzjXwK カッコつけずに byref とか予約語作ればよかったんだよ。
同様に関数の後に=0でpure virtualとかバカジャネーノ。
同様に関数の後に=0でpure virtualとかバカジャネーノ。
758デフォルトの名無しさん
2019/06/05(水) 23:51:08.01ID:Oo3xyqZm &&でmoveもあるしね
759デフォルトの名無しさん
2019/06/05(水) 23:55:20.60ID:PbZwo6fr 参照ってもともと演算子オーバーロードのための機能なので
呼び出し側でなんかさせるわけには行かなかったんだよ
呼び出し側でなんかさせるわけには行かなかったんだよ
760デフォルトの名無しさん
2019/06/06(木) 00:50:27.07ID:owYx3C4X >>759
参照とオーバーロードにどういう関係がありますのん?
参照とオーバーロードにどういう関係がありますのん?
761デフォルトの名無しさん
2019/06/06(木) 00:51:47.37ID:vlcJQGqo 専門家が深く考えて議論して決めたことを素人が批判してて草
762デフォルトの名無しさん
2019/06/06(木) 01:17:25.71ID:u8n9IUq9 >>752は、operator->()をみたらしぬ
763デフォルトの名無しさん
2019/06/06(木) 03:17:03.81ID:BJpCSJfe =0とか分かりやすすぎ
764デフォルトの名無しさん
2019/06/06(木) 06:49:58.29ID:VYs0Fl5K765デフォルトの名無しさん
2019/06/06(木) 07:01:39.10ID:PF44iNdb Cの古い文法を(ほぼ)そのまま残した上にC++を作ったから
いきなりC++から勉強すると気色悪いと感じる面もあるかもな。
ポインタと参照が同時期に言語に入ってたら、
int a; // 通常の変数
int &ra = a; // 参照
int *pa = a; // &演算子なしで暗黙にポインタに変換
てな書き方になってたかも知れん。
void func(int n);
void func(int *pn);
void func(int &rn);
これらは曖昧で解決できない、になってたかも。
いきなりC++から勉強すると気色悪いと感じる面もあるかもな。
ポインタと参照が同時期に言語に入ってたら、
int a; // 通常の変数
int &ra = a; // 参照
int *pa = a; // &演算子なしで暗黙にポインタに変換
てな書き方になってたかも知れん。
void func(int n);
void func(int *pn);
void func(int &rn);
これらは曖昧で解決できない、になってたかも。
766デフォルトの名無しさん
2019/06/06(木) 08:16:40.59ID:YZj7S1bc >>765
ポインタのポインタやキャストのこと考えたら、その例のような暗黙のポインタ変換とか持ち込むとかえって混乱やミスの元になりそうだし、現状の仕様もしかたないものかなと思うよ
ポインタのポインタやキャストのこと考えたら、その例のような暗黙のポインタ変換とか持ち込むとかえって混乱やミスの元になりそうだし、現状の仕様もしかたないものかなと思うよ
767デフォルトの名無しさん
2019/06/06(木) 08:40:36.13ID:p2k3Z1kO >>766
Go使いやすいよ
Go使いやすいよ
768デフォルトの名無しさん
2019/06/06(木) 10:41:12.25ID:VbLHIWhF 参照引数に結果を代入とかたまに使うけど呼び出す側から分かりやすいようにC#のout修飾子とかほしい
769デフォルトの名無しさん
2019/06/06(木) 11:48:51.90ID:CNru8FH6 C#のoutは言われてみれば確かにって感じだけど、そうやって問題提起されるまではそもそも当然すぎて問題だと思われてなかったんだろうね
引数に代入することで呼出元へ値を返すのってfortranとかの時代から続く悪しき伝統だから
引数に代入することで呼出元へ値を返すのってfortranとかの時代から続く悪しき伝統だから
770デフォルトの名無しさん
2019/06/06(木) 11:53:56.84ID:fZVA+Le5 分配束縛の導入が必要だね
あと、NRVOの義務化
あと、NRVOの義務化
771デフォルトの名無しさん
2019/06/06(木) 12:07:43.67ID:bIT6TIHx 仮引数名をoutにしとけばいいだけでは?
772デフォルトの名無しさん
2019/06/06(木) 12:09:14.70ID:G/M7SWSB >>768
それconst付きかどうかで判断すべきと言うか判断するだろ?
それconst付きかどうかで判断すべきと言うか判断するだろ?
773デフォルトの名無しさん
2019/06/06(木) 12:26:08.08ID:qi/Zl49P 世の中には引数にconst付けない糞ライブラリがあるんですよ
774デフォルトの名無しさん
2019/06/06(木) 13:52:14.20ID:CNru8FH6 >>772
問題はそこじゃない
呼出元のコードだけを見たときにソース上で区別がつかないだろ
C#のoutは呼出元にも付ける必要があるんだよ
C++でも出力引数に参照渡しを使うことは禁止しポインタを使う流派があるが、
あれも呼出元を見たとき書換えの可能性の有無を&の有無だけで判別できるようにするのが目的
問題はそこじゃない
呼出元のコードだけを見たときにソース上で区別がつかないだろ
C#のoutは呼出元にも付ける必要があるんだよ
C++でも出力引数に参照渡しを使うことは禁止しポインタを使う流派があるが、
あれも呼出元を見たとき書換えの可能性の有無を&の有無だけで判別できるようにするのが目的
775デフォルトの名無しさん
2019/06/06(木) 17:27:39.41ID:G/M7SWSB776デフォルトの名無しさん
2019/06/06(木) 17:40:39.24ID:AdzMW0EL class Person
{
public:
Person& set(int);
private:
int age;
}
Person& Person::set(int num)
{
age = num;
return *this;
}
*thisを返す関数ってことで大雑把にこんな感じのサンプルが本に出てました
メンバーセットするだけならわざわざ本体の参照返す必要無くない?voidで良くない?って思ったんですけど何かメリットってありますか?
{
public:
Person& set(int);
private:
int age;
}
Person& Person::set(int num)
{
age = num;
return *this;
}
*thisを返す関数ってことで大雑把にこんな感じのサンプルが本に出てました
メンバーセットするだけならわざわざ本体の参照返す必要無くない?voidで良くない?って思ったんですけど何かメリットってありますか?
777デフォルトの名無しさん
2019/06/06(木) 17:45:07.81ID:Yj1l17Nf 基本的には複数の値を戻したいならtuple返すべきだし、オブジェクトの状態を書き換える関数はそのオブジェクトのメンバにするべき
データ構造体を一部書き換えるような処理は、書き換えじゃなくて新しいのを作って返した方が読みやすいし効率的なことも多い
全部が全部そうとは言わないけど、参照引数は書き換え分かりにくいってブーブー言う奴のコードって大体汚いイメージある
データ構造体を一部書き換えるような処理は、書き換えじゃなくて新しいのを作って返した方が読みやすいし効率的なことも多い
全部が全部そうとは言わないけど、参照引数は書き換え分かりにくいってブーブー言う奴のコードって大体汚いイメージある
778デフォルトの名無しさん
2019/06/06(木) 17:49:48.99ID:Yj1l17Nf >>776
operator=系は組み込み演算子と挙動合わせるために*thisを返すことが多い
今はあんまり推奨されないけどif(a=foo())とか書けるようにね
その例はif(p.set(40))とか書きたいのか、operator=系の話と混同してよく分からずに適当に書いてるか、そのどっちか
operator=系は組み込み演算子と挙動合わせるために*thisを返すことが多い
今はあんまり推奨されないけどif(a=foo())とか書けるようにね
その例はif(p.set(40))とか書きたいのか、operator=系の話と混同してよく分からずに適当に書いてるか、そのどっちか
779デフォルトの名無しさん
2019/06/06(木) 17:52:12.08ID:zzmbMYQ4■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- さかまた「過呼吸になった」かなた「耳聞こえない」ござる「声出ない」まつり「ご飯食べれない」
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- くそしてかがやけ
- 🎌日本の地震をお祝いします👏👏👏✨
- お茶だと思って飲んだらションベンだった
