探検
0からの、超初心者C++相談室
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2018/11/12(月) 14:55:13.35ID:Tf74ZWQr 何にも知らない0からの出発、超初心者のためのC++相談室
523デフォルトの名無しさん
2023/07/29(土) 20:25:36.66ID:xEb8mTKO シャー専用ptr
5241
2023/09/03(日) 20:55:45.58ID:/ExZEMtW 「プログラム」作るのって、やってみたいけど、全然知らないから、教えて欲しい。
からのスレの目的で建てました。
からのスレの目的で建てました。
525デフォルトの名無しさん
2023/09/03(日) 20:59:12.95ID:W287fTtw まず、何が作りたいかイメージしてみましょう
526デフォルトの名無しさん
2023/09/04(月) 10:11:49.98ID:/ASAZOX6 >>524 がC++をやるのは早過ぎる
先にpythonでもやってみろ
先にpythonでもやってみろ
527デフォルトの名無しさん
2023/10/02(月) 22:07:14.88ID:l4Vvzubd 次のプログラムを実行するとコメントのように出力がされ、mainの最後で例外が発生してしまいます。
なぜ例外が発生するかわかる方教えてください。
mainを通してnewは2回実行され、deleteも2回実行されるので空ポインタをdeleteしていることもないと思うのです。
#include <iostream>
using namespace std;
class Csmp1 {
private:
int x;
int* p;
public:
Csmp1(int n);
~Csmp1();
void disp() { cout << "x=" << x << endl;}
};
Csmp1::Csmp1(int n) {
x = n;
p = new int;
cout << "constructor " << x << endl;
}
Csmp1::~Csmp1() {
delete p;
cout << "destructor " << x << endl;
}
int main()
{
Csmp1 d3(300); // "constructor 300"と出力
d3.disp(); // "x=300"と出力
d3 = Csmp1(400); // "constructor 400"と出力し、その後"destructor 400"と出力
d3.disp(); // x=400と出力
return 0;
} // デストラクタが呼ばれ、delete の部分で"Unknowin signal"例外発生
なぜ例外が発生するかわかる方教えてください。
mainを通してnewは2回実行され、deleteも2回実行されるので空ポインタをdeleteしていることもないと思うのです。
#include <iostream>
using namespace std;
class Csmp1 {
private:
int x;
int* p;
public:
Csmp1(int n);
~Csmp1();
void disp() { cout << "x=" << x << endl;}
};
Csmp1::Csmp1(int n) {
x = n;
p = new int;
cout << "constructor " << x << endl;
}
Csmp1::~Csmp1() {
delete p;
cout << "destructor " << x << endl;
}
int main()
{
Csmp1 d3(300); // "constructor 300"と出力
d3.disp(); // "x=300"と出力
d3 = Csmp1(400); // "constructor 400"と出力し、その後"destructor 400"と出力
d3.disp(); // x=400と出力
return 0;
} // デストラクタが呼ばれ、delete の部分で"Unknowin signal"例外発生
528蟻人間 ◆T6xkBnTXz7B0
2023/10/02(月) 22:12:06.36ID:/sjCb2h4 >>527
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
529蟻人間 ◆T6xkBnTXz7B0
2023/10/02(月) 22:12:09.92ID:/sjCb2h4 >>527
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
530蟻人間 ◆T6xkBnTXz7B0
2023/10/02(月) 22:12:23.61ID:/sjCb2h4 >>527
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
531蟻人間 ◆T6xkBnTXz7B0
2023/10/02(月) 22:12:42.13ID:/sjCb2h4 >>527
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
d3 への代入で暗黙のコピーコンストラクタが使われている。コピーコンストラクタを適切に定義すれば解决する。
532蟻人間 ◆T6xkBnTXz7B0
2023/10/02(月) 22:18:32.15ID:/sjCb2h4 連投すみません。コピーコンストラクタと、代入もです。
533はちみつ餃子 ◆8X2XSCHEME
2023/10/03(火) 00:13:21.44ID:OUiDjLFt >>527
暗黙に生成される代入演算子は全てのサブオブジェクトを代入したような挙動になるルール。
ポインタを代入した場合には代入元と代入先のポインタが指す先のオブジェクトは同一なので
一方のポインタを通じて delete したならもう一方のポインタからオブジェクトに触れようとしてはならない。
(もう存在しないので。)
この場合は
d3 = Csmp1(400);
としたときに生成される一時オブジェクトはこの式が終わった時点で解体されるので
d3 内にあるポインタはデストラクタで delete 済み、すなわち無効なポインタとなる。
d3 のデストラクタが起動したときはデータメンバ p が指している先は無効なので
無効なポインタをいじったことになって問題が生じる。
それと d3 のコンストラクトのときに new したオブジェクトはどこからも delete されてない。
暗黙に生成される代入演算子は全てのサブオブジェクトを代入したような挙動になるルール。
ポインタを代入した場合には代入元と代入先のポインタが指す先のオブジェクトは同一なので
一方のポインタを通じて delete したならもう一方のポインタからオブジェクトに触れようとしてはならない。
(もう存在しないので。)
この場合は
d3 = Csmp1(400);
としたときに生成される一時オブジェクトはこの式が終わった時点で解体されるので
d3 内にあるポインタはデストラクタで delete 済み、すなわち無効なポインタとなる。
d3 のデストラクタが起動したときはデータメンバ p が指している先は無効なので
無効なポインタをいじったことになって問題が生じる。
それと d3 のコンストラクトのときに new したオブジェクトはどこからも delete されてない。
534527
2023/10/03(火) 00:55:04.57ID:RKQFDOr6 >>532-533
お二人さま ありがとうございます。
>d3 = Csmp1(400);としたときに生成される一時オブジェクトはこの式が終わった時点で解体される
右辺により生成されるオブジェクトが単にd3に格納されるのではないのですか。
それと入れ替わりに、d3コンストラクト時のオブジェクトのデストラクタが呼ばれると思ってました。
(どこからも参照されなくなるので)
自分が根本的に誤っている気がします、すみませんが上の内容でおかしい点を教えてください。
お二人さま ありがとうございます。
>d3 = Csmp1(400);としたときに生成される一時オブジェクトはこの式が終わった時点で解体される
右辺により生成されるオブジェクトが単にd3に格納されるのではないのですか。
それと入れ替わりに、d3コンストラクト時のオブジェクトのデストラクタが呼ばれると思ってました。
(どこからも参照されなくなるので)
自分が根本的に誤っている気がします、すみませんが上の内容でおかしい点を教えてください。
535はちみつ餃子 ◆8X2XSCHEME
2023/10/03(火) 02:13:14.63ID:OUiDjLFt >>534
> 右辺により生成されるオブジェクトが単にd3に格納
JavaScript とか Python の動的型言語の経験があるのかな?
それとも Java や C# の参照型のモデルで考えてる?
C++ では左辺はメモリ上の特定の場所に対応づいていて、
別の場所 (右辺で生成される一時オブジェクト) にあるものを格納するというのは
コピーするということ。
その上で不要になった一時オブジェクトは解体される。
一時オブジェクトは一部の例外を除いて完結式 (完全式ということもある) の終わりのタイミングで
解体されるルールなのでこの場合は行の終わりが解体のタイミングということになる。
> 右辺により生成されるオブジェクトが単にd3に格納
JavaScript とか Python の動的型言語の経験があるのかな?
それとも Java や C# の参照型のモデルで考えてる?
C++ では左辺はメモリ上の特定の場所に対応づいていて、
別の場所 (右辺で生成される一時オブジェクト) にあるものを格納するというのは
コピーするということ。
その上で不要になった一時オブジェクトは解体される。
一時オブジェクトは一部の例外を除いて完結式 (完全式ということもある) の終わりのタイミングで
解体されるルールなのでこの場合は行の終わりが解体のタイミングということになる。
536はちみつ餃子 ◆8X2XSCHEME
2023/10/03(火) 02:13:25.78ID:OUiDjLFt >>534
> 右辺により生成されるオブジェクトが単にd3に格納
JavaScript とか Python の動的型言語の経験があるのかな?
それとも Java や C# の参照型のモデルで考えてる?
C++ では左辺はメモリ上の特定の場所に対応づいていて、
別の場所 (右辺で生成される一時オブジェクト) にあるものを格納するというのは
コピーするということ。
その上で不要になった一時オブジェクトは解体される。
一時オブジェクトは一部の例外を除いて完結式 (完全式ということもある) の終わりのタイミングで
解体されるルールなのでこの場合は行の終わりが解体のタイミングということになる。
> 右辺により生成されるオブジェクトが単にd3に格納
JavaScript とか Python の動的型言語の経験があるのかな?
それとも Java や C# の参照型のモデルで考えてる?
C++ では左辺はメモリ上の特定の場所に対応づいていて、
別の場所 (右辺で生成される一時オブジェクト) にあるものを格納するというのは
コピーするということ。
その上で不要になった一時オブジェクトは解体される。
一時オブジェクトは一部の例外を除いて完結式 (完全式ということもある) の終わりのタイミングで
解体されるルールなのでこの場合は行の終わりが解体のタイミングということになる。
537はちみつ餃子 ◆8X2XSCHEME
2023/10/03(火) 02:17:47.16ID:OUiDjLFt サーバから書込みエラーが返ってきたのを専ブラの機能でリトライしたら多重投稿になってしまってるな。
なんか不安定な状況っぽい
なんか不安定な状況っぽい
538デフォルトの名無しさん
2023/10/05(木) 17:15:14.18ID:WXXGTjkD みんなでリトライするからF5攻撃並みに自爆DOS攻撃
539デフォルトの名無しさん
2023/10/05(木) 18:29:28.73ID:S7K0dlIY540デフォルトの名無しさん
2023/10/06(金) 10:09:01.67ID:Zl0hPCVy newとdeleteを直で呼んでるかどうかと
今回の問題(コピーが発生してるかどうか)は
関係無いんじゃね?
今回の問題(コピーが発生してるかどうか)は
関係無いんじゃね?
541デフォルトの名無しさん
2023/10/06(金) 10:16:23.02ID:QFTcWZUD いきなりC++から入るとは…
考え直した方がいい
考え直した方がいい
542デフォルトの名無しさん
2023/10/06(金) 12:08:09.60ID:xj8n2YWF543デフォルトの名無しさん
2023/10/06(金) 13:16:53.99ID:Zl0hPCVy544はちみつ餃子 ◆8X2XSCHEME
2023/10/06(金) 16:48:00.89ID:R7EjAYTn 両方やっとけばええじゃろ。
545デフォルトの名無しさん
2023/10/06(金) 21:05:50.93ID:BgvqARb2 vector dp(N+1,vector(i+1,vector<mint>(i,0)));
これはdp[N+1][i+1][i]個のデータを確保していると思っておk?
これはdp[N+1][i+1][i]個のデータを確保していると思っておk?
546デフォルトの名無しさん
2023/10/06(金) 21:10:07.75ID:G9Jlm58L OK牧場!
547デフォルトの名無しさん
2023/10/06(金) 21:44:11.09ID:BgvqARb2 TXH!
548527
2023/10/16(月) 23:49:47.91ID:6sfjI2pS >>535 を始めとして皆さんまたまたありがとうございます。
アセンブラ、Cを長くやってきたあと、最近C#を少し覚えたのでそちらと混同していました。
コピーコンストラクタと代入の演算子関数を作ろうとしていますがまだ途中。少しずつ進めます。
アセンブラ、Cを長くやってきたあと、最近C#を少し覚えたのでそちらと混同していました。
コピーコンストラクタと代入の演算子関数を作ろうとしていますがまだ途中。少しずつ進めます。
549デフォルトの名無しさん
2023/10/17(火) 23:09:31.94ID:cH9YbrYr 既製品のクラスライブラリについて、クラス階層が深いところのクラスは、公開メンバの全体をひと目で見渡すことができません。
マニュアルや継承のツリーををたどって地道に調べるしかないのですか。
マニュアルや継承のツリーををたどって地道に調べるしかないのですか。
550はちみつ餃子 ◆8X2XSCHEME
2023/10/18(水) 09:51:20.64ID:UZlHr99J551デフォルトの名無しさん
2023/10/18(水) 17:06:40.02ID:d+gN3jrr 既製品ならドキュメントあるだろ
ドキュメントで謳ってないことはやるべきでない
ドキュメントで謳ってないことはやるべきでない
552デフォルトの名無しさん
2023/10/18(水) 21:01:33.56ID:XEk7oAP2 visual studio community 2022で、
他のソリューションで作成されたmoduleをimportする方法がわかりません。
#includeみたいにパスを指定する方法とかがあるんでしょうか?
他のソリューションで作成されたmoduleをimportする方法がわかりません。
#includeみたいにパスを指定する方法とかがあるんでしょうか?
553デフォルトの名無しさん
2023/10/18(水) 21:18:35.91ID:GW9b62tt あるよ
554デフォルトの名無しさん
2023/10/18(水) 22:46:30.83ID:XEk7oAP2 >>553
ぜひ教えてください!
ぜひ教えてください!
555デフォルトの名無しさん
2023/10/19(木) 10:07:14.52ID:W1XtHktx 外部モジュール取り込みは言語仕様じゃ無くてIDEの機能だから
556デフォルトの名無しさん
2023/10/20(金) 09:56:30.99ID:/M3RKJCH IDEに頼ってるとアホになるよ
557デフォルトの名無しさん
2023/10/21(土) 16:32:35.29ID:dhBJRkMq 0のうちにやめとけ
時間がもったいない
時間がもったいない
558デフォルトの名無しさん
2023/10/26(木) 23:16:10.15ID:4gABazLN typedef uint8_t byte;
:
byte a = 3;
uint8_t b = a;
bの初期化は型不一致エラーにならないと思います。
コンパイラは型の異なる変数の初期化や代入を見つけると、typedefを探して元の型が同一かを調べてエラーにするかどうかを決めるのですか。
:
byte a = 3;
uint8_t b = a;
bの初期化は型不一致エラーにならないと思います。
コンパイラは型の異なる変数の初期化や代入を見つけると、typedefを探して元の型が同一かを調べてエラーにするかどうかを決めるのですか。
559デフォルトの名無しさん
2023/10/26(木) 23:23:19.82ID:oN20rU1J >>558
typedef は型の別名を作る機能であって新しい型を作らない。
typedef は型の別名を作る機能であって新しい型を作らない。
560デフォルトの名無しさん
2023/11/05(日) 12:44:18.01ID:iVzKXsmj Visual StudioでソリューションAでビルドしたブツ(.exe、.dll、lib)、シンボルファイル(.pdb)、必要なヘッダファイル(.h)
をソリューションBで取り込むの場合、Aのビルド後イベントとBのビルド前イベントを駆使してフォルダのパスは
"$(Solution)..\x\$(Platform)\$(Configuration)" みたいなマクロで解決、みたいなローテク頼みという印象、
Visual Studio 2019以降だと今は実はもっと簡単?
をソリューションBで取り込むの場合、Aのビルド後イベントとBのビルド前イベントを駆使してフォルダのパスは
"$(Solution)..\x\$(Platform)\$(Configuration)" みたいなマクロで解決、みたいなローテク頼みという印象、
Visual Studio 2019以降だと今は実はもっと簡単?
561デフォルトの名無しさん
2023/11/10(金) 23:40:20.59ID:mtEH7OmF class MyClass {
public:
MyClass();
:
};
int main()
{
MyClass* c = new MyClass(); ①
MyClass d;
MyClass* dp = &d; ②
:
}
オブジェクトのポインタは①や②のように取得できると思います。
私からすると①はdeleteしなければならないのでできれば使いたくない。
①の書き方は、よく入門書に出てくる、継承関係にあるポインタの相互代入のためにあると考えて正しいですか。
public:
MyClass();
:
};
int main()
{
MyClass* c = new MyClass(); ①
MyClass d;
MyClass* dp = &d; ②
:
}
オブジェクトのポインタは①や②のように取得できると思います。
私からすると①はdeleteしなければならないのでできれば使いたくない。
①の書き方は、よく入門書に出てくる、継承関係にあるポインタの相互代入のためにあると考えて正しいですか。
562デフォルトの名無しさん
2023/11/10(金) 23:49:08.54ID:VDRR6isO >>561
その「相互代入」って何ですか?
その「相互代入」って何ですか?
563はちみつ餃子 ◆8X2XSCHEME
2023/11/10(金) 23:56:43.46ID:Irnop6+y >>561
自動変数の寿命はスコープ単位だから
それより長い寿命のオブジェクトが必要なら new する。
寿命の種類のことを Storage duration といい、
new で生成したオブジェクトは Dynamic storage duration に該当する。
継承関係がどうこうというのは何が言いたいのかよくわからないが、
ポインタの性質はオブジェクトの寿命とは関係ない。
自動変数の寿命はスコープ単位だから
それより長い寿命のオブジェクトが必要なら new する。
寿命の種類のことを Storage duration といい、
new で生成したオブジェクトは Dynamic storage duration に該当する。
継承関係がどうこうというのは何が言いたいのかよくわからないが、
ポインタの性質はオブジェクトの寿命とは関係ない。
564デフォルトの名無しさん
2023/11/12(日) 00:13:49.90ID:M40i1rJ9 相互代入は言葉がおかしいですね。
基底クラスのポインタで派生クラスのオブジェクトをポイントできるというものです。
オブジェクトのボインタを使う場面があまりないので用途を聞きました。
>>563
>自動変数の寿命はスコープ単位だから
それより長い寿命のオブジェクトが必要なら new する。
自分の場合、関数内より長い寿命が必要となったらそれはもうグローバルにしてしまいます。設計方針がよくないですかね。
基底クラスのポインタで派生クラスのオブジェクトをポイントできるというものです。
オブジェクトのボインタを使う場面があまりないので用途を聞きました。
>>563
>自動変数の寿命はスコープ単位だから
それより長い寿命のオブジェクトが必要なら new する。
自分の場合、関数内より長い寿命が必要となったらそれはもうグローバルにしてしまいます。設計方針がよくないですかね。
565はちみつ餃子 ◆8X2XSCHEME
2023/11/12(日) 02:00:51.06ID:O0gb6uIB >>564
グローバル変数として書いたオブジェクトの寿命は static storage duration に該当する。
この static というやつは main が始まる前に構築されて main が終わった後に解体されるので
必要以上に長い寿命になってしまうことが多いし、
実行時の情報を元にして構築するオブジェクトを static にはしようがない。
dynamic (new でのオブジェクト生成) が必要になる場面はごく普通にある。
ごく普通にあるのに使わずに済ませてるならたぶん不自然な設計になってると思う。
グローバル変数は寿命も長すぎるがスコープも広すぎる。
人間は自分が思ってるより馬鹿だから最初にどういう想定をしてたのか忘れて要らんことをしてワヤにする。
触らせたくないものは隠しておくのはカプセル化の考え方の重要な部分。
本当に人間は忘れるし間違える。
部品ごとに間違った使い方を出来ないように配慮しておかないと規模を大きく出来ない。
まあ逆に言えば小さいプログラムではそんなに凝ったことをしなくても大丈夫なんだけど。
グローバル変数として書いたオブジェクトの寿命は static storage duration に該当する。
この static というやつは main が始まる前に構築されて main が終わった後に解体されるので
必要以上に長い寿命になってしまうことが多いし、
実行時の情報を元にして構築するオブジェクトを static にはしようがない。
dynamic (new でのオブジェクト生成) が必要になる場面はごく普通にある。
ごく普通にあるのに使わずに済ませてるならたぶん不自然な設計になってると思う。
グローバル変数は寿命も長すぎるがスコープも広すぎる。
人間は自分が思ってるより馬鹿だから最初にどういう想定をしてたのか忘れて要らんことをしてワヤにする。
触らせたくないものは隠しておくのはカプセル化の考え方の重要な部分。
本当に人間は忘れるし間違える。
部品ごとに間違った使い方を出来ないように配慮しておかないと規模を大きく出来ない。
まあ逆に言えば小さいプログラムではそんなに凝ったことをしなくても大丈夫なんだけど。
566デフォルトの名無しさん
2023/11/12(日) 11:04:18.35ID:l8rhUXJt >>561
>@の書き方は、よく入門書に出てくる、継承関係にあるポインタの相互代入のためにあると考えて正しいですか。
そのためだけにあるという訳ではない
>私からすると@はdeleteしなければならないのでできれば使いたくない。
生のポインタではなくスマートポインタ(unique_ptrやshared_ptr)を使えば
deleteはスマートポインタがやってくれる
構築は uniqu_ptr <MyClass> = new MyClass(); や
uniqu_ptr <MyClass> = make_unique <MyClass> (); のようにやる
>@の書き方は、よく入門書に出てくる、継承関係にあるポインタの相互代入のためにあると考えて正しいですか。
そのためだけにあるという訳ではない
>私からすると@はdeleteしなければならないのでできれば使いたくない。
生のポインタではなくスマートポインタ(unique_ptrやshared_ptr)を使えば
deleteはスマートポインタがやってくれる
構築は uniqu_ptr <MyClass> = new MyClass(); や
uniqu_ptr <MyClass> = make_unique <MyClass> (); のようにやる
567デフォルトの名無しさん
2023/11/12(日) 13:14:04.39ID:xpiKETrj > 基底クラスのポインタで派生クラスのオブジェクトをポイントできるというものです。
> オブジェクトのボインタを使う場面があまりないので用途を聞きました。
アップキャストのことだろうかね。
必ずといっていいほど使う機会がある。関数の引数にオブジェクトを渡すときとか
> オブジェクトのボインタを使う場面があまりないので用途を聞きました。
アップキャストのことだろうかね。
必ずといっていいほど使う機会がある。関数の引数にオブジェクトを渡すときとか
568デフォルトの名無しさん
2023/11/13(月) 06:27:48.00ID:qbVz2ceg >>561 は、最初から必要数が決まっているオブジェクトしか作ったことがないのかな。
リストやツリー構造を自作していれば、①が必要なケースは分かると思うけど。
リストやツリー構造を自作していれば、①が必要なケースは分かると思うけど。
569デフォルトの名無しさん
2023/11/13(月) 10:31:45.02ID:IRswNIWu >>567
型チェックしなきゃ危険だけどな
型チェックしなきゃ危険だけどな
570デフォルトの名無しさん
2023/11/13(月) 13:26:36.10ID:qAieNn1D uniqu_ptr
571デフォルトの名無しさん
2023/11/13(月) 18:54:22.80ID:CCXWxw1E572デフォルトの名無しさん
2023/11/13(月) 23:59:54.01ID:RLYu3oMv573デフォルトの名無しさん
2023/11/14(火) 00:03:40.68ID:F1cdKor4 >>567
だいたい参照で済んでしまいます
だいたい参照で済んでしまいます
574デフォルトの名無しさん
2023/11/14(火) 12:46:18.30ID:SRCspH78 mallocもnewも使ったこと無いってやばいぞ
575はちみつ餃子 ◆8X2XSCHEME
2023/11/14(火) 15:58:08.40ID:oTbgWDDI new 演算子はオーバーロードも出来て、型ごとにメモリの確保の仕方を変えるといったようなことも出来る。
メモリの確保と値の構築を別のレイヤとして定義できるということに意味がある。 (いわゆる関心の分離?)
低レイヤでも便利な場面はたぶんある。
分離する甲斐がないほど小規模ならべた書きが悪いわけじゃないけど
あえてべた書きという設計を選ぶってのとなんもわからんで使わないってのでは違う。
知っておくに越したことはないよ。
メモリの確保と値の構築を別のレイヤとして定義できるということに意味がある。 (いわゆる関心の分離?)
低レイヤでも便利な場面はたぶんある。
分離する甲斐がないほど小規模ならべた書きが悪いわけじゃないけど
あえてべた書きという設計を選ぶってのとなんもわからんで使わないってのでは違う。
知っておくに越したことはないよ。
576デフォルトの名無しさん
2023/11/14(火) 21:59:36.46ID:WxE96Zj2 空配列を用意してそれを順繰り使い回す
チープなCPUでは必須の方法
チープなCPUでは必須の方法
577デフォルトの名無しさん
2023/11/14(火) 22:15:51.21ID:VpxEmvp/ RAM2KBでmallocが必要かどうか
578デフォルトの名無しさん
2023/11/15(水) 09:06:17.34ID:vh+zgKB1 よく
A a = new A();
a->b();
delete a;
みたいに生成してすぐ解放ってのがありますけど、
A a;
a.b();
じゃ駄目なんでしょうか。前者に何のメリットがあるんでしょうか。
A a = new A();
a->b();
delete a;
みたいに生成してすぐ解放ってのがありますけど、
A a;
a.b();
じゃ駄目なんでしょうか。前者に何のメリットがあるんでしょうか。
579デフォルトの名無しさん
2023/11/15(水) 09:39:21.05ID:88mXe6hW 後者はスタックを消費するから A が巨大なオブジェクトだったら困るとかかな
580デフォルトの名無しさん
2023/11/15(水) 09:40:08.83ID:7t1hSBTd581デフォルトの名無しさん
2023/11/15(水) 10:25:46.06ID:2QF9cM/v スタック?
そんな所にゃ領域取らないだろ
そんな所にゃ領域取らないだろ
582デフォルトの名無しさん
2023/11/15(水) 16:06:06.00ID:rnHf5KLb 何したらここの人らみたいにプログラム詳しくなれるの?PC98からやらなきゃダメ?
583はちみつ餃子 ◆8X2XSCHEME
2023/11/15(水) 16:35:01.46ID:k729Xl/N >>578
> ありますけど、
ないよ……。
少なくともそう頻繁にはない。
あるとしたら >>579 が指摘するように A が特に巨大な場合というのはひとつの可能性。
ただ、巨大になるのがわかってるならリソースを分割して A の中で
上手いことやりくりする (A 自体の大きさは抑える) べきで、
クラスを使う側で配慮しなきゃならないのは普通は悪い設計だと思う。
第二の可能性として、 new 演算子をオーバーロードして
そのオブジェクトがメモリの特定の場所に対応づけられる場合。
メモリバス経由でデバイスと接続するようなアーキテクチャもまあまあ有るから
それを C++ 上ではオブジェクトのように抽象化するということはあるかもしれない。
でもそれは低いレイヤだけの話で、
適当にラップするクラスを作ってもうちょっと抽象度の高いクラスを挟むのが普通だと思う。
> ありますけど、
ないよ……。
少なくともそう頻繁にはない。
あるとしたら >>579 が指摘するように A が特に巨大な場合というのはひとつの可能性。
ただ、巨大になるのがわかってるならリソースを分割して A の中で
上手いことやりくりする (A 自体の大きさは抑える) べきで、
クラスを使う側で配慮しなきゃならないのは普通は悪い設計だと思う。
第二の可能性として、 new 演算子をオーバーロードして
そのオブジェクトがメモリの特定の場所に対応づけられる場合。
メモリバス経由でデバイスと接続するようなアーキテクチャもまあまあ有るから
それを C++ 上ではオブジェクトのように抽象化するということはあるかもしれない。
でもそれは低いレイヤだけの話で、
適当にラップするクラスを作ってもうちょっと抽象度の高いクラスを挟むのが普通だと思う。
584デフォルトの名無しさん
2023/11/15(水) 18:55:56.04ID:aqUxtLPE 超初心者スレで揚げ足とったり、マウントしたり
585デフォルトの名無しさん
2023/11/15(水) 19:46:52.63ID:O3I3kWYX >>582
何か作ってるうちに嫌でも詳しくなるよ
何か作ってるうちに嫌でも詳しくなるよ
586はちみつ餃子 ◆8X2XSCHEME
2023/11/15(水) 21:31:49.26ID:k729Xl/N PC9801 時代を知ってる人は色々と詳しいと思うがその知識が役立っているというわけでもなくて、 PC9801 時代からの三十年くらいあれば詳しくなって当たり前ってだけだぞ。
たくさんの知識を身に付けるにはたくさん学ぶというシンプルな話。
たくさんの知識を身に付けるにはたくさん学ぶというシンプルな話。
587デフォルトの名無しさん
2023/11/16(木) 11:26:46.68ID:QXdh7keC 当時は役に立ったけど今はオワコンの技術と
今でも役に立ってる技術と
どっちが割合多い?
今でも役に立ってる技術と
どっちが割合多い?
588デフォルトの名無しさん
2023/11/16(木) 11:55:31.84ID:nxuWB9A/ 「技術は陳腐化するが考え方は永遠である」
589はちみつ餃子 ◆8X2XSCHEME
2023/11/16(木) 14:01:30.65ID:brAf4s3Y 新しい技術的流行が昔からあったやつの焼き直しってことは珍しいことじゃない。
「なんや、結局は××やないか」というときに××自体が廃れていてもう使わなくても
理解のためには役立っているのでオワコンとも役に立ってるとも言えたりする。
「なんや、結局は××やないか」というときに××自体が廃れていてもう使わなくても
理解のためには役立っているのでオワコンとも役に立ってるとも言えたりする。
590デフォルトの名無しさん
2023/11/16(木) 15:18:16.01ID:QXdh7keC ActiveXってCOMだよね
COMってOLEだよね
COMってOLEだよね
591デフォルトの名無しさん
2023/11/20(月) 15:56:09.22ID:QJSPRwrd こんにちは坂本と申します。
C++を0から勉強したく書き込み致しました。
私ごとですが先月定年退職し、やっと自由な時間がもてる様になりました。
在職中ずっとプログラミングの勉強をしたかったのですが子育てや職場がプラントの電気機械保全業務の3交代だった為に定年後を楽しみに我慢してまいりました。
プログラミングの知識は全くなく制御盤のPLCでニーモニック語でリストプログラミングをするぐらいしか経験はありません。
有料でもかまいませんので何回でも質問ができ、すぐに返答と解説をして頂けるサービスや学習機関がございましたら教えて頂きたく書き込ませてもらいました。
漠然とした質問で申し訳ありませんが今月よりプログラミングの勉強を独学で始めましたが質問できる知り合いもいなく困り果てております。
長文失礼致しました。
C++を0から勉強したく書き込み致しました。
私ごとですが先月定年退職し、やっと自由な時間がもてる様になりました。
在職中ずっとプログラミングの勉強をしたかったのですが子育てや職場がプラントの電気機械保全業務の3交代だった為に定年後を楽しみに我慢してまいりました。
プログラミングの知識は全くなく制御盤のPLCでニーモニック語でリストプログラミングをするぐらいしか経験はありません。
有料でもかまいませんので何回でも質問ができ、すぐに返答と解説をして頂けるサービスや学習機関がございましたら教えて頂きたく書き込ませてもらいました。
漠然とした質問で申し訳ありませんが今月よりプログラミングの勉強を独学で始めましたが質問できる知り合いもいなく困り果てております。
長文失礼致しました。
592デフォルトの名無しさん
2023/11/20(月) 19:07:01.26ID:UNSN9Hhc >>590
DDEは?
DDEは?
593デフォルトの名無しさん
2023/11/21(火) 00:24:28.42ID:cXhp/VaI C/C++ はポインターがあるから、ややこしい。
10年やっても無理
Ruby をやれ。
半年で、Ruby on Rails も出来る
10年やっても無理
Ruby をやれ。
半年で、Ruby on Rails も出来る
594デフォルトの名無しさん
2023/11/21(火) 11:11:38.44ID:HSO31doi 神社code
595デフォルトの名無しさん
2023/11/21(火) 14:22:46.70ID:tYm3I+7J ポインターが分からない奴は
プログラムを組む資格がない
プログラムを組む資格がない
596はちみつ餃子 ◆8X2XSCHEME
2023/11/21(火) 17:27:32.66ID:4ADiN9xr ちゃんとした本があれば独学でそんなに困らないと思うけどな。
入門書の各章をじっくり読んで理解してから次の章に進むみたいな学習法をしているなら
詰まったときにどうしていいかわからなくなりがちなのでやめたほうがいいと思う。
色んな要素が相互に絡むので順番通りに学べるようなものじゃないから。
理解できなくてもたくさん詰め込んでいけばその内に繋がりがわかってくる。
「最初は」熟考しなくてもいい。 入ってない知識が関連するなら考えてもどうせわからん。
入門書の各章をじっくり読んで理解してから次の章に進むみたいな学習法をしているなら
詰まったときにどうしていいかわからなくなりがちなのでやめたほうがいいと思う。
色んな要素が相互に絡むので順番通りに学べるようなものじゃないから。
理解できなくてもたくさん詰め込んでいけばその内に繋がりがわかってくる。
「最初は」熟考しなくてもいい。 入ってない知識が関連するなら考えてもどうせわからん。
597デフォルトの名無しさん
2023/11/21(火) 17:38:45.53ID:oh7zlSJI598デフォルトの名無しさん
2023/11/21(火) 18:05:44.93ID:tYm3I+7J ポインター: 変数が入っているアドレスの数字
なんも難しいことはない
なんも難しいことはない
599デフォルトの名無しさん
2023/11/21(火) 18:24:30.60ID:fyFN08Ef インデックスって言えば分かる?
コンピュータにあるメモリー全体のインデックス番号
コンピュータにあるメモリー全体のインデックス番号
600デフォルトの名無しさん
2023/11/21(火) 18:35:32.85ID:Ai4yJ31G 俺も最初全然わからなかったけどC言語ポインタ完全制覇のおかげで覚えた
601デフォルトの名無しさん
2023/11/21(火) 19:20:18.31ID:JkIDzJ0A Java や C# にもポインタはあるしポインタを理解できなかったら他の言語も使えないよ
ポインタ自体は難しくないんだけど C/C++ ではポインタ演算できちゃうのが鬼門なんだよね
ポインタ自体は難しくないんだけど C/C++ ではポインタ演算できちゃうのが鬼門なんだよね
602デフォルトの名無しさん
2023/11/21(火) 20:49:14.51ID:TIZNoRj+ N88-BASICにポインタあったっけ?
603デフォルトの名無しさん
2023/11/21(火) 20:53:06.63ID:TIZNoRj+ ポインタの文法なんて入門書には必ず説明があるので直ぐ分かるとして
俺が初期に読んだ数冊の入門書には
それがプログラミングでどう役に立つのかが示されてなくて
悶々としながら読んでいたなぁ
俺が初期に読んだ数冊の入門書には
それがプログラミングでどう役に立つのかが示されてなくて
悶々としながら読んでいたなぁ
604デフォルトの名無しさん
2023/11/21(火) 21:38:13.97ID:fyFN08Ef ポインターなんて処理が糞遅いCPUをいかに速く動かすかって事以外に意味が無いからなぁ
605デフォルトの名無しさん
2023/11/21(火) 23:15:10.49ID:mJ6deMbY std::string str = "abc";
①str = str + "dd";
②str = "dd" + str;
これらの記述は有効のようです。
①の右辺はstr.operator+("dd");
と解釈でき理解できます。
②の右辺は "dd".operator+(str);
と書きかえるとこれは無効に見えます。
std::stringのoperator+のプロトタイプを調べたところテンプレートが駆使されており私では読めませんでした。
②が有効なのは、テンプレートの仕組み?でそう書けるようにつくられているからですか。
①str = str + "dd";
②str = "dd" + str;
これらの記述は有効のようです。
①の右辺はstr.operator+("dd");
と解釈でき理解できます。
②の右辺は "dd".operator+(str);
と書きかえるとこれは無効に見えます。
std::stringのoperator+のプロトタイプを調べたところテンプレートが駆使されており私では読めませんでした。
②が有効なのは、テンプレートの仕組み?でそう書けるようにつくられているからですか。
606はちみつ餃子 ◆8X2XSCHEME
2023/11/22(水) 06:21:16.63ID:xG0rhWaa >>605
非メンバ関数として定義されている。
つまり
str=std::operator+("dd", str);
に相当することをやってる。
メンバ関数として定義すると不都合が起こるから std::complex とかも非破壊的な二項演算子は非メンバ関数として定義するのが通例だよ。
非メンバ関数として定義されている。
つまり
str=std::operator+("dd", str);
に相当することをやってる。
メンバ関数として定義すると不都合が起こるから std::complex とかも非破壊的な二項演算子は非メンバ関数として定義するのが通例だよ。
607デフォルトの名無しさん
2023/11/23(木) 18:16:14.60ID:yQq1Seno >>606
本を見直したらfriendにするといい等ありました。
第1引数+第2引数、という記述があり、2個の引数を持つ+演算子関数が定義されている場合はそれが呼び出される決まりになっているのですね?
本を見直したらfriendにするといい等ありました。
第1引数+第2引数、という記述があり、2個の引数を持つ+演算子関数が定義されている場合はそれが呼び出される決まりになっているのですね?
608デフォルトの名無しさん
2023/11/23(木) 18:17:35.84ID:yQq1Seno stringから離れて一般的な質問です。↑
609はちみつ餃子 ◆8X2XSCHEME
2023/11/23(木) 20:11:53.97ID:V52ACnUy >>607
そう。非メンバ関数として二つの演算子を受けとる operator+ があれば a+b みたいに書いたときに operator+(a,b) に読み替えられると考えてよい。
(全ての演算子を非メンバ関数として定義できるわけではない。)
余談だけど ADL という変な規則があるのは演算子が名前空間修飾できないことに対処する必要があるというのが理由のひとつで、自分が定義するクラスではこれが上手いこと作用するように設計すると便利なこともあるかもね。
そう。非メンバ関数として二つの演算子を受けとる operator+ があれば a+b みたいに書いたときに operator+(a,b) に読み替えられると考えてよい。
(全ての演算子を非メンバ関数として定義できるわけではない。)
余談だけど ADL という変な規則があるのは演算子が名前空間修飾できないことに対処する必要があるというのが理由のひとつで、自分が定義するクラスではこれが上手いこと作用するように設計すると便利なこともあるかもね。
611デフォルトの名無しさん
2023/11/23(木) 20:15:11.03ID:0De2U7us 最小のサンプルコードを書いて自分で試すと分かるし身につくよ
612はちみつ餃子 ◆8X2XSCHEME
2023/11/23(木) 20:49:41.10ID:V52ACnUy 書いてみるというのは賛成。
でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
C++ には未定義とか処理系定義とかがいっぱいあるからテキトーに書いたプログラムの結果が保証された動作とは限らないから。
でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
C++ には未定義とか処理系定義とかがいっぱいあるからテキトーに書いたプログラムの結果が保証された動作とは限らないから。
613デフォルトの名無しさん
2023/11/25(土) 11:27:01.67ID:rcrc48ZO >>612
>でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
横から悪いがこれには反対させてもらう
もちろん動作からの仕様の決めつけは良くないが、人間は学習する動物なので書いて動作を見てこそ上達するんだよ
丸暗記だけで理解したと勘違いしてるやつが昨今多い(そしてそういう奴に限って何も作ってない)ので、そういうのを後押しはしないで欲しい
>でもあくまでも学んでから確かめるために書くのであって動作から言語仕様を推測したりはしないように。
横から悪いがこれには反対させてもらう
もちろん動作からの仕様の決めつけは良くないが、人間は学習する動物なので書いて動作を見てこそ上達するんだよ
丸暗記だけで理解したと勘違いしてるやつが昨今多い(そしてそういう奴に限って何も作ってない)ので、そういうのを後押しはしないで欲しい
614デフォルトの名無しさん
2023/11/25(土) 11:52:38.86ID:rcrc48ZO というか、自分の認識の間違いに気づくのもまた書いて試した時だからね(まれにコンパイラのバグだったりもするけど)
人間が頭の中で考えたことなんか穴だらけなんだから書いて試せるなら真っ先に試した方がいい
人間が頭の中で考えたことなんか穴だらけなんだから書いて試せるなら真っ先に試した方がいい
615デフォルトの名無しさん
2023/11/25(土) 12:13:14.81ID:vlVh3gWj617デフォルトの名無しさん
2023/11/25(土) 12:47:19.78ID:rKTwm3uz618デフォルトの名無しさん
2023/11/25(土) 12:50:17.30ID:rKTwm3uz619デフォルトの名無しさん
2023/11/25(土) 12:54:57.59ID:rKTwm3uz620はちみつ餃子 ◆8X2XSCHEME
2023/11/25(土) 13:45:51.01ID:BXmPXb0v621デフォルトの名無しさん
2023/11/25(土) 13:56:27.70ID:vlVh3gWj 「学んでから確かめるために書く」
↑反対されてるのはここでしょ
これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う
あなたが言ってるのは「これどうなるんだろう?」ではダメで「こうなるはずだ!」と学んでから動かせってことだよね?
それは初心者には結構むずかしい
↑反対されてるのはここでしょ
これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う
あなたが言ってるのは「これどうなるんだろう?」ではダメで「こうなるはずだ!」と学んでから動かせってことだよね?
それは初心者には結構むずかしい
622はちみつ餃子 ◆8X2XSCHEME
2023/11/25(土) 15:39:30.62ID:BXmPXb0v >>621
> これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う
私が言いたいのは推測できるものではないというところが主旨で、
自分が色々やってみたことが不確かな推測であることを認識した上で
きちんとした資料にあたって確かめるという順序でもかまわないとは思うよ。
出来るのならば。
やってない人が多いように私には見えているから否定的に言ってるわけだけど。
> 初心者には結構むずかしい
訓練せずに他のことをしてても出来るようにはならないでしょ。
やらなきゃずっと難しいよ。
C++ は複雑怪奇かつ規格改訂もあるのでベテランでも頻繁に仕様を参照するのが普通なわけで、
資料を参照するのを後回しにするような人間が後にそのような人間に変われるとは思わない。
> これどうなるんだろう?動かしてみよう!なるほどこうなるのか!という学び方でもいいと思う
私が言いたいのは推測できるものではないというところが主旨で、
自分が色々やってみたことが不確かな推測であることを認識した上で
きちんとした資料にあたって確かめるという順序でもかまわないとは思うよ。
出来るのならば。
やってない人が多いように私には見えているから否定的に言ってるわけだけど。
> 初心者には結構むずかしい
訓練せずに他のことをしてても出来るようにはならないでしょ。
やらなきゃずっと難しいよ。
C++ は複雑怪奇かつ規格改訂もあるのでベテランでも頻繁に仕様を参照するのが普通なわけで、
資料を参照するのを後回しにするような人間が後にそのような人間に変われるとは思わない。
623デフォルトの名無しさん
2023/11/25(土) 16:15:59.30ID:vlVh3gWj 「やってない人が多いように私には見えている」
多くの人が出来てないことを初心者に求めてもねェ
多くの人が出来てないことを初心者に求めてもねェ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【J SPORTS】FIFA U-17ワールドカップ ★9
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【ATP】テニス総合実況スレ2025 Part 211【WTA】
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 米シンクタンク「アメリカは台湾問題で"あいまい戦略"を取っている。高市早苗はこの方針から逸脱している」 [603416639]
- 【高市早苗】バス会社、中国からのキャンセルで12月で2000万円~3000万円の損失へ [115996789]
- かしこいワンコっていうVtuberの子知ってる?
- カレーライスぐちゃぐちゃに混ぜる奴🤣
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
