エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
探検
【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
542片山博文MZ ◆T6xkBnTXz7B0
2017/08/25(金) 18:03:18.25ID:M7y+0IYN543デフォルトの名無しさん
2017/08/25(金) 18:06:14.26ID:KodDhcxm size_tを符号なしにした馬鹿は誰だよ。
544デフォルトの名無しさん
2017/08/25(金) 18:15:01.16ID:mWX/padL545デフォルトの名無しさん
2017/08/25(金) 18:19:04.85ID:te52+8O3 >>544
もとからintならあれだが、いちいち別の型であるintにキャストする積極的な理由はなんだ?
もとからintならあれだが、いちいち別の型であるintにキャストする積極的な理由はなんだ?
546デフォルトの名無しさん
2017/08/25(金) 18:20:08.57ID:mWX/padL intをオーバーする心配をするなら
size_tをオーバーする心配も
メモリが足りない心配も
処理が遅すぎて使い物にならない心配も
size_tをオーバーする心配も
メモリが足りない心配も
処理が遅すぎて使い物にならない心配も
547デフォルトの名無しさん
2017/08/25(金) 18:20:36.17ID:te52+8O3 >>546
そうじゃなくてわざわざ型変換する理由は何?
そうじゃなくてわざわざ型変換する理由は何?
548デフォルトの名無しさん
2017/08/25(金) 18:21:19.25ID:mWX/padL 統一
549デフォルトの名無しさん
2017/08/25(金) 18:25:11.29ID:mWX/padL550デフォルトの名無しさん
2017/08/25(金) 18:26:03.20ID:te52+8O3 >>548
何と何を統一するの?
int n = static_cast<int>(v.size());
という面倒な表記?それとも
int n = v.size();
とかいう-Wall で死ぬ表記?
auto n = v.size();
って書かずにキャストをどうしてもしたいのはなぜなのか
何と何を統一するの?
int n = static_cast<int>(v.size());
という面倒な表記?それとも
int n = v.size();
とかいう-Wall で死ぬ表記?
auto n = v.size();
って書かずにキャストをどうしてもしたいのはなぜなのか
551デフォルトの名無しさん
2017/08/25(金) 18:30:18.05ID:mWX/padL クラスを使う人が、内部的にvectorを意識する必要もないし、それようにわざわざ専用の型を使う必要もない
intは他の処理でも多く使われているので、使う側からすれば一番変換が少ない
巨大なデータを扱う処理に関する記述で、size_tで統一してるならそれでも
符号無しで統一してるのも考えにくいけど
intは他の処理でも多く使われているので、使う側からすれば一番変換が少ない
巨大なデータを扱う処理に関する記述で、size_tで統一してるならそれでも
符号無しで統一してるのも考えにくいけど
552デフォルトの名無しさん
2017/08/25(金) 18:35:08.21ID:mWX/padL >>550
そういう面倒なことをクラスのユーザーにさせないため
そういう面倒なことをクラスのユーザーにさせないため
553デフォルトの名無しさん
2017/08/25(金) 18:48:22.24ID:s9vD7wq8 ID:mWX/padLみたいな前近代的なマが早くくたばりますように
554デフォルトの名無しさん
2017/08/25(金) 19:08:25.29ID:te52+8O3 >巨大なデータを扱う処理に関する記述で、size_tで統一してるならそれでも
符号無しで統一してるのも考えにくいけど
STLのsizeはsize_tで統一されてんのにお前が乱してるんだろw
符号無しで統一してるのも考えにくいけど
STLのsizeはsize_tで統一されてんのにお前が乱してるんだろw
555デフォルトの名無しさん
2017/08/25(金) 19:21:24.07ID:g+9HiqWa >そういう面倒なことをクラスのユーザーにさせないため
どんな理屈だよ
vectorをラップしたクラスにat()やoperator[]を設けたらint指定でアクセスするのか
ユーザは負数に成り得る変数を注意しながら使えってか
何のための型だよ
どんな理屈だよ
vectorをラップしたクラスにat()やoperator[]を設けたらint指定でアクセスするのか
ユーザは負数に成り得る変数を注意しながら使えってか
何のための型だよ
556デフォルトの名無しさん
2017/08/25(金) 19:27:33.63ID:wHQvIY8a >vectorをラップしたクラスにat()やoperator[]を設けたらint指定でアクセスするのか
あたりめーだ
真人間ならラップは手段であって目的じゃねーから
>ユーザは負数に成り得る変数を注意しながら使えってか
バカ乙
計算をミスらないことと演算がオーバーフローしないことだけ注意すんだよ
あたりめーだ
真人間ならラップは手段であって目的じゃねーから
>ユーザは負数に成り得る変数を注意しながら使えってか
バカ乙
計算をミスらないことと演算がオーバーフローしないことだけ注意すんだよ
557デフォルトの名無しさん
2017/08/25(金) 19:38:23.61ID:mWX/padL558デフォルトの名無しさん
2017/08/25(金) 19:38:41.32ID:g+9HiqWa >>556
>あたりめーだ
>真人間ならラップは手段であって目的じゃねーから
ごめん、意味分からん
>計算をミスらないことと演算がオーバーフローしないことだけ注意すんだよ
だから、わざわざvector::size_typeなものをintに変換する必要がないじゃないの
0からmax_size()までの範囲なんだからさ
>あたりめーだ
>真人間ならラップは手段であって目的じゃねーから
ごめん、意味分からん
>計算をミスらないことと演算がオーバーフローしないことだけ注意すんだよ
だから、わざわざvector::size_typeなものをintに変換する必要がないじゃないの
0からmax_size()までの範囲なんだからさ
559デフォルトの名無しさん
2017/08/25(金) 19:40:58.71ID:g+9HiqWa >>557
だからtypedefやusingを使うって話だよ
だからtypedefやusingを使うって話だよ
560デフォルトの名無しさん
2017/08/25(金) 19:41:24.55ID:mWX/padL vectorから他の実装に変えたらクラスの仕様も変えるのか?
561デフォルトの名無しさん
2017/08/25(金) 19:42:44.43ID:mWX/padL562デフォルトの名無しさん
2017/08/25(金) 19:47:10.01ID:mWX/padL クラスやメンバ関数ごとに型を定義したら、
それらの数値を複数用いて演算した結果はどうすんの?
まさかauto?
それらの数値を複数用いて演算した結果はどうすんの?
まさかauto?
563デフォルトの名無しさん
2017/08/25(金) 19:50:17.50ID:mWX/padL クラスが値に関して責任を持つ
当たり前
クラスが値や型に対して責任を持たずにただ値をスルーパスするだけの糞クラスなんかは
ローカルで個人で使う物だけにとどめておきな
当たり前
クラスが値や型に対して責任を持たずにただ値をスルーパスするだけの糞クラスなんかは
ローカルで個人で使う物だけにとどめておきな
564デフォルトの名無しさん
2017/08/25(金) 19:51:00.23ID:mWX/padL ただメールを転送するだけの役に立たない糞上司と同じ
565デフォルトの名無しさん
2017/08/25(金) 20:00:01.80ID:g+9HiqWa566デフォルトの名無しさん
2017/08/25(金) 20:14:31.61ID:mWX/padL >>565
vector以外のデータは無いっていう前提?
または、クラスで扱うサイズをすべてそれで統一?
仮にそうだとして、
じゃあ別のクラスのsize_typeや他の型と演算した結果はどういう型にするつもり?
vector以外のデータは無いっていう前提?
または、クラスで扱うサイズをすべてそれで統一?
仮にそうだとして、
じゃあ別のクラスのsize_typeや他の型と演算した結果はどういう型にするつもり?
567デフォルトの名無しさん
2017/08/25(金) 20:16:04.43ID:mWX/padL 使う側に考えさせる
使う側の手間を考えない実装
使う側の手間を考えない実装
568デフォルトの名無しさん
2017/08/25(金) 20:18:17.34ID:mWX/padL vectorをそのまま継承した程度のクラスなら、
当然vectorのインターフェースを保つべきと思うよ
今回はvectorはただのデータのひとつ
当然vectorのインターフェースを保つべきと思うよ
今回はvectorはただのデータのひとつ
569デフォルトの名無しさん
2017/08/25(金) 20:19:47.38ID:mWX/padL 実装上、たまたまvectorを使っただけ
もしかしたら変えるかも
といった、ごく普通のクラス設計だと仮定した場合の話
もしかしたら変えるかも
といった、ごく普通のクラス設計だと仮定した場合の話
570デフォルトの名無しさん
2017/08/25(金) 20:26:53.78ID:cjqQUnES てか普通コンテナのサイズはsize_typeでとるだろ
別のクラスのsize_typeもsize_typeで取れ
勝手にintにキャストしてwarningまみれにすんな死ね
別のクラスのsize_typeもsize_typeで取れ
勝手にintにキャストしてwarningまみれにすんな死ね
571デフォルトの名無しさん
2017/08/25(金) 20:29:55.07ID:mWX/padL コンテナはただのクラス内のデータのひとつ
内部の設計事情を外部に出す必要はない
内部の設計事情を外部に出す必要はない
572デフォルトの名無しさん
2017/08/25(金) 20:32:07.80ID:mWX/padL573デフォルトの名無しさん
2017/08/25(金) 20:32:27.95ID:g+9HiqWa >>566
>vector以外のデータは無いっていう前提?
実装を替える必要があるってのは後で作り変えるって意味?それって設計の問題で関係なくね?
静的動的問わずポリモーフィズムするって意味なら最初からそういった設計をするでしょ
今回の話はvectorをラップしているクラスの話でしょ、何で関係ない話を持ち込むの?
>または、クラスで扱うサイズをすべてそれで統一?
size_typeで統一されるならそれでイイんじゃないの?君の言うintに統一と何ら変わらない
それなら内包しているvectorと同じsize_typeを使った方のが余計な記述も減るしバグも減る
>じゃあ別のクラスのsize_typeや他の型と演算した結果はどういう型にするつもり?
それって君の言うint統一でも同じじゃね?
何か話がどんどんズレていない?
>vector以外のデータは無いっていう前提?
実装を替える必要があるってのは後で作り変えるって意味?それって設計の問題で関係なくね?
静的動的問わずポリモーフィズムするって意味なら最初からそういった設計をするでしょ
今回の話はvectorをラップしているクラスの話でしょ、何で関係ない話を持ち込むの?
>または、クラスで扱うサイズをすべてそれで統一?
size_typeで統一されるならそれでイイんじゃないの?君の言うintに統一と何ら変わらない
それなら内包しているvectorと同じsize_typeを使った方のが余計な記述も減るしバグも減る
>じゃあ別のクラスのsize_typeや他の型と演算した結果はどういう型にするつもり?
それって君の言うint統一でも同じじゃね?
何か話がどんどんズレていない?
574デフォルトの名無しさん
2017/08/25(金) 20:33:01.08ID:cjqQUnES お前はそれでいいんじゃないか?
intで出せばいいじゃん
他のコンテナと整合取れないから使われないだけで、法に触れてるわけでもないし
intで出せばいいじゃん
他のコンテナと整合取れないから使われないだけで、法に触れてるわけでもないし
575デフォルトの名無しさん
2017/08/25(金) 20:37:36.90ID:mWX/padL576デフォルトの名無しさん
2017/08/25(金) 20:51:59.32ID:g+9HiqWa577デフォルトの名無しさん
2017/08/25(金) 21:41:43.35ID:KodDhcxm stlが糞ならautoも糞。これだけ。
578デフォルトの名無しさん
2017/08/25(金) 22:47:35.80ID:Eu3G8mvr auto g() {
// auto最高や
}
// auto最高や
}
579片山博文MZ ◆T6xkBnTXz7B0
2017/08/25(金) 22:49:29.48ID:M7y+0IYN ご利用は計画的に
580デフォルトの名無しさん
2017/08/25(金) 23:42:52.91ID:Eu3G8mvr auto 計画通り() -> auto {}
581はちみつ餃子 ◆8X2XSCHEME
2017/08/26(土) 00:15:55.89ID:pK4duJs2 int でいーんと違うかな? (違う)
582デフォルトの名無しさん
2017/08/26(土) 00:18:45.88ID:m69mKCvs この強烈な加齢臭
昭和生まれはお帰りください
昭和生まれはお帰りください
583デフォルトの名無しさん
2017/08/26(土) 02:07:31.06ID:YVaPdeR/ 平成もあと数年だが在位64年は無茶苦茶長いよな
584デフォルトの名無しさん
2017/08/26(土) 02:50:01.47ID:h4RGPr+8 C++ Core Guidelines より
ES.106: Don't try to avoid negative values by using unsigned
https://github.com/isocpp/CppCoreGuidelines/blob/v0.8/CppCoreGuidelines.md#Res-nonnegative
ES.107: Don't use unsigned for subscripts
https://github.com/isocpp/CppCoreGuidelines/blob/v0.8/CppCoreGuidelines.md#Res-subscripts
ES.106: Don't try to avoid negative values by using unsigned
https://github.com/isocpp/CppCoreGuidelines/blob/v0.8/CppCoreGuidelines.md#Res-nonnegative
ES.107: Don't use unsigned for subscripts
https://github.com/isocpp/CppCoreGuidelines/blob/v0.8/CppCoreGuidelines.md#Res-subscripts
585デフォルトの名無しさん
2017/08/26(土) 11:13:16.50ID:mPuoCwlf ↑便所の落書き
586デフォルトの名無しさん
2017/08/26(土) 18:00:34.61ID:WfLpSPQA size_tって何だっけ?
最近c#脳なので忘れた
最近c#脳なので忘れた
587デフォルトの名無しさん
2017/08/26(土) 22:37:42.94ID:XR3UemNV きっと何かのサイズだろう
rsize_tが出てきたあたりで規格を読むのがめんどくさくなった
rsize_tが出てきたあたりで規格を読むのがめんどくさくなった
588デフォルトの名無しさん
2017/08/26(土) 23:05:29.50ID:4huu8k7X unsigned int
589デフォルトの名無しさん
2017/08/26(土) 23:27:40.18ID:gTZoGI5S xmlだったかloggerだったかのヘッダオンリーライブラリでsize_t絡みのワーニングを
消そうとintをsize_tに変更すると別の場所にワーニングが出て、そこも直すとまた別
の場所にの繰り返しで使うのやめたことがあった。
消そうとintをsize_tに変更すると別の場所にワーニングが出て、そこも直すとまた別
の場所にの繰り返しで使うのやめたことがあった。
590デフォルトの名無しさん
2017/08/28(月) 10:50:45.03ID:D1yS1ByC インクルードディレクトリの優先順位変えたらうまくいったり
591デフォルトの名無しさん
2017/09/02(土) 17:05:03.82ID:Vkplowcj http://opencv.jp/cookbook/opencv_img.html#image-resize
ここのソースコードをコピペしてコンパイルしようとしたのですが
関数 `cv::Mat::release()' 内:
test.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): `cv::Mat::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
このようなエラー文が出てしまいます
使っているOSはdebian stretchです
/usr/include/opencv2には必要なファイルはありました
コンパイルオプションを色々調べて試したのですがうまく行きませんでした
どのようにコンパイルすればいいのでしょうか
ここのソースコードをコピペしてコンパイルしようとしたのですが
関数 `cv::Mat::release()' 内:
test.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): `cv::Mat::deallocate()' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
このようなエラー文が出てしまいます
使っているOSはdebian stretchです
/usr/include/opencv2には必要なファイルはありました
コンパイルオプションを色々調べて試したのですがうまく行きませんでした
どのようにコンパイルすればいいのでしょうか
592デフォルトの名無しさん
2017/09/02(土) 17:46:32.93ID:Ti9M8tGK593デフォルトの名無しさん
2017/09/02(土) 17:57:11.82ID:Vkplowcj 解決しました
すみませんでした
ライブラリのリンク方法をきちんと理解してなかったみたいです
すみませんでした
ライブラリのリンク方法をきちんと理解してなかったみたいです
594デフォルトの名無しさん
2017/09/03(日) 01:01:10.24ID:HP/Rq3By もちろん、具体的にどうやって解決したかは書きません
595デフォルトの名無しさん
2017/09/03(日) 02:48:50.72ID:hOhj+ods596デフォルトの名無しさん
2017/09/03(日) 23:14:47.80ID:SkKZ7pGs g++はソースでライブラリを指定できないの?
597デフォルトの名無しさん
2017/09/04(月) 09:53:17.44ID:MN7/X5Lc ソースでリンクとかvisual studioかよ
598デフォルトの名無しさん
2017/09/05(火) 17:26:13.07ID:SopTNKp+ 質問です
DLLの中で宣言したvectorを呼び出し側のEXEから使うのにスマートな方法は
どんな方法がありますか?
DLLの中で宣言したvectorを呼び出し側のEXEから使うのにスマートな方法は
どんな方法がありますか?
599デフォルトの名無しさん
2017/09/05(火) 17:29:23.60ID:b+ZxWLYj class CFirstClass {
public: virtual const char* GetString() const = 0;
};
class CNinja : public CFirstClass {
public: virtual ~CNinja();
virtual const char* GetString() const;
};
class CMaster : public CFirstClass {
public: virtual ~CMaster();
virtual const char* GetString() const;
};
class CJohnin : public CNinja, public CMaster {
public: virtual ~CJohnin();
};
CNinja::~CNinja(){ }
CMaster::~CMaster(){ }
CJohnin::~CJohnin(){ }
const char* CNinja::GetString() const { return "忍者"; }
const char* CMaster::GetString() const { return "マスター"; }
int main() {
CJohnin johnin;
cout << dynamic_cast<CNinja&>(johnin).GetString() << endl;
cout << johnin.CMaster::GetString() << endl;
return 0;
}
GetStringの戻り値charから*を消したらエラーになるんですが、
これがポインタじゃなければならない理由は何でしょうか?
public: virtual const char* GetString() const = 0;
};
class CNinja : public CFirstClass {
public: virtual ~CNinja();
virtual const char* GetString() const;
};
class CMaster : public CFirstClass {
public: virtual ~CMaster();
virtual const char* GetString() const;
};
class CJohnin : public CNinja, public CMaster {
public: virtual ~CJohnin();
};
CNinja::~CNinja(){ }
CMaster::~CMaster(){ }
CJohnin::~CJohnin(){ }
const char* CNinja::GetString() const { return "忍者"; }
const char* CMaster::GetString() const { return "マスター"; }
int main() {
CJohnin johnin;
cout << dynamic_cast<CNinja&>(johnin).GetString() << endl;
cout << johnin.CMaster::GetString() << endl;
return 0;
}
GetStringの戻り値charから*を消したらエラーになるんですが、
これがポインタじゃなければならない理由は何でしょうか?
600片山博文MZ ◆T6xkBnTXz7B0
2017/09/05(火) 18:18:30.94ID:HWiXORhG >>599
文字と文字列は違う。C文字列は、ヌル文字で終わる文字配列、または文字の並びへのポインタ。
文字と文字列は違う。C文字列は、ヌル文字で終わる文字配列、または文字の並びへのポインタ。
601デフォルトの名無しさん
2017/09/05(火) 18:37:05.61ID:WkIFt9xI * は、ポインタ
まさか君は、ポインタを知らないのか?w
まさか君は、ポインタを知らないのか?w
602デフォルトの名無しさん
2017/09/05(火) 18:37:39.05ID:b+ZxWLYj603デフォルトの名無しさん
2017/09/05(火) 18:43:08.96ID:2NcRAW/h605デフォルトの名無しさん
2017/09/05(火) 18:50:39.70ID:6fI5wuGG そして リテラルの "文字列" って static で保持しなくていいの? までテンプレ
606デフォルトの名無しさん
2017/09/05(火) 19:50:20.12ID:duOUbFWD607デフォルトの名無しさん
2017/09/05(火) 20:01:40.54ID:D99g/mXF >>603
片山先生になんて失礼な態度なんだ
片山先生になんて失礼な態度なんだ
608片山博文MZ ◆T6xkBnTXz7B0
2017/09/05(火) 20:08:04.50ID:HWiXORhG >>607
先頭アドレスと言う方が正確だよね。先生と呼ぶのはやめようね。個人崇拝禁止ってルールだから。
先頭アドレスと言う方が正確だよね。先生と呼ぶのはやめようね。個人崇拝禁止ってルールだから。
609デフォルトの名無しさん
2017/09/05(火) 22:30:28.03ID:NIuXE25q 片山先生www
610デフォルトの名無しさん
2017/09/05(火) 22:59:11.90ID:nPfvfHCk 文字列リテラルがchar*に勝手に変換されてるのかよ。糞言語だな。
611片山博文MZ ◆T6xkBnTXz7B0
2017/09/05(火) 23:20:23.43ID:HWiXORhG 戦国武将を崇拝する事は人●しを崇拝する事になるし、ハッカーを崇拝する事はハッキングを崇拝する事になる。
個人崇拝にとらわれず、正しい道を歩まねばならない。
個人崇拝にとらわれず、正しい道を歩まねばならない。
612デフォルトの名無しさん
2017/09/05(火) 23:28:12.79ID:j8EMa+Cj >文字列リテラルがchar*に勝手に変換
そんなクソ言語はCだけ
そんなクソ言語はCだけ
613デフォルトの名無しさん
2017/09/05(火) 23:58:54.60ID:duOUbFWD >>612
char const*なりconst char*ならおk?
char const*なりconst char*ならおk?
615613
2017/09/06(水) 00:06:53.44ID:lX1AC/o9 日が変わったのね
領海いや了解です
まぁ歴史的理由とは言えクソではある
ROM化するときもどっちだよ?ってな話にはなるね
領海いや了解です
まぁ歴史的理由とは言えクソではある
ROM化するときもどっちだよ?ってな話にはなるね
616デフォルトの名無しさん
2017/09/06(水) 00:18:48.47ID:6Ek+YiOk617デフォルトの名無しさん
2017/09/06(水) 06:42:27.45ID:lz1Lh31S それのどの辺が欠陥?
618デフォルトの名無しさん
2017/09/06(水) 09:50:26.00ID:3N8FGDgc char hoge[] = "samurai";
const char hage[] = "harakiri";
無問題
const char hage[] = "harakiri";
無問題
619デフォルトの名無しさん
2017/09/07(木) 22:47:37.15ID:jsOYkjhe ↑どうしようもないバカ
620デフォルトの名無しさん
2017/09/08(金) 00:52:21.25ID:vi4Hog1L これから勉強しようと調べたら、C#やってたのに、見慣れない文法が俺的に意味不明過ぎて草
取り敢えず書かないとわかんねーなw
取り敢えず書かないとわかんねーなw
621デフォルトの名無しさん
2017/09/08(金) 00:55:11.66ID:z9zmzhsM https://ideone.com/y8mZJo
初心者です
クラスのメンバ変数に別のクラスを持つ場合、
実体かポインタのどちらで持った方が良いのでしょうか?
Data1(別のクラス)、Class1(実体で持つ)、Class2(ポインタで持つ)がその部分です
Class2の方がサイズが小さかったのでこちらの方が良いのですか?
それとも、使う側がメモリ使用量を削減したければ、
使う側がmain関数の変数dやeのような使い方をしてくれるだろう、
ということを期待して、余計なことはせずにClass1のようにするべきですか?
また、ポインタで持つ場合、Data2とClass3のような極端な場合
(実体で持った場合とポインタで持った場合の違いが4バイトしかない)
でもポインタで持つべきですか?
初心者です
クラスのメンバ変数に別のクラスを持つ場合、
実体かポインタのどちらで持った方が良いのでしょうか?
Data1(別のクラス)、Class1(実体で持つ)、Class2(ポインタで持つ)がその部分です
Class2の方がサイズが小さかったのでこちらの方が良いのですか?
それとも、使う側がメモリ使用量を削減したければ、
使う側がmain関数の変数dやeのような使い方をしてくれるだろう、
ということを期待して、余計なことはせずにClass1のようにするべきですか?
また、ポインタで持つ場合、Data2とClass3のような極端な場合
(実体で持った場合とポインタで持った場合の違いが4バイトしかない)
でもポインタで持つべきですか?
622デフォルトの名無しさん
2017/09/08(金) 01:42:32.16ID:T0c8eZQl この場合は実体で持ったほうがいいと思う
ポインタのほうがサイズが小さいって言ってるけど、あくまでも型のサイズであって使ってるメモリはポインタのほうが多くなってるよ
データがデータを持つクラスと同時に生成され同時に消えるものなら実体のほうが楽だし
ポインタのほうがサイズが小さいって言ってるけど、あくまでも型のサイズであって使ってるメモリはポインタのほうが多くなってるよ
データがデータを持つクラスと同時に生成され同時に消えるものなら実体のほうが楽だし
623デフォルトの名無しさん
2017/09/08(金) 01:54:33.88ID:3vC4jpKo 既に回答があるけど
実体で持つべきかポインタで持つべきかはもっと複雑な要因で決まる
C++は他の言語と違ってクラスのインスタンスを実体で持てる変わった言語で
それはそれで便利だから基本的には実体で持って構わない
理由はトラブルが無いから
ポインタで持つ場合は、他所から与えられたり、動的に差し変わったり、他所と共有したり
ややこしいことがしたい場合はポインタで持つ
一応「ややこしいこと」の中に君が求めている「サイズを減らしたい」も含まれる
例えば巨大な画像データなどを複数のクラスで共有してメモリ使用量を削減したい場合など
そのようなつもりがないのであれば、実体で持って構わない
実体で持つべきかポインタで持つべきかはもっと複雑な要因で決まる
C++は他の言語と違ってクラスのインスタンスを実体で持てる変わった言語で
それはそれで便利だから基本的には実体で持って構わない
理由はトラブルが無いから
ポインタで持つ場合は、他所から与えられたり、動的に差し変わったり、他所と共有したり
ややこしいことがしたい場合はポインタで持つ
一応「ややこしいこと」の中に君が求めている「サイズを減らしたい」も含まれる
例えば巨大な画像データなどを複数のクラスで共有してメモリ使用量を削減したい場合など
そのようなつもりがないのであれば、実体で持って構わない
624はちみつ餃子 ◆8X2XSCHEME
2017/09/08(金) 04:08:54.89ID:lqryTDOd まあ、まずは意味的な妥当性を考えるべきかな。
よほど大量にオブジェクトを作るのでなければ
少々のメモリ使用量の差なんてどうってことない。
そのクラスで定義したい概念に一致してるかが重要だろう。
よほど大量にオブジェクトを作るのでなければ
少々のメモリ使用量の差なんてどうってことない。
そのクラスで定義したい概念に一致してるかが重要だろう。
625デフォルトの名無しさん
2017/09/08(金) 22:03:27.48ID:TiXktDhC626デフォルトの名無しさん
2017/09/09(土) 00:41:38.80ID:hNauHrr/ みなさんありがとうございます
これからは状況に合わせてどれが適切かどうか考えて実装します
今回(621のコードではない)は、621のコードのようにサイズも小さく、
他のクラスと共有するようなデータを持っているクラスでもなく、
そのメンバを所有しているような概念だったので、
メンバ変数は実体で持つことにしました
これからは状況に合わせてどれが適切かどうか考えて実装します
今回(621のコードではない)は、621のコードのようにサイズも小さく、
他のクラスと共有するようなデータを持っているクラスでもなく、
そのメンバを所有しているような概念だったので、
メンバ変数は実体で持つことにしました
627デフォルトの名無しさん
2017/09/09(土) 04:29:22.24ID:gq9mYezw ポインタで持つと、プログラミングが難しい
ただし、後でインスタンスが作られる場合は、ポインタで持つ。
外側・内側のインスタンスの、寿命が異なる場合
ただし、後でインスタンスが作られる場合は、ポインタで持つ。
外側・内側のインスタンスの、寿命が異なる場合
628デフォルトの名無しさん
2017/09/09(土) 04:30:46.35ID:iRgkNuJM アドレスの演算しないなら参照でいいじゃん。
629デフォルトの名無しさん
2017/09/09(土) 08:33:28.36ID:DK1wXlQ9 生き死にのタイミングが別・ちょっとずれて欲しい
そういう場合はポインタしかやりよがない?かな?
そういう場合はポインタしかやりよがない?かな?
630デフォルトの名無しさん
2017/09/09(土) 09:57:17.57ID:IRAdfO5M 寿命のタイミングが違うときポインタで持たせるって、
ポインタをnullで初期化してsetterつけるってこと?
そんな糞クラス絶対使わないわ…
ポインタをnullで初期化してsetterつけるってこと?
そんな糞クラス絶対使わないわ…
631デフォルトの名無しさん
2017/09/09(土) 11:41:44.39ID:bRNSjth4 ↑バカ
>ポインタをnullで初期化してsetterつけるってこと?
>ポインタをnullで初期化してsetterつけるってこと?
632デフォルトの名無しさん
2017/09/09(土) 11:43:16.35ID:3oRTPGwk 寝起きで意味不明ですた
633デフォルトの名無しさん
2017/09/09(土) 11:43:45.11ID:3oRTPGwk 誤爆
634デフォルトの名無しさん
2017/09/09(土) 12:06:21.98ID:arXtWn5o ボインター使わなくてもC++が組めるのに安堵した
635デフォルトの名無しさん
2017/09/09(土) 12:15:47.61ID:OV/mK/gQ C/C++の場合、初心者の方がポインタが好きで、多用する傾向があるよね
636デフォルトの名無しさん
2017/09/09(土) 12:36:18.85ID:arXtWn5o 書店やネットで調べたらポインタの話題が必ず出るし、メモリリークになるから、ポインタ使わないと言語が使えません的な雰囲気があった
637デフォルトの名無しさん
2017/09/09(土) 12:57:49.50ID:X7OoIJoK そこでメモリポインタですよ
638デフォルトの名無しさん
2017/09/09(土) 12:58:17.28ID:D8z5xRC+ 低レベルな処理はポインタ必須
上しか書かないなら生で使わないことも可能
上しか書かないなら生で使わないことも可能
639デフォルトの名無しさん
2017/09/09(土) 13:07:28.29ID:4g0rauvm >>638
いつも考えるんですけれども低レイヤーでもポインタを使わないことは可能なんでしょうか?ポインタを使わないけれども低レイヤまで対応している言語はなんでしょうか
いつも考えるんですけれども低レイヤーでもポインタを使わないことは可能なんでしょうか?ポインタを使わないけれども低レイヤまで対応している言語はなんでしょうか
640デフォルトの名無しさん
2017/09/09(土) 13:34:55.85ID:ayit12uD いつも思うのだがポインタ恐怖症って何なのか?
641デフォルトの名無しさん
2017/09/09(土) 13:55:13.28ID:xEPuJyU1 低レベルな処理でポインタが便利と言われるのはなぜか
言葉で語るのは大変なのでコードで語ろう
hoge *p = (hoge)nanika_no_memory_block;
p->piyo = 100;
これが出来る言語は、あまりない
言葉で語るのは大変なのでコードで語ろう
hoge *p = (hoge)nanika_no_memory_block;
p->piyo = 100;
これが出来る言語は、あまりない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- 映画史上もっとも“スカッとする”結末の作品5選 [muffin★]
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- ワイ刀オタ、欲しい刀が中々ネットで見つからず咽び泣く
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【訃報】日経平均先物逝く、円安株安債券安 [943688309]
- 2045年からきたけど質問ある?
- 【悲報】立憲岡田「間違った答弁をした高市総理に問題がある」→愛国者ブチギレ炎上 [834922174]
