エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります
コードを貼れる所
http://codepad.org/
https://ideone.com/
前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
探検
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 06:54:38.08ID:6xUIrXDu
143デフォルトの名無しさん
2019/08/07(水) 05:19:14.35ID:v77Wmobb あるいはそれを許可するコンパイルオプション付けるか
144デフォルトの名無しさん
2019/08/07(水) 08:50:49.29ID:F5bbfK8A 文字列リテラルの型はconstな文字列の配列です
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#encoding-scheme
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml#encoding-scheme
145デフォルトの名無しさん
2019/08/07(水) 10:29:55.43ID:5hdKKXYg >>141
それをやってダメだったときのエラーメッセージを張ろう
それをやってダメだったときのエラーメッセージを張ろう
146デフォルトの名無しさん
2019/08/07(水) 10:45:14.88ID:9Ff0DYo3 >>139
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC"; // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
C/C++の言語仕様的には
const char *name="ABC";
で行ける可能性は高いんですが、分かりやすさのためには、
static const char szName[] ="ABC"; // szName[4] という配列を "ABC",0 で初期化。
const char *name =&szName[0];
とするものお勧めです。
147デフォルトの名無しさん
2019/08/07(水) 11:36:34.89ID:Io4EJaZl 少なくとも>>139のリンクにあるコードはchar*にリテラルを入れようとしてるのでNG
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
constをつけても駄目なのは生成後に代入しようとしてるから
てか意味もなくグローバルスコープの構造体とかやめろ
148デフォルトの名無しさん
2019/08/07(水) 17:26:37.26ID:Io4EJaZl あと特に理由がないなら文字列はstd::stringを使うべき
C言語じゃないんだから
C言語じゃないんだから
149デフォルトの名無しさん
2019/08/07(水) 17:27:18.45ID:Io4EJaZl ↑C言語じゃないんだったら
150デフォルトの名無しさん
2019/08/08(木) 08:01:13.41ID:kZ+216R/ >>147
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
構造体メンバに
const char *name;
と書いていて、構造体を生成後に後から name メンバに
Cの文字列リテラルの先頭アドレスを代入することは、
C/C++の言語仕様的にはいけるはずです。
なぜなら、xxx.name のように書いた場合、コンパイラの内部的には
const char* 型の左辺値(代入先)が有るのと同じように扱われるので、
ローカル変数に const char *aaa; aaa = "xxx"; と書いた場合と変わらなく
なるはずですから、C/C++ の言語仕様的には。
151デフォルトの名無しさん
2019/08/08(木) 16:00:04.26ID:uMVCdDWb 独自のクラスに比較演算子==を実装する時、クラス内に定義するのとグローバルで定義するのとでは、実装の仕方以外に違いがあるのでしょうか?
また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか
ちなみに使用しているのはC++11です
また、例えば独自クラスとintの比較演算子==を実装する場合は、左辺にintがある場合と右辺にintがある場合の二つを用意する必要があるのでしょうか
ちなみに使用しているのはC++11です
152デフォルトの名無しさん
2019/08/08(木) 16:20:50.94ID:5ZN2ymvH それくらいすぐ作れるんだからやってみればいいのでは
153デフォルトの名無しさん
2019/08/08(木) 16:35:41.72ID:uMVCdDWb >>152
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
これって自分でやったところで解決できる質問なのでしょうか?
もちろん既に自分で実装していますが、自分で使ってみた感じではクラスでもグローバルでも一切の違いがないと「思います」
左辺と右辺のintについても、わざわざ2つの演算子を定義するしか方法がないと「思います」
154デフォルトの名無しさん
2019/08/08(木) 23:38:32.45ID:gitRBAeC クラス内に定義するのとグローバルで定義するのとってどういう意味でだ?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
クラスのメンバ関数と普通の関数として定義するのとってこと?
あるいはクラスのstaticメンバ関数と普通の関数?
そういうのとは違ってクラス定義の中にメンバ関数の定義も書くのと
クラス定義の中では宣言だけで外に定義を書くのとってこと?
155デフォルトの名無しさん
2019/08/09(金) 01:10:13.49ID:QHhCdgXb >>151
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
クラス内に定義すると当然メンバー関数扱いなるのでprivateメンバーにアクセスできるが、左辺を自クラス、右辺をintにoperatorしか定義できない。
クラス外に定義すると、そのままではprivateメンバーにアクセス出来ないが、左辺、右辺どっちでも自由に定義できる。
156デフォルトの名無しさん
2019/08/09(金) 01:23:46.70ID:QHhCdgXb >>151
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
相手がintの場合はわざわざoperator==を定義しなくても、intへの型変換operatorを定義すれば勝手に変換してくれるので、そっちの方が楽だと思う。
157デフォルトの名無しさん
2019/08/09(金) 04:08:33.63ID:P26n3T2n158デフォルトの名無しさん
2019/08/09(金) 11:09:20.14ID:0rjrOlB6159デフォルトの名無しさん
2019/08/10(土) 01:46:44.99ID:07GKNAvB 質問ですがリフレクションってのは何ナノですか?
これがないのがC++の欠点って言われてるそうですが
これがないのがC++の欠点って言われてるそうですが
160デフォルトの名無しさん
2019/08/10(土) 02:13:52.05ID:0AyH8q+k ググって何がわからなかったのか書けよ
そういう気配り謙虚さがないからお前は伸びないんだよ
そういう気配り謙虚さがないからお前は伸びないんだよ
161デフォルトの名無しさん
2019/08/11(日) 09:19:19.57ID:tY3BhpyE162デフォルトの名無しさん
2019/08/12(月) 16:51:27.60ID:dO9cEAMi >>151
それよりもその定義をどのファイルに置いとくかっていうディレクトリ構成のが重要。
それよりもその定義をどのファイルに置いとくかっていうディレクトリ構成のが重要。
163デフォルトの名無しさん
2019/08/12(月) 16:56:28.87ID:FzF2lTUV ある型TでT[]とT*とTって何が違うの??
164デフォルトの名無しさん
2019/08/13(火) 00:33:44.36ID:DG2S/APd T[]は配列、Tなものが並んだもの
T*はポインタ、Tなものを指すもの
Tは、Tそのものとしか
配列は随所でポインタに変換されるから混同するのもわからんでもないが
T*はポインタ、Tなものを指すもの
Tは、Tそのものとしか
配列は随所でポインタに変換されるから混同するのもわからんでもないが
165デフォルトの名無しさん
2019/08/13(火) 01:11:53.36ID:7xRhzmxz じゃあ配列を関数の実引数で与えるときに[]…って書かないで*ってするのはなんで??
166デフォルトの名無しさん
2019/08/13(火) 03:45:41.66ID:4ID4APxI 配列を渡すんじゃなくて配列を指すものを渡すため
167デフォルトの名無しさん
2019/08/13(火) 05:41:26.72ID:DG2S/APd 配列を関数の実引数で与えるときに*なんてしない
int arr[NUM] = 0; func(arr, NUM);
普通こう書く
cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
関数に配列そのものを渡すには構造体で包むなりしないとならない
面倒なんで普通はそんなことはしなくて、先頭要素へのポインタとサイズを渡す
上記func(arr, NUM);も、本当は配列そのものを渡したいんだけどできないから
そういう意味だと解釈される
int arr[NUM] = 0; func(arr, NUM);
普通こう書く
cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
関数に配列そのものを渡すには構造体で包むなりしないとならない
面倒なんで普通はそんなことはしなくて、先頭要素へのポインタとサイズを渡す
上記func(arr, NUM);も、本当は配列そのものを渡したいんだけどできないから
そういう意味だと解釈される
168デフォルトの名無しさん
2019/08/13(火) 07:20:08.26ID:j44aRWG6 つまり、めんどくせぇし表現乱立するくらいならvectorなりarray使えってことだな
169デフォルトの名無しさん
2019/08/13(火) 16:33:08.61ID:qE6XkMY1 mallocした配列なら*
二次元配列なら**
三次元なら***
すんごく分かり易いじゃん
二次元配列なら**
三次元なら***
すんごく分かり易いじゃん
>>167
>cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
私にいわせると、C の配列の扱い方こそ正義であり、まるまま渡せるという構造体の方が正義に反するやりかただと考えています
構造体の扱いに関しては、K&R1 のままの方が良く K&R2 は改悪だったと思っています
>cでは、配列は構造体とは違い「満足なオブジェクト」ではないんだ
私にいわせると、C の配列の扱い方こそ正義であり、まるまま渡せるという構造体の方が正義に反するやりかただと考えています
構造体の扱いに関しては、K&R1 のままの方が良く K&R2 は改悪だったと思っています
171デフォルトの名無しさん
2019/08/13(火) 18:08:35.02ID:rOcNi2je >>170
お前の正義はどうでもいい
お前の正義はどうでもいい
172デフォルトの名無しさん
2019/08/14(水) 07:35:10.61ID:R+Q0cUgU >>168
乱立とかちょっと何言ってるかわかんない
乱立とかちょっと何言ってるかわかんない
173デフォルトの名無しさん
2019/08/14(水) 10:53:25.60ID:K0s/BHfQ Cだけだといろいろ物足りないから
C++ をちょっと便利な C として
手を付けるのは あり?
C++ をちょっと便利な C として
手を付けるのは あり?
174デフォルトの名無しさん
2019/08/14(水) 11:07:19.09ID:ULyjZxwK Better Cっていう用語があるくらい一般的な使い方です
>>173
みんなそうやって C から C++ に移ってきたのだと、私は思います
みんなそうやって C から C++ に移ってきたのだと、私は思います
176デフォルトの名無しさん
2019/08/14(水) 19:59:27.72ID:H7xh21M5 >>175
お前はC++の機能はまともに使えてないけどな
お前はC++の機能はまともに使えてないけどな
>>176
どんなところが「まともに使えていない」と感じられるものだったのでしょうか?
どんなところが「まともに使えていない」と感じられるものだったのでしょうか?
178デフォルトの名無しさん
2019/08/14(水) 21:53:50.90ID:xRZNaRgT いや、もうc言語とかいいじゃん、 c++使おうよ
配列で悩むのめんどくさくね?
配列のサイズ渡せないとか欠陥だからマジで
配列で悩むのめんどくさくね?
配列のサイズ渡せないとか欠陥だからマジで
179デフォルトの名無しさん
2019/08/15(木) 06:20:44.75ID:KtlbsHo8180デフォルトの名無しさん
2019/08/15(木) 07:46:25.74ID:xtiqLszO181デフォルトの名無しさん
2019/08/15(木) 08:00:09.50ID:KtlbsHo8 >>180
お前わざと条件増やしたろ?
お前わざと条件増やしたろ?
182デフォルトの名無しさん
2019/08/15(木) 23:28:39.14ID:/raW50Q0 メタプロなんてできない方がかえって生産性あがるわ。
カスが使うと無駄にモジュラリティーの低いもの作るだけ。
カスが使うと無駄にモジュラリティーの低いもの作るだけ。
>>182
貴重なお言葉恐悦至極に存じます、メタプロとかは私は一生理解できないと思っていますが、それでもいい、というお言葉ですよね…
貴重なお言葉恐悦至極に存じます、メタプロとかは私は一生理解できないと思っていますが、それでもいい、というお言葉ですよね…
184デフォルトの名無しさん
2019/08/16(金) 17:52:44.76ID:WXGx/ZZ4185デフォルトの名無しさん
2019/08/16(金) 18:07:14.43ID:w6EX52R7 つまりksかどうかを判定するにはメタプロさせてみればいい、ってこと?
186デフォルトの名無しさん
2019/08/16(金) 18:08:34.43ID:JO1Ik9g1 十分条件と必要条件でググって
187デフォルトの名無しさん
2019/08/16(金) 22:52:38.68ID:Y5iyjQTU189デフォルトの名無しさん
2019/08/16(金) 23:54:46.13ID:thOVjQYW >>183
理解の問題じゃなくてセンスの問題だつってんだよバカ。
理解の問題じゃなくてセンスの問題だつってんだよバカ。
>>189
そうですか、でも、それはそれで興味深いですね
センスの問題、ということは非言語領域的テーマだろうか、と推察しますが、
コンピューター言語という極めて形式的=言語的な領域の話にて非言語的概念が語られる、いや、それが最重要であるというところに奥の知れない「恐ろしさ」を予想します
そうですか、でも、それはそれで興味深いですね
センスの問題、ということは非言語領域的テーマだろうか、と推察しますが、
コンピューター言語という極めて形式的=言語的な領域の話にて非言語的概念が語られる、いや、それが最重要であるというところに奥の知れない「恐ろしさ」を予想します
191デフォルトの名無しさん
2019/08/17(土) 02:40:02.84ID:MepC3sRG (どうもコンパイル時最適化が効くからテンプレートメタプログラミングするって人がいないように思う)
192デフォルトの名無しさん
2019/08/17(土) 09:39:59.02ID:1UQd730E コンパイル時最適化て、C++の最適化は普通コンパイル時とリンク時だけやろ
>>192
リンク時に最適化するのですか?単にリンカがリンクするだけだと思っていましたが
リンク時に最適化するのですか?単にリンカがリンクするだけだと思っていましたが
194デフォルトの名無しさん
2019/08/17(土) 12:18:18.80ID:1UQd730E メジャーなコンパイラにはある機能だよ
リンク時最適化でggr
リンク時最適化でggr
195デフォルトの名無しさん
2019/08/17(土) 14:11:42.12ID:0hT5zrAG テンプレートのコンパイル時最適化なんてのはマクロ展開的な最適化をしてるだけ。
そんな最適化が必要な部分はもっと慎重に関数化するわ。
ただドヤリたいだけのバカがありがたがってるってのがよくわかる。
そんな最適化が必要な部分はもっと慎重に関数化するわ。
ただドヤリたいだけのバカがありがたがってるってのがよくわかる。
196デフォルトの名無しさん
2019/08/17(土) 15:01:36.23ID:uFx2S1XX マクロと違って型で挙動変えられるのが美味しいのに
197デフォルトの名無しさん
2019/08/17(土) 15:22:51.03ID:mvKCT7Z2 これまで何も考えずにC++で配列を使ってたんですけど
もしかしてC++で配列を使うのってナメられますか?
arrayやvectorなどでないとやはりコードのクオリティが下がることになってしまうのでしょうか?
もしかしてC++で配列を使うのってナメられますか?
arrayやvectorなどでないとやはりコードのクオリティが下がることになってしまうのでしょうか?
198デフォルトの名無しさん
2019/08/17(土) 15:52:09.37ID:BZ3r0cTp newからdeleteまでの間の例外処理に不備がないと自信があるなら生配列で構わん
199デフォルトの名無しさん
2019/08/17(土) 16:56:59.91ID:kME64/ZP200デフォルトの名無しさん
2019/08/17(土) 17:14:22.35ID:WCU4L4CL >>197
生配列とarrayやvectorのメリットデメリットや使い分けを理解せずに何も考えずにarrayやvectorにする方がいいらしいなんて理解の仕方ならクオリティは低いままだよ。
生配列とarrayやvectorのメリットデメリットや使い分けを理解せずに何も考えずにarrayやvectorにする方がいいらしいなんて理解の仕方ならクオリティは低いままだよ。
201デフォルトの名無しさん
2019/08/17(土) 18:13:22.13ID:1UQd730E202デフォルトの名無しさん
2019/08/18(日) 00:09:06.82ID:XCKtcmfj203デフォルトの名無しさん
2019/08/18(日) 08:44:15.16ID:vyOg2WJ0 >あんまり理解してないでしょ?
こっちの台詞だよ
必要とされたときに初めて実体化されるの
必要ないのに全ての型全ての組み合わせ用意してから削ってると思ってたのか
こっちの台詞だよ
必要とされたときに初めて実体化されるの
必要ないのに全ての型全ての組み合わせ用意してから削ってると思ってたのか
204デフォルトの名無しさん
2019/08/18(日) 09:58:09.36ID:S9bN8HAf >>197
「配列 キャッシュ効率」で調べると次のようなものが出てくる
平たく言うと「配列をキャッシュに乗せる」
プログラミング :: 高速なプログラムを書く為に :: メモリ
ttp://myoga.web.fc2.com/prog/cpp/opti02.htm
Processingで見るプログラミングスタイル七変化 - Qiita
ttps://qiita.com/FAL/items/19be333d55f7fcb1943a
プログラムを高速化する話
ttps://www.slideshare.net/KMC_JP/ss-45855264
「配列 キャッシュ効率」で調べると次のようなものが出てくる
平たく言うと「配列をキャッシュに乗せる」
プログラミング :: 高速なプログラムを書く為に :: メモリ
ttp://myoga.web.fc2.com/prog/cpp/opti02.htm
Processingで見るプログラミングスタイル七変化 - Qiita
ttps://qiita.com/FAL/items/19be333d55f7fcb1943a
プログラムを高速化する話
ttps://www.slideshare.net/KMC_JP/ss-45855264
205デフォルトの名無しさん
2019/08/18(日) 12:05:15.42ID:XCKtcmfj206デフォルトの名無しさん
2019/08/18(日) 12:24:08.36ID:vyOg2WJ0 変数(というよりテンプレート実引数)を特殊化なりオーバーロードなりで評価した結果コードが生成されない(テンプレートが実体化されない)のは最適化でも何でもない
207デフォルトの名無しさん
2019/08/18(日) 12:27:17.01ID:vyOg2WJ0 ただし、よくわかりもせずにテンプレートを持て囃したりC++歴数年でテンプレートに首突っ込む(しかも生産性ガン無視で)初心者が増えたのは俺も問題だと思う
208デフォルトの名無しさん
2019/08/18(日) 12:37:50.86ID:AmZy196G でもテンプレート便利じゃん
209デフォルトの名無しさん
2019/08/18(日) 12:52:38.69ID:rJ9LPM9I >>205
君の用語の使い方が独特で、君の思ってることを読み取れるエスパーは少ないって話だと思うよ。
マクロ展開の「実行評価」って何なの?
具体的な問題を挙げずに危険とかいうのは単なるFUDってやつじゃないの?
理解させるために言葉を工夫するつもりが無いなら黙ってくれていい。
君の用語の使い方が独特で、君の思ってることを読み取れるエスパーは少ないって話だと思うよ。
マクロ展開の「実行評価」って何なの?
具体的な問題を挙げずに危険とかいうのは単なるFUDってやつじゃないの?
理解させるために言葉を工夫するつもりが無いなら黙ってくれていい。
210デフォルトの名無しさん
2019/08/18(日) 18:15:25.68ID:XCKtcmfj211デフォルトの名無しさん
2019/08/18(日) 22:22:43.25ID:4oEGaRbg >>210
common lispで実行評価って、evaluationのことを言いたいのだろうか?それなら「評価」と訳されると思うけど、実行評価はググっても見当たらない。PDCAの用語と混同してるのではないかと思えてしまう。
common lispで実行評価って、evaluationのことを言いたいのだろうか?それなら「評価」と訳されると思うけど、実行評価はググっても見当たらない。PDCAの用語と混同してるのではないかと思えてしまう。
212デフォルトの名無しさん
2019/08/18(日) 23:03:24.76ID:Onid3Fuw lispがでてくるならこれはもう defmacro しかないんじゃないか?
213デフォルトの名無しさん
2019/08/18(日) 23:06:53.30ID:8LEpKI7v 用語でもめるくらいならサンプルコードでやれ
214デフォルトの名無しさん
2019/08/19(月) 01:57:01.62ID:DiXQVhta そやっ
common lisp言うたら相手びびるはずやっ
common lisp言うたら相手びびるはずやっ
215デフォルトの名無しさん
2019/08/19(月) 11:27:33.54ID:icNxZHqv まずはダイナミックとスタティックの違いがある
静的なものは未来永劫不動なので、一度作ったら未来でも一切変わらない
動的なものは「未来は不定である」「未来は誰にも分からない」という哲学あるいは神学から作られたので、未来に挙動が変わる
決定論的な未来の世界観では一度作ったらそれきり、静的なものが出来上がる
ここでいう決定は本当に神学で、全知全能の神を指している
未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
今分かることは動かす前に全部決め打ちすりゃーいい、ってのが静的だ
静的なものは未来永劫不動なので、一度作ったら未来でも一切変わらない
動的なものは「未来は不定である」「未来は誰にも分からない」という哲学あるいは神学から作られたので、未来に挙動が変わる
決定論的な未来の世界観では一度作ったらそれきり、静的なものが出来上がる
ここでいう決定は本当に神学で、全知全能の神を指している
未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
今分かることは動かす前に全部決め打ちすりゃーいい、ってのが静的だ
>>215
>未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
ラプラスの悪魔、という語句をご存知ですか?西洋人ですら「未来の事柄をあらかじめ」予測することはできない、と観念しているようですよ…
>未来の事柄があらかじめ全部分かっていれば、ダイナミックなことはしなくて良くなる、というのが、彼ら西洋人の究極の理想論
ラプラスの悪魔、という語句をご存知ですか?西洋人ですら「未来の事柄をあらかじめ」予測することはできない、と観念しているようですよ…
217入門
2019/08/19(月) 20:35:59.98ID:aCo9z6Zb 色んなサイトを見てC言語の文法を学習中なのですが構造体の自己参照のやり方がどうも分かりません。
かんたんな短いサンプルコードを使って教えてほしいです
よろしくお願い致します😪
かんたんな短いサンプルコードを使って教えてほしいです
よろしくお願い致します😪
218蟻人間 ◆T6xkBnTXz7B0
2019/08/19(月) 20:40:39.17ID:GYeBbzEk 構造体Aが内部に構造体Aを持つとすると、Aは無限の構造的ループを持つことになる。これはあり得ない。
自己参照するなら、Aのポインタを使わないといけない。
typedef struct A
{
struct A *next;
int value;
} A;
こんな感じになる。ポインタが分かっているなら、
A *a = (A *)calloc(1, sizeof(A));
a->next = NULL;
a->value = 666;
...
この変数aにさらに追加するなら、
A *b = (A *)calloc(1, sizeof(A));
a->next = b;
...
問題は破棄だが、自己参照をたどっていってすべてのAの実体に対して、
freeを呼ばないといけない。
自己参照するなら、Aのポインタを使わないといけない。
typedef struct A
{
struct A *next;
int value;
} A;
こんな感じになる。ポインタが分かっているなら、
A *a = (A *)calloc(1, sizeof(A));
a->next = NULL;
a->value = 666;
...
この変数aにさらに追加するなら、
A *b = (A *)calloc(1, sizeof(A));
a->next = b;
...
問題は破棄だが、自己参照をたどっていってすべてのAの実体に対して、
freeを呼ばないといけない。
219蟻人間 ◆T6xkBnTXz7B0
2019/08/19(月) 20:48:42.67ID:GYeBbzEk ただし、同じ実体に対して2回free関数を呼ぶことはできない。
また、解放した実体のメンバーは参照することができない。
参照すると、不正読み込みでプログラムが異常終了するかもしれない。
ということでパズルのように解放方法のアルゴリズムを考案しないといけない。
C言語というのは、そういうややこしさをはらんでいる。
また、解放した実体のメンバーは参照することができない。
参照すると、不正読み込みでプログラムが異常終了するかもしれない。
ということでパズルのように解放方法のアルゴリズムを考案しないといけない。
C言語というのは、そういうややこしさをはらんでいる。
220蟻人間 ◆T6xkBnTXz7B0
2019/08/19(月) 20:56:19.12ID:GYeBbzEk 1個追加したいときに、このようなコードをいちいち書くのは大変なので、
普通は「1個追加する」という動作を行う関数を用意する。
void add(A *a, int value)
{
A *b = (A *)calloc(1, sizeof(A));
b->next = NULL;
b->value = value;
a->next = b;
}
普通は「1個追加する」という動作を行う関数を用意する。
void add(A *a, int value)
{
A *b = (A *)calloc(1, sizeof(A));
b->next = NULL;
b->value = value;
a->next = b;
}
221デフォルトの名無しさん
2019/08/19(月) 21:05:52.16ID:thJnfNrr テンプレートの話題でlispの話題ならマクロの話ってピンとくるもんだと思ったが
結構バカが多いんだな。
結構バカが多いんだな。
222デフォルトの名無しさん
2019/08/19(月) 22:08:18.21ID:mpyM2QmS バカはお前だ
223入門
2019/08/19(月) 22:29:52.38ID:OunjwQY3224さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/08/19(月) 22:45:30.60ID:5pda5jNo calloc(1, sizeof(A))は、1*sizeof(A)バイトのメモリーブロックを確保し、ブロックをゼロでクリアする。そして先頭アドレスとしてvoid*型を返す。リファレンスをちゃんと読もう。全部書いてある。
225デフォルトの名無しさん
2019/08/20(火) 13:31:20.80ID:iQfxCe91 c++でanimal, dog, catなどのクラスを作ってオブジェクト指向の勉強してます.
dogとcatはanimalを継承するよくある例です.
適当にa[]という配列を切って,a[0]はdogのクラスでa[1]はcatのクラスで…
というようにしたいのですが,この配列a[]の型やaのクラスを指定するやり方が
分かりません.
最終的にはa[i].barkというようなことをやりたいです.
よくある質問だと思うのですが,適切な検索ワードが分からず困っています.
どうやったら良いかor適切なキーワードを教えてください.
dogとcatはanimalを継承するよくある例です.
適当にa[]という配列を切って,a[0]はdogのクラスでa[1]はcatのクラスで…
というようにしたいのですが,この配列a[]の型やaのクラスを指定するやり方が
分かりません.
最終的にはa[i].barkというようなことをやりたいです.
よくある質問だと思うのですが,適切な検索ワードが分からず困っています.
どうやったら良いかor適切なキーワードを教えてください.
226デフォルトの名無しさん
2019/08/20(火) 13:45:18.40ID:XxGMpj+X animalの配列にdog, catをアップキャストしてぶち込む
animal, dog, catのunionを作り、そのunionの配列を作る
animal, dog, catのunionを作り、そのunionの配列を作る
227デフォルトの名無しさん
2019/08/20(火) 13:52:03.45ID:XxGMpj+X 2つ目は違ったから忘れてくれ
228デフォルトの名無しさん
2019/08/20(火) 13:58:30.55ID:J42ZId0L >>226
さっぱり分かりませんがありがとうございます.これでgoogle先生に質問できます.
さっぱり分かりませんがありがとうございます.これでgoogle先生に質問できます.
229さまよえる蟻人間 ◆T6xkBnTXz7B0
2019/08/20(火) 14:40:59.88ID:UPm4IEm3 ポインタの配列にしてポリモーフィズム。
230sage
2019/08/20(火) 15:46:52.82ID:5Gd7p9P4 >>229
こんな感じですか?
push_backでエラーが出てコンパイル出来ませんが…
std::vector<std::unique_ptr<Animal>> a;
a.reserve(2);
a.push_back(std::make_unique<Dog>());
a.push_back(std::make_unique<Cat>());
こんな感じですか?
push_backでエラーが出てコンパイル出来ませんが…
std::vector<std::unique_ptr<Animal>> a;
a.reserve(2);
a.push_back(std::make_unique<Dog>());
a.push_back(std::make_unique<Cat>());
231デフォルトの名無しさん
2019/08/20(火) 15:47:51.55ID:KtaU4TpY 基底クラスの実体配列じゃ多分無理で
基底クラスのポインタ配列しかないと思うわー
基底クラスのポインタ配列しかないと思うわー
232225
2019/08/20(火) 16:04:10.66ID:5Gd7p9P4 ポインタの配列を作ったつもりだったんですが違うんですね....
誰か簡単なコード書いてくれませんか?
誰か簡単なコード書いてくれませんか?
233デフォルトの名無しさん
2019/08/20(火) 16:32:36.95ID:ixrUSoxU c++17ならstd::variantが使えそうだけどね。
234デフォルトの名無しさん
2019/08/20(火) 18:41:29.45ID:XxGMpj+X235デフォルトの名無しさん
2019/08/20(火) 19:03:13.66ID:KUiZK6p2 >>230
普通にとおるような
普通にとおるような
236デフォルトの名無しさん
2019/08/20(火) 19:04:40.28ID:KUiZK6p2237デフォルトの名無しさん
2019/08/20(火) 19:05:34.46ID:PwBGX6fG238デフォルトの名無しさん
2019/08/20(火) 19:54:26.69ID:vf53Ia55239デフォルトの名無しさん
2019/08/20(火) 20:23:10.77ID:QkieET4w つか、エラー貼るまでもないだろ
std::unique_ptr
コイツはmovしかできないから、コンテナに格納できる条件に合わない。
スマートポインタをコンテナに入れたかったらsharedポインタを使う
常識じゃなかったのか
std::unique_ptr
コイツはmovしかできないから、コンテナに格納できる条件に合わない。
スマートポインタをコンテナに入れたかったらsharedポインタを使う
常識じゃなかったのか
240デフォルトの名無しさん
2019/08/20(火) 20:36:33.84ID:rT2paKVb unique_ptrはコンテナに格納可能という俺の常識とは違うようだな
241デフォルトの名無しさん
2019/08/20(火) 21:46:43.07ID:vf53Ia55242デフォルトの名無しさん
2019/08/20(火) 23:47:14.68ID:ehCs1rOT■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【和訳付き】レーダー照射問題 中国軍と自衛隊との“音声データ”公開 中国国営メディア [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 中国とロシアの爆撃機、日本周辺で共同飛行 [少考さん★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★2 [597533159]
- 【悲惨】中国軍が自衛隊に「事前通告」し自衛隊も返答した音声が公開されてしまうwwwこれは高市チェックアウトゕ★3 [597533159]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
- 俺が突拍子もないレスするとスクリプト扱いされるの不満なんだが
- 中国の日本向けレアアースの輸出止まる、高市のせいで日本終了のお知らせ [931948549]
- そういえば草だけ食ってるヤツらどこいったの?
