- 1 名前:デフォルトの名無しさん [2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr.net]
- 何にも知らない0からの出発、超初心者のためのC++相談室
- 304 名前:デフォルトの名無しさん mailto:sage [2021/06/06(日) 15:27:30.95 ID:fMmzH2Jl.net]
- 文面から必死な感じがヒシヒシと伝わってくるのに
皮肉も理解できないとはさすが厚顔無恥の代表格 誰も認めてくれないから自画自賛するしかないんですね
- 305 名前: mailto:sage [2021/06/06(日) 16:22:05.09 ID:xlnMgrm3.net]
- >>304
え?必死?思いがけない反応ですね まあ >>291 の方が提示したソースはハーバードシルトにしては冗長だと思って無駄丁寧っぽく説明したほうがいいかと >>293 をワサワサ書きましたが、それが必死だとは… よく分かっている方 >>292 に対しては簡潔に私の意見 >>295 を送ってもう十分、仕様変更があったという情報 >>297 をいただいて感謝、というところでしょうか
- 306 名前:290 mailto:sage [2021/06/06(日) 22:29:30.82 ID:DvMt5hdj.net]
- >>292
>>293 どうもありがとうございます constメンバ関数の理解が不十分だったようです constメンバ関数はメンバ変数を変更しないという理解だけで、 constオブジェクトはconstメンバ関数しか呼べないことへの 理解が足りなかっため私自身混乱していました ご説明いただいた内容を足掛かりに理解を深めたいと思います
- 307 名前:1 mailto:sage [2021/06/07(月) 07:01:58.64 ID:pWKPTo4/.net]
- まぁ、いいじゃねぇか、プログラミングなんて何にも知らないってのスレだし。
- 308 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 07:48:28.30 ID:c29T7zKX.net]
- const char* const str[] は文字列アドレスを格納するポインタの配列って意味であってますか?
const char* strは文字列を格納するポインタ? char str[] は文字配列? 一気に出てきてよくわからなくなって来たので間違えてたら教えて欲しいです。
- 309 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 08:39:52.02 ID:xFpLHEPr.net]
- >>308
だいたいあってる
- 310 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 11:12:06.49 ID:BLDePS2Q.net]
- ちゃんとメモリ確保してから使えよ
- 311 名前:デフォルトの名無しさん mailto:sage [2021/06/07(月) 22:09:28.76 ID:JY7FyEcf.net]
- >>309
ありがとうございます。
- 312 名前:デフォルトの名無しさん mailto:sage [2021/06/08(火) 23:28:22.97 ID:kZSYpF+Y.net]
- https://ideone.com/2fyV5M
103 と115で確保された動的配列のアドレスは別物なんでしょうか? コピーコンストラクタの動きがよくわからないです
- 313 名前:デフォルトの名無しさん mailto:sage [2021/06/09(水) 02:24:41.44 ID:ZtayyY2i.net]
- 103のarrayはコピーされたものだから別物だよ
てか初っ端から手直しが必要なソースを貼るのはやめろ
- 314 名前:デフォルトの名無しさん mailto:sage [2021/06/09(水) 02:39:16.49 ID:Ih94CWHU.net]
- スレの主旨的に初心者が初歩的な質問をするのは別に構わんとは思うんだが、
入門書にでも書いてあるようなことはよく読んで勉強したほうがいいと思うぞ。 素人が1レスで答えるよりはちゃんと体系だった解説のほうがわかりやすいよ、常識的に考えて。
- 315 名前:デフォルトの名無しさん mailto:age [2021/06/09(水) 04:24:03.76 ID:BGdtXEJj.net]
- >>313
すいません、ヘッダーとかcpp分けてるのどうアップロードすればいいのか分からなかったです 後65行目にcopy(other.m_array, other.m_array + m_size, m_array);とあるのですが何をしてるのか分かりません 本には”第1引数以上第2引数未満のアドレスにあるデータを第3引数の指すアドレス以降にコピーする関数で…とあるのですが 具体的に何をしてる関数なのでしょうか?第2引数の足し算も何なのかよく分かりません。
- 316 名前:デフォルトの名無しさん mailto:sage [2021/06/09(水) 04:43:32.09 ID:ZtayyY2i.net]
- https://ideone.com/EScxwq
こうしたらそのままコンパイル通るやろ 自分のヘッダincludeしてるとこにヘッダの内容貼り付けるだけ https://cpprefjp.github.io/reference/algorithm/copy.html memcpyと似たようなもん(コピーの仕方は違うけど other.m_arrayの指すアドレスから+m_size分のアドレスまで(未満)をm_arrayの指すアドレスから同じく+m_size未満までコピーしとるだけ これで分からんならポインタの理解が出来てない 上記のとこだとイテレータとか出てるけどこの場合ポインタなので全部ポインタに読み替えていい
- 317 名前:デフォルトの名無しさん mailto:sage [2021/06/09(水) 04:53:28.23 ID:ZtayyY2i.net]
- ちょっと誤解招きそうなので補足
m_sizeは個数なのでアドレス値ではないがintのm_size個分アドレスが加算される このへんは>>314の言う通り入門書嫁
- 318 名前:デフォルトの名無しさん [2021/06/09(水) 14:16:25.82 ID:3Qpbsqp/.net]
- cpp で socket を読み書きする stream 系の class ってありますか?
boost にはあったと思いますが 標準のはあるんですか?無いですか?
- 319 名前:はちみつ餃子 mailto:sage [2021/06/09(水) 16:06:33.34 ID:Ih94CWHU.net]
- >>318
標準には無い。 が、ソケットに stream のインターフェイスをかぶせることはそれほど難しくはない。
- 320 名前:デフォルトの名無しさん mailto:age [2021/06/09(水) 22:30:15.61 ID:BwbEIJxn.net]
- >>316
1引数から2引数で足したアドレスまでを第三引数にコピーしてるのですね やっと分かりました。ありがとうございます。 頭硬い人はロベール向いてないのかな…
- 321 名前:デフォルトの名無しさん mailto:sage [2021/06/09(水) 23:57:13.88 ID:ZtayyY2i.net]
- それは良かった
まぁ最初は理解に時間かかるもんだ
- 322 名前:デフォルトの名無しさん [2021/06/10(木) 10:45:51.80 ID:ZbfFyHii.net]
- >>319
thx cpp の std にある関数で glibc の様な getpass ってありますか? 標準のは無いですか?
- 323 名前:はちみつ餃子 mailto:sage [2021/06/10(木) 14:24:18.43 ID:MOYAWABe.net]
- >>322
無いよ。
- 324 名前:デフォルトの名無しさん [2021/06/11(金) 14:28:13.59 ID:tB3/M6ll.net]
- FILE *fp = fopen() で取得した fp を使って
stringstream としてアクセスすることは出来ますか?
- 325 名前:はちみつ餃子 mailto:sage [2021/06/11(金) 17:27:01.32 ID:DsaVPusD.net]
- >>324
直接的に一発で FILE* に stream をかぶせる手軽な方法はないと思うけど、 std::basic_streambuf を継承して setbuf, overflow, sync などをオーバーライドしたクラスを作ればストリームバッファになる。 (普通は std::basic_filebuf も内部的にはそう実装されているはず。) それをストリームに結び付ければストリームに出来ることは何でもできるよ。 仕様を調べるのがすごくしんどいだろうけど、 実装は (細かいエラーチェックとかを抜きにすれば) 百行も要らないくらいの簡単なものでいけるんじゃないかな。
- 326 名前:デフォルトの名無しさん mailto:sage [2021/06/16(水) 00:59:39.17 ID:QFUk0bjY.net]
- >>324
fstreamを使えば? #include <fstream> #include <sstream> … std::ifstream fs("hoge.txt"); std::stringstream ss; ss << fs.rdbuf(); fs.close(); それともfstream使えない特殊な環境?
- 327 名前:デフォルトの名無しさん mailto:sage [2021/06/16(水) 16:36:23.72 ID:uJQ6HHCX.net]
- FILE *fp = fopen(...);
std::ifstream fs(fp); 出来たらいいな
- 328 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 21:31:03.90 ID:OB6uOiq6.net]
- 関数へ渡す引数の型を限定したいときどう書くのが一般的ですか?
具体的に言うと符号なしのintだけ受けつけたいんですけど
- 329 名前:はちみつ餃子 mailto:sage [2021/06/17(木) 23:54:09.39 ID:Gi/wqrqm.net]
- >>328
暗黙の型変換を許さないということかな? それならテンプレートにした上で型に制約を付ければいい。 ここでは C++11 でも通るように書いてみたけど C++20 以降なら コンセプトが使えるのでもう少し簡単に書ける。 #include <type_traits> template<class T> typename std::enable_if<std::is_same<T, unsigned int>::value>::type foo(T) { } int main(void) { int a = 1; unsigned int b = 2; foo(a); // これはエラーになる foo(b); // これは通る }
- 330 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 08:42:03.67 ID:kejK9s3z.net]
- なんで戻り値voidに限定してんだよボケ餃子
- 331 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 11:49:14.92 ID:AVf6Ht59.net]
- 確かにそれで可能だけど、回答が超初心者スレのレベルを逸脱していると思うのですが
- 332 名前:はちみつ餃子 mailto:sage [2021/06/18(金) 18:30:00.74 ID:JA4mPV9U.net]
- >>330
単なるサンプルだからだよ。 >>331 超初心者が相談するという主旨のスレではあるけど、 超初心者には理解できないという結果になることもあるだろうし、 可能であれば相談した結果として初心者から脱したらそれに越したことは無いでしょ。 これで相談がクローズってわけでもないから もっと深く知りたいってのならわからないところを続けて質問してもらってもいいわけで。 もっと簡単な方法があるならそれを提示するんだけども、なくなくなくない?
- 333 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 19:23:19.39 ID:kejK9s3z.net]
- >>332
アホか 普通のenable_ifの使い方と全く違うお前だけのオナニーコード押し付けて何がサンプルだ 何不必要な制限勝手につけてドヤってんだボケ
- 334 名前:はちみつ餃子 mailto:sage [2021/06/18(金) 19:32:07.35 ID:JA4mPV9U.net]
- >>333
返却値 (または enabler) で制限するのは普通だろ。 むしろ他にどう使えるんだ?
- 335 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 19:35:45.29 ID:kejK9s3z.net]
- >>334
マジで言ってんのか? #include <type_traits> template <class T, typename std::enable_if<std::is_same<T, unsigned int>::value>::type* = nullptr> void foo(T) { } int main() { // foo((int)1); foo((unsigned int)1); } enablerってこれのことか知らんが、お前のコードだと戻り値voidにしか出来んだろってこと
- 336 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 19:42:19.79 ID:kejK9s3z.net]
- >>328
ちなコンセプト版(C++20対応コンパイラが必要) #include <type_traits> template <class T> concept UnsignedInt = std::is_same_v<T, unsigned int>; template <UnsignedInt T> void foo(T value) { } int main() { // foo((int)1); foo((unsigned int)1); } (インデントは全角なので注意) まぁどっちも難しいと思うけど無理に理解せず流した方がいいと思う(それか制限あきらめるか
- 337 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 19:43:08.40 ID:AVf6Ht59.net]
- >>332
いや、お前の言いたいことは分かるよ ただテンプレートメタプロコードを超初心者にいきなり例示して、「わからないところを続けて質問」して回答を繰り返して、結果的に理解に至るのは何ヵ月後になるんですかと テンプレートに関する高度な質問が飛び交う中、ここは超初心者スレとして機能するんですかと この場合>>328が求めているのはドリルじゃなくて穴だと思うよ俺は どういう背景があってunsigned int以外を受け付けたくないか、を聞くべきなのでは?
- 338 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 19:57:29.32 ID:kejK9s3z.net]
- 確かにそうだね
というか自分もテンプレート以外思いつかんかった・・ >>334 なんか変な癖あるから標準的な使い方がすっぽ抜けてたのかね ボロカス言って悪かった
- 339 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 20:01:53.90 ID:zIhiG+wy.net]
- あんまり詳しくない俺にはこういうのしか思いつかん。
__my_func() は直接呼ばないお約束にしておいて、static_assert で。 template のところは、書き換えは雰囲気でできると思うけど・・・ #include <type_traits> #include <iostream> unsigned int __my_func(unsigned int a) { return a * 2; } template <class T> unsigned int my_func (T a) { static_assert(std::is_same<T, unsigned int>::value == true, "is not uint."); return __my_func(a); } int main() { int a = 2; unsigned int b = 2; //std::cout << my_func(1) << std::endl; // assert //std::cout << my_func(a) << std::endl; // assert std::cout << my_func(1U) << std::endl; std::cout << my_func(b) << std::endl; }
- 340 名前:はちみつ餃子 mailto:sage [2021/06/18(金) 20:30:53.23 ID:JA4mPV9U.net]
- >>335
> お前のコードだと戻り値voidにしか出来んだろ なんか変なこといってると思ったらそこがすれ違いか。 std::enable_if のテンプレート引数の二個目を省略しなければ何にでも出来るよ。 (std::enable_if の type は void に固定されているわけではない。) クラスやコンストラクタは返却値がないから enabler を使うんであって、 普通の関数のときは返却値のほうで制御するのが普通だと思うぞ。
- 341 名前:はちみつ餃子 mailto:sage [2021/06/18(金) 20:33:26.89 ID:JA4mPV9U.net]
- >>337
まあそうなったら他に誘導してもいいし、資料を提示するだけで十分だと思った。 ただ背景をもうちょっと引き出すべきというのも確かに必要なことではあったな。
- 342 名前:デフォルトの名無しさん mailto:sage [2021/06/18(金) 20:39:10.69 ID:kejK9s3z.net]
- そうなんか、そういえばいつも自作alias使ってたから気付かんかったわ
>普通の関数のときは返却値のほうで制御するのが普通 別に戻り値でも引数でもいいが、クッソ読みづらいと思うけどな あとそれならこういうスレで第2引数省略すんなよ、初心者惑わしたいのか?
- 343 名前:1 mailto:sage [2021/06/19(土) 15:34:05.42 ID:kvHrZ2tI.net]
- ここは中級者が、お互いを煽り合うスレでは無い、ということを理解して欲しい。
- 344 名前:デフォルトの名無しさん [2021/06/19(土) 16:53:11.57 ID:zDrgWeBe.net]
- 引数同じで戻り値だけ違う関数を造って使い訳たい
- 345 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 17:01:53.54 ID:xVp2TfT/.net]
- >>343
俺ははちみつが書くより先に同じこと(enable_if)思ってたけど、このスレには不適切だと思って書くのやめてたんだけどな あんな不適切で不親切な回答(テンプレートとSFINAEとか、はちみつも使いこなせてないようなものを使う上に戻り値の変更方法も、自身が言ってるコンセプト版も書かない)に怒っちゃいかんのか
- 346 名前:はちみつ餃子 mailto:sage [2021/06/19(土) 17:30:35.18 ID:/f53/cxR.net]
- >>345
そこらへんが少しばかり詳細なら初心者に理解できる内容になるという主張? 少々の書き方の工夫で初心者がわかるように解説できるわけないだろ。 関連知識も含めればちょっとした本一冊分くらいにはなる内容なんだから。 「まずはテンプレートの知識が必要ですね」ということが初心者に対する解で、 そこに至る前にごちゃごちゃしたことを詰め込むのは不親切だと思うわ。
- 347 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 17:34:51.32 ID:xVp2TfT/.net]
- >>344
戻り値だけ違う同名関数は作れないのでテンプレートにするか、引数で戻り値を指定するしかないとおも template <typename T> T hoge(); template <> int hoge<int>() {} template <> float hoge<float>() {} hoge<int>(); hoge<float>(); もしくは int hoge(int) {} float hoge(float) {} ?hoge(int()); hoge(float());
- 348 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 18:00:39.76 ID:kvHrZ2tI.net]
- 1 + 1 = 1
- 349 名前:デフォルトの名無しさん mailto:sag [2021/08/24(火) 01:28:35.73 ID:WM1jAzNs.net]
- https://pastebin.pl/view/e395f5ca
operator関数の動きがよくわからないんですが tmp.x = x + p.x; これの p.xと xとtempはどのオブジェクトのことを指してるんでしょうか?
- 350 名前:はちみつ餃子 mailto:sage [2021/08/24(火) 01:50:15.06 ID:MkJE9y3A.net]
- >>349
operator+ は演算子 + の実体として機能する。 故に p1+p2 は p1.operator+(p2) と書いた場合と完全に同じ。 tmp はもちろんこの関数内で宣言した tmp 変数だし、 p は渡された引数 (この場合は p2) のコピーなので p.x には 6 が入ってるね。
- 351 名前:デフォルトの名無しさん mailto:sag [2021/08/24(火) 02:43:37.56 ID:WM1jAzNs.net]
- >>350
ありがとうございます。引数がどれに対応してるかわかりました。 p1.operator+(p2) これは何でしょう?
- 352 名前:デフォルトの名無しさん [2021/08/24(火) 03:37:20.26 ID:gGQMgsWd.net]
- 掛け算の*と、
色々を示す*が 同じ*なんで困っていますが、どうしたらいいんでしょうか?
- 353 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 03:55:09.38 ID:jikR3Y9f.net]
- 色々ってワイルドカードのこと?
C++においては*は乗算かポインタ関係だけだよ >>351 p1のメンバ関数として普通にoperator +を呼んでるだけ
- 354 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 04:29:07.93 ID:gGQMgsWd.net]
- ありがとうございます。
c++ のワイルドカード記号ってなんでしょうか?
- 355 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 04:33:24.90 ID:jikR3Y9f.net]
- 言語そのものには無いよー
エディタやIDEで検索するのには使えることもあるが
- 356 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 04:45:36.01 ID:gGQMgsWd.net]
- 教えてもらって、勉強になりました。
ありがとうございました。
- 357 名前:デフォルトの名無しさん mailto:sag [2021/08/24(火) 07:22:03.54 ID:WM1jAzNs.net]
- https://pastebin.pl/view/31e451ad
クラスの型変換と型変換用のコンストラクタの意味が全く分からないのですが これをすると何が得なのでしょうか?10行目は普通のコンストラクタに見えますがなぜ変換用? 入門書に載ってるコードなのですがエラーで動作もせず何がなんだか分かりません…
- 358 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 15:23:13.01 ID:jcrsR8Np.net]
- 2つ目のprivateはpublicの間違いじゃね?
あと変換は、単に引数一つだけを受け取るコンストラクタは 自動的に?暗黙のキャストにも使われる、というだけ(それを禁止する方法もあるが
- 359 名前:デフォルトの名無しさん mailto:sag [2021/08/25(水) 07:15:15.42 ID:dwOa++JV.net]
- >>358
おかげさまで動きました。ありがとうございます。 でもいまいち型変換の意味が分からないのですが operator 型名()return 変数を定義するとどの変数にも代入出来るようになるってことですか?
- 360 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 15:58:08.24 ID:3/bOIe3o.net]
- C++ キャスト でぐぐるといいよ
(キャストはCにもあるけど)
- 361 名前:はちみつ餃子 mailto:sage [2021/08/25(水) 22:29:05.16 ID:/Q8zinJC.net]
- >>359
型変換はその名前の通り型を変換する。 変換と同等の処理を普通の関数とし て書いてもかまわないんだが、変換関数 (conversion function) または変換 コンストラクタ (converting constructor) が定義されていると暗黙の型変換 が適用される文脈では勝手に適用して変換してくれるので便利。 例えば以下のように foo 型のオブジェクトを受けとる文脈で bar 型のオブジェ クトを渡しても通るのは変換が適用されるから。 struct foo {}; struct bar { operator foo() { return foo(); } }; void func(foo) {} int main(void) { foo x = bar(); func(bar()); }
- 362 名前:デフォルトの名無しさん mailto:sag [2021/08/26(木) 01:12:00.54 ID:BlNdGFU0.net]
- >>361
ようやくイメージできてきました。ありがとうございます!
- 363 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 06:25:31.31 ID:C2TXXzWD.net]
- >>361
そんな難しくせずに、 { change A to B } でいいんじゃないの?
- 364 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:12:40.22 ID:QSgOZ0Rh.net]
- なんのこっちゃ
- 365 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:15:52.67 ID:ue9a70Za.net]
- コマンドライン引数の意味が全く分からないのですが
Visualstudioを使っているからでしょうか? それとも、コマンドプロンプトの使い方を理解できないでしょうか? https://programming.pc-note.net/c/commandline.html ここも参照にしたのですが何が得で何ができてるのかよく分かりません。 コマンドラインってVSでデバッグ無しで実行をした時に出る黒い画面ではないですよね? 質問ばかりですいませんが本当に何も分からないのでお願いします。
- 366 名前:デフォルトの名無しさん [2021/08/27(金) 11:14:47.31 ID:xylLBHc1.net]
- >>365
メモ帳でファイルをドラッグアンドドロップで開く例が紹介されているが これはWindowsのShellであるExplorerがexefileに対して登録されているドラッグアンドドロップハンドラーを処理してドロップしたファイルのフルパスを文字列として起動するプロセス環境のコマンドラインパラメータとして渡している 黒い画面(コマンドプロンプト)にもExplorerとは違うがプロセスの起動とパラメータを渡す機能が実装されている 起動するexefileに続けてスペースを開けたあと記入した文字列がそのままパラメータとして渡される ファイル名以外にも自由に渡せるためプログラムの動作を指定したり変更する目的で使用される あなたが作成するプログラムでシェルから渡されたコマンドラインパラメータを確認する方法はそのページにもある通りだ コマンドラインパラメータを活用してバラ色の人生を満喫してくれ
- 367 名前:デフォルトの名無しさん [2021/08/27(金) 14:23:11.73 ID:8dQk5Ix1.net]
- getopt
- 368 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 23:33:15.78 ID:cMIVTei2.net]
- 例えば、デスクトップにショートカットを作る。
コマンドプロンプトを起動して、Ruby スクリプト・a.rb を実行する リンク先 C:\Windows\System32\cmd@.exe /k "ruby C:/Users/Owner/Documents/a.rb" 注意。書き込めないので、間に@を入れました 作業フォルダ C:\Users\Owner\Desktop a.rb 内には、puts ARGV (ARGV は配列で、そこにコマンドライン引数が渡ってくる) と書いておいて、ショートカットに、フォルダx・ファイルb.txt をdrag&drop すると、 コマンドプロンプトが起動して、以下のように表示される C:\Users\Owner\Desktop\x C:\Users\Owner\Desktop\b.txt
- 369 名前:デフォルトの名無しさん mailto:sagi [2021/10/06(水) 22:36:41.57 ID:OG+j1FAK.net]
- const char* const str[]={"aaa","bbb","ccc"}
constの効果を教えてほしいです 後ろのstrの前のconstは付けると const str[0]="dddd"って出来なくなるのは分かったのですが 先頭のconstが分かりません
- 370 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 22:51:34.11 ID:ItOX1MR6.net]
- str[0][0]='d';
- 371 名前:デフォルトの名無しさん mailto:sagi [2021/10/06(水) 22:53:20.88 ID:OG+j1FAK.net]
- >>370
なるほど。 ありがとうございます。
- 372 名前:デフォルトの名無しさん mailto:sagi [2021/10/09(土) 07:12:25.69 ID:JFpyaThm.net]
- ロベールC++入門の代入演算子についてなのですが
コピーコンストラクタのときは動的配列をdelete[]しなかったのに なぜ代入演算子を使うときだけdelete[]するのか分からないので教えて下さい 本にはm_arrayには前に確保したメモリが存在するためdelete[]しないとメモリリーク と書いてあるのですがコピーコンストラクタも同じじゃないの?と混乱してます 100行目です https://ideone.com/xL8UOn
- 373 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 10:44:46.48 ID:tDH5FAwQ.net]
- newしたメモリが不要になったらdeleteする
これだけ コピーコンストラクタでのdelete、 いつnewしたデータに対して?
- 374 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 17:51:02.84 ID:QAOoCtV/.net]
- >>373
すいません、わからないです。 コピーコンストラクタはnewでアドレスを確保しないものなのですか?
- 375 名前:はちみつ餃子 mailto:sage [2021/10/09(土) 18:03:01.95 ID:Z56nk6n1.net]
- >>374
ロベールの C++ 入門を読んだことがないからどういう構成になっとるか知らんけど、 それがわからんのならたぶんそれ以前の章を理解でてきないと思う。
- 376 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 18:04:17.21 ID:jELfb/xT.net]
- >>372
代入演算子は既にあるオブジェクトを別のオブジェクトで上書きする操作 コピーコンストラクタは別のオブジェクトから新しいオブジェクトを作って初期化する操作 代入演算子でdelete[]しているのは既にあるオブジェクト(*this)のメンバとして確保済みのメモリ領域 コピーコンストラクタの実行時には「既にあるオブジェクト」にあたるものは無いので、deleteするものも無い
- 377 名前:デフォルトの名無しさん mailto:sage [2021/10/09(土) 20:35:07.35 ID:QAOoCtV/.net]
- >>376
初期化と代入の知識が曖昧でした 分かった気がします。ありがとうございます。
- 378 名前:デフォルトの名無しさん [2021/10/10(日) 20:55:50.73 ID:6QW0WSDe.net]
- AtCoderの初心者向けのC++の説明のページを読んでいます。
vector<int> a(10); aの第i番目の要素にアクセスする場合、a[i]よりもa.at(i)と書くほうが良いと書いてあります。 これは現在のC++で推奨されている書き方でしょうか?それとも単に初心者はそう書いたほうがいいというだけのことでしょうか?
- 379 名前:ハノン mailto:sage [2021/10/10(日) 21:05:41.56 ID:KKHdhYPj.net]
- >>378
>a[i]よりもa.at(i)と書くほうが良い そう主張されている理由はどのように書かれていますか?私はどちらでも大差ないと思っていますが‥‥
- 380 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 21:07:18.12 ID:6QW0WSDe.net]
- >>379
vector<int> a(10); b = a.at(10); などと書いた場合にコンパイルエラーになりますが、エラーメッセージがatを使うと表示されるというのが理由です。
- 381 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 21:08:35.36 ID:6QW0WSDe.net]
- 初心者でないプログラマーでatを使って書いている人は少数派ではないのですか?
- 382 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 21:31:47.25 ID:zWyM5YPA.net]
- 範囲外にアクセスする可能性があるならat、ちゃんと事前にチェックするなら[]でいいんじゃない?
- 383 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 22:58:42.68 ID:gnqjARRQ.net]
- 気分によるけどatが好きです
- 384 名前:デフォルトの名無しさん [2021/10/10(日) 23:07:44.84 ID:gmqGyDAJ.net]
- vector配列を指すポインタを使ってる時に[i]で指定する書き方がよく分からないのでat(i)使ってる
- 385 名前:デフォルトの名無しさん mailto:sage [2021/10/10(日) 23:14:51.45 ID:U88jNIFg.net]
- (*ポインタ)[i]
- 386 名前:はちみつ餃子 mailto:sage [2021/10/10(日) 23:15:56.24 ID:cCUvKLuJ.net]
- >>378
これのことだね。 https://atcoder.jp/contests/apg4b/tasks/APG4b_n 例外処理やアサートの説明を省略しているせいでどう使い分けるべきものなのかがよくわからん説明になってる。 C++ はかなり複雑で、 AtCoder のサイトにある雑な説明だけでは細かいところまで理解はできないよ。 C++ の言語仕様の詳細を理解するのに手間取って競技を始められないくらいならそういう風に割り切れという意味で AtCoder としては at を推してるんであって、言語仕様やプログラマの習慣としてどちらかを推奨してたりはしない。 それぞれに用途がある。
- 387 名前:はちみつ餃子 mailto:sage [2021/10/11(月) 00:50:58.08 ID:kxIK5/L+.net]
- 余談だが C++ の言語仕様としては推奨というのはないが非推奨というのはあって
(結果的に同等のよりよい機能を推奨するのと同じことになっている場合はある) 将来の言語仕様の更新で廃止するつもりがあるということを意味する。
- 388 名前:デフォルトの名無しさん [2021/10/11(月) 02:00:14.70 ID:xizp5ONl.net]
- ポインタ->operator[](i)
- 389 名前:デフォルトの名無しさん mailto:sagi [2021/10/13(水) 01:04:04.91 ID:gvBCET4D.net]
- Notepad++でcppファイルを選んで実行をすると
Visualstudioが立ち上がるのですが どうすればNotepadで実行出来るのでしょうか?
- 390 名前:ハノン mailto:sage [2021/10/13(水) 02:24:33.63 ID:YMzdF2UZ.net]
- >>389
コンパネ→既定のプログラム→ファイルの関連付け か 設定→アプリ→既定のアプリ→ファイルの種類ごとに あたりでなんとかならないでしょうか?
- 391 名前:デフォルトの名無しさん [2021/10/13(水) 03:03:01.45 ID:gvBCET4D.net]
- >>390
回答ありがとうございます。 ファイルの関連付けをメモ帳とVisualstudioしか選べなかったです。(後Microsoftストア) Notepad++は初期設定結構大変な感じなんでしょうか? https://imgur.com/a/V3jOiV0
- 392 名前:ハノン mailto:sage [2021/10/13(水) 19:41:40.64 ID:YMzdF2UZ.net]
- >>391
たしかに「設定→アプリ→既定のアプリ→ファイルの種類ごとに」 はうまくいかないですね では、 開きたい拡張子を持ったファイルを右クリック→プログラムから開く→別のプログラムを開く→その他のアプリ→このPCで別のアプリを探す ではどうですか? 私は win7 メインで、うまいアドバイスができなくてすみません‥‥
- 393 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 08:20:19.87 ID:7/3R28mC.net]
- C++でアプリを作る場合って、QTってやつかMFCって奴を勉強すればいいのでしょうか?
C++でWIN32APIを学ぶっていうのはないですか?
- 394 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 10:04:52.66 ID:emsejTNf.net]
- ないです
- 395 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 10:18:17.44 ID:vPA5f3eX.net]
- あります
- 396 名前:デフォルトの名無しさん [2021/10/19(火) 11:51:03.31 ID:90qj1F6l.net]
- メッセージループによるイベントドリブン型アプリケーション
「ウインドウ」と「メッセージ」というウインドウズの基本概念ぐらいは理解してもいい
- 397 名前:デフォルトの名無しさん [2021/10/19(火) 19:00:27.41 ID:C9DkQou5.net]
- tcl/tk
wxWidgets DXLib Unity
- 398 名前:ハノン mailto:sage [2021/10/19(火) 20:20:27.92 ID:KyySFZDA.net]
- >>393
「C++でwin32api」ですか… そういうのは c で win32api を理解した後、各自が独力で工夫して c++ と win32api とを辻褄あわせするものだと思っていましたが、それはそうと、そういう書籍は過去にありました たしか leaf というライブラリと WOOL という lisp 処理系が掲載されていた記憶があります
- 399 名前:デフォルトの名無しさん mailto:sage [2021/10/19(火) 22:23:42.02 ID:P+gkhAFH.net]
- MFC は何十年も前だけど、今もあるの?
QT は、Linux で聞くけど、Windows で使うの?
- 400 名前:デフォルトの名無しさん [2021/10/20(水) 02:20:42.50 ID:+2OzLQ7p.net]
- >>399
Qt5Core.dllで検索する色々出てくるから、win/macとマルチのアプリなんかで割と使われてみたいね。 手元だとfusion360とかresolveとかで使われてるっぽい。商用ライセンスあるからかな?
- 401 名前:デフォルトの名無しさん [2021/10/20(水) 11:06:18.19 ID:OEiI06HQ.net]
- 5以前は良かったんだがな
- 402 名前:はちみつ餃子 mailto:sage [2021/10/20(水) 13:35:36.40 ID:dLyN/sz8.net]
- >>393
MFC は API の利用をちょっと楽にする薄いラッパーという感じだな。 API のことを忘れて MFC の使い方だけ学べばよいというようなものではない。 >>398 今は C++/WinRT の時代だぞ。
- 403 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 18:01:15.01 ID:oZqSjSwG.net]
- >>398-402
WIN32やったことないんですが C++でアプリを作るときはWin32APIは避けては通れないのですか ありがとうございます…
- 404 名前:デフォルトの名無しさん mailto:sage [2021/10/20(水) 19:03:46.64 ID:CkfuGqw9.net]
- 知っておいた方が良いけど
避ける方法もある
|

|