前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
探検
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
335はちみつ餃子 ◆8X2XSCHEME
2022/07/04(月) 18:04:55.71ID:3k8jHKP2 >>334
class キーワードを付けた場合にはクラスの宣言を同時にしたものとみなされる。
つまり class ptr* get_mPtr(); と class ptr* mPtr; は「このスコープで」 ptr を宣言したかのように扱われる。
もちろん実際には innerTest の中では ptr の定義はないので不完全型のままだが、
この ptr は Test::innerTest::ptr のつもりで解釈されてる。
グローバル空間で定義している ptr とは別物なので別物というエラーになるわけ。
class キーワードを付けた場合にはクラスの宣言を同時にしたものとみなされる。
つまり class ptr* get_mPtr(); と class ptr* mPtr; は「このスコープで」 ptr を宣言したかのように扱われる。
もちろん実際には innerTest の中では ptr の定義はないので不完全型のままだが、
この ptr は Test::innerTest::ptr のつもりで解釈されてる。
グローバル空間で定義している ptr とは別物なので別物というエラーになるわけ。
336デフォルトの名無しさん
2022/07/04(月) 18:34:14.66ID:PrdXwxk2 class ptr;
namespace Test {
...
namespace Test {
...
337デフォルトの名無しさん
2022/07/04(月) 18:53:01.66ID:tfDB1jS/ Cのstructと同じ感覚でclassって書いちゃってるのかこれ
338デフォルトの名無しさん
2022/07/04(月) 18:59:50.67ID:XQTVc721 >>335
> この ptr は Test::innerTest::ptr のつもりで解釈されてる。
Test::ptr だね。
https://timsong-cpp.github.io/cppwp/n4861/basic.scope.pdecl#7.2
> この ptr は Test::innerTest::ptr のつもりで解釈されてる。
Test::ptr だね。
https://timsong-cpp.github.io/cppwp/n4861/basic.scope.pdecl#7.2
339デフォルトの名無しさん
2022/07/04(月) 19:27:20.38ID:KuJlBNV3 >>335!336,338
ありがとうございます!
おっしゃる通りに名前空間の外で前方宣言し、ソース部分で定義したらうまくいきました!
特に理由がない限り、名前空間内部で定義してはいけない(戒め)
ありがとうございました!
ありがとうございます!
おっしゃる通りに名前空間の外で前方宣言し、ソース部分で定義したらうまくいきました!
特に理由がない限り、名前空間内部で定義してはいけない(戒め)
ありがとうございました!
340デフォルトの名無しさん
2022/07/05(火) 15:17:54.21ID:CUrAgxNd 有害だな
341蟻人間 ◆T6xkBnTXz7B0
2022/07/05(火) 20:29:56.62ID:ol9myr0e You guy
342デフォルトの名無しさん
2022/07/05(火) 23:44:59.73ID:tIUWM2dq VB.NETからバイナリをC++(JNI)に渡して受け取ったバイナリをJavaに渡したいんですけど、C++で受け取ったBYTEをjobjectに変換する方法が分かりません。
どなたかご存知でしょうか。
どなたかご存知でしょうか。
343デフォルトの名無しさん
2022/07/06(水) 23:58:31.79ID:Hb7nTur+ C++勉強中です。ムーブコンストラクタについて教えてください。
ムーブコンストラクタは、要はムーブ元の指すポインタをムーブ先に変更しているだけだと思います。
これはconstなしコンストラクタでも実現できると思いますが、意図を明示するためにコンストラクタが分かれていると思っていいですか?
また、ムーブコンストラクタの仮引数が右辺値参照になっている(std::moveした右辺値を渡す)理由がよく分からないのですが、これは決まり文句として覚えるしかないでしょうか?
ムーブコンストラクタは、要はムーブ元の指すポインタをムーブ先に変更しているだけだと思います。
これはconstなしコンストラクタでも実現できると思いますが、意図を明示するためにコンストラクタが分かれていると思っていいですか?
また、ムーブコンストラクタの仮引数が右辺値参照になっている(std::moveした右辺値を渡す)理由がよく分からないのですが、これは決まり文句として覚えるしかないでしょうか?
344デフォルトの名無しさん
2022/07/07(木) 00:12:38.45ID:wEF1aVE0345デフォルトの名無しさん
2022/07/07(木) 00:13:26.51ID:owvrtcUU ムーブって、所有者が移転してると考えた方が
場所なんてどうでもいいでしょう
場所なんてどうでもいいでしょう
346はちみつ餃子 ◆8X2XSCHEME
2022/07/07(木) 00:38:46.12ID:6JbvD3+y >>343
右辺値は大抵の場合に一時オブジェクトだからどうせすぐに破棄される。
後で別の場所で使うということがないと期待できるから内容を移動してしまっても問題にならないんだ。
だから右辺値を入力とするときは原則としてムーブ扱いにする。
右辺値は大抵の場合に一時オブジェクトだからどうせすぐに破棄される。
後で別の場所で使うということがないと期待できるから内容を移動してしまっても問題にならないんだ。
だから右辺値を入力とするときは原則としてムーブ扱いにする。
347デフォルトの名無しさん
2022/07/07(木) 08:00:15.88ID:dqsYDet1 多分、右辺値参照イコールmoveと覚えてしまってるのでは?
C++11より前は一時オブジェクトとそうでないものを文法上区別することが出来なかったのよ
moveはあくまでキャストに過ぎない、一時オブジェクトでないものを一時オブジェクト扱いにしてるだけ
C++11より前は一時オブジェクトとそうでないものを文法上区別することが出来なかったのよ
moveはあくまでキャストに過ぎない、一時オブジェクトでないものを一時オブジェクト扱いにしてるだけ
348343
2022/07/07(木) 23:27:53.10ID:jxXWRXC4 一時オブジェクトにキャストしてすぐ破棄されるようにしたと言っても、
右辺値参照に代入しているのでヌルポインタにするまでは使い続けられますよね
そもそもstd::moveで一時オブジェクトにキャスト、これを右辺値参照で束縛して有効期間を延ばす…って
初めから普通の変数を使えばいいのでは?と思ってしまいました
ムーブを表すための仕組みとして&&とstd::moveの組み合わせが追加されたということなんでしょうかね
右辺値参照に代入しているのでヌルポインタにするまでは使い続けられますよね
そもそもstd::moveで一時オブジェクトにキャスト、これを右辺値参照で束縛して有効期間を延ばす…って
初めから普通の変数を使えばいいのでは?と思ってしまいました
ムーブを表すための仕組みとして&&とstd::moveの組み合わせが追加されたということなんでしょうかね
349デフォルトの名無しさん
2022/07/07(木) 23:44:43.71ID:a8KVNXrY >>348
結局そのあたりも含めてC++で複雑化した様々な点を全てシンプルに綺麗に整理し直して分かりやすくした言語が望まれてRustが登場したんだろうね
結局そのあたりも含めてC++で複雑化した様々な点を全てシンプルに綺麗に整理し直して分かりやすくした言語が望まれてRustが登場したんだろうね
351はちみつ餃子 ◆8X2XSCHEME
2022/07/08(金) 00:21:33.36ID:5BE4kGYi352デフォルトの名無しさん
2022/07/08(金) 06:38:25.68ID:MdbO63iw 教科書の言葉適当に並べて分かったふりしてる感がすごい
353デフォルトの名無しさん
2022/07/08(金) 08:04:48.18ID:0Bd0SGWI ムーブは「所有権」をムーブさせるものなので、所有権という概念がないと理解できん
354デフォルトの名無しさん
2022/07/08(金) 08:29:23.83ID:ZqNcNR35355デフォルトの名無しさん
2022/07/08(金) 09:59:25.74ID:XQyLgyG5356デフォルトの名無しさん
2022/07/08(金) 10:12:31.24ID:yJZoYI93 rustのご本が高くてのう
357デフォルトの名無しさん
2022/07/08(金) 10:20:08.07ID:u/BCh/UE 右辺値参照って概念的に難しいよね
そもそも右辺値とはなんぞやというところから、一時オブジェクトの生成とそれが破棄されるまでのコンパイラ側の仕組みを的確に理解する必要がある
こんなのよく思いついたなと感心はするけどw
そもそも右辺値とはなんぞやというところから、一時オブジェクトの生成とそれが破棄されるまでのコンパイラ側の仕組みを的確に理解する必要がある
こんなのよく思いついたなと感心はするけどw
358デフォルトの名無しさん
2022/07/08(金) 10:47:23.92ID:lp4DRBe8 テンプレート関数で頻繁に出現する=演算子コピーによるオーバーヘッドを減らす必要に迫られただけの話ジャマイカ?
359デフォルトの名無しさん
2022/07/08(金) 10:52:14.97ID:u4+He/YT >>356
Rust The Book (日本語版)
https://doc.rust-jp.rs/book-ja/
Rust by example book (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust The Book (日本語版)
https://doc.rust-jp.rs/book-ja/
Rust by example book (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
360デフォルトの名無しさん
2022/07/08(金) 12:00:52.61ID:u/BCh/UE >>353
「所有権」って言っちゃうと誤解を生むような気がする
実体としてはデストラクタを呼ぶ権利だよね
インスタンス自体は(通常)スタック上に確保されているので、その所有権の移動まではできない
だからこそ「参照」なんだけども
「所有権」って言っちゃうと誤解を生むような気がする
実体としてはデストラクタを呼ぶ権利だよね
インスタンス自体は(通常)スタック上に確保されているので、その所有権の移動まではできない
だからこそ「参照」なんだけども
361デフォルトの名無しさん
2022/07/08(金) 13:38:22.19ID:GovhUdR1 デストラクタを呼ぶ権利だなんてお前も理解してないだろ
362デフォルトの名無しさん
2022/07/08(金) 15:16:55.64ID:bBPWEvXX363デフォルトの名無しさん
2022/07/08(金) 16:27:06.32ID:VZayErSn >>362
移譲という概念はない
C/C++もRustも同じで&を付けて&varnameの形で渡せば参照渡しとなる
同じ形なので全く違和感はない
所有権を手放さないで渡すには参照渡ししかないのだからその場合は&を付ければよい
もちろんプログラミング言語によって異なる部分もあるのは当然
そんな些細なことを違和感と言うのは極少数の類似言語しか知らないと言ってるようなもの
移譲という概念はない
C/C++もRustも同じで&を付けて&varnameの形で渡せば参照渡しとなる
同じ形なので全く違和感はない
所有権を手放さないで渡すには参照渡ししかないのだからその場合は&を付ければよい
もちろんプログラミング言語によって異なる部分もあるのは当然
そんな些細なことを違和感と言うのは極少数の類似言語しか知らないと言ってるようなもの
364デフォルトの名無しさん
2022/07/08(金) 16:46:29.18ID:MdbO63iw まあ所有権というよりは「後始末をする義務」だよな
日常的にポイ捨てしてるモラルの低い人間にはピンとこないかもしれない
日常的にポイ捨てしてるモラルの低い人間にはピンとこないかもしれない
365デフォルトの名無しさん
2022/07/08(金) 17:07:32.78ID:d0X5Obt/ 誰が持ってるかわからんよりは、絶対渡すと決めたほうが安全な気はする
366デフォルトの名無しさん
2022/07/08(金) 23:52:34.56ID:J0vSCVey >>362
それは非常にシンプルで突き詰めれば値渡しと参照渡しの2つしかないところを『参照渡し』は結局ポインタを渡せばよくC/C++/Rust揃って「&変数名」表記
もう一つの『値渡し』のところで少し考えるべきことが出てくる
大きく分けて二つに分かれる
(A) 数値型など値をコピーして渡しても問題なくコストも安い型の場合
(B) ヒープに確保した領域など値をコピーして渡すのはコストも高い型の場合
ここで後者(B)のケースは所有権すなわちメモリ解放責任も関わってくる
Rustでは
(A)タイプの型の場合はコピーして渡す
→コピー可能な型は所有権なし
(B)タイプの型の場合はムーブして渡す
→所有権(解放責任)が移動する
もし(B)タイプの型で所有権を保持したまま渡したいならば
(1) 参照渡しをする
(2) コストがかかってもよいから明示的にコピー(clone)して渡す
の2通りとなる
つまり
(3) 所有権をムーブする
と合わせて3通りの渡し方が存在する
最初の問題に戻ると
渡し方の表記「&変数名」と&を付けない「変数名」の二つある表記法を
(1)(2)(3)の3通りのどれに割り当てるかという問題に帰着する
「(1)参照渡し」はC/C++と同じく「&変数名」と記述
そして残る&を付けない「変数名」のみの表記をコストが低い「(3)所有権ムーブ」とした
ちなみにコストが大きくかかる「(2)コピー(clone)」はcloneした時点で別物となり新たな別の所有権(解放責任)が生じているため専用の表記方法は必要ないが強いて式として書けば「変数名.clone()」となる
これはlet x = 変数名.clone(); としておいて「x」とだけ表記して渡すのと同じ
つまり新たに生まれたxをムーブするのと同じになり表記に一貫性がある
以上の理由によりRustでの引数などの渡し方の表記方法は上述のようになっている
それは非常にシンプルで突き詰めれば値渡しと参照渡しの2つしかないところを『参照渡し』は結局ポインタを渡せばよくC/C++/Rust揃って「&変数名」表記
もう一つの『値渡し』のところで少し考えるべきことが出てくる
大きく分けて二つに分かれる
(A) 数値型など値をコピーして渡しても問題なくコストも安い型の場合
(B) ヒープに確保した領域など値をコピーして渡すのはコストも高い型の場合
ここで後者(B)のケースは所有権すなわちメモリ解放責任も関わってくる
Rustでは
(A)タイプの型の場合はコピーして渡す
→コピー可能な型は所有権なし
(B)タイプの型の場合はムーブして渡す
→所有権(解放責任)が移動する
もし(B)タイプの型で所有権を保持したまま渡したいならば
(1) 参照渡しをする
(2) コストがかかってもよいから明示的にコピー(clone)して渡す
の2通りとなる
つまり
(3) 所有権をムーブする
と合わせて3通りの渡し方が存在する
最初の問題に戻ると
渡し方の表記「&変数名」と&を付けない「変数名」の二つある表記法を
(1)(2)(3)の3通りのどれに割り当てるかという問題に帰着する
「(1)参照渡し」はC/C++と同じく「&変数名」と記述
そして残る&を付けない「変数名」のみの表記をコストが低い「(3)所有権ムーブ」とした
ちなみにコストが大きくかかる「(2)コピー(clone)」はcloneした時点で別物となり新たな別の所有権(解放責任)が生じているため専用の表記方法は必要ないが強いて式として書けば「変数名.clone()」となる
これはlet x = 変数名.clone(); としておいて「x」とだけ表記して渡すのと同じ
つまり新たに生まれたxをムーブするのと同じになり表記に一貫性がある
以上の理由によりRustでの引数などの渡し方の表記方法は上述のようになっている
367343
2022/07/09(土) 00:02:30.53ID:h3YKvoyj 理解してから質問させてもらったつもりなんですが、まだ全然だったようです
確かに所有権という概念を理解していません
勉強してから出直します
ありがとうございました
確かに所有権という概念を理解していません
勉強してから出直します
ありがとうございました
368デフォルトの名無しさん
2022/07/09(土) 00:12:24.76ID:GNVCknQf void君復帰したん?
369デフォルトの名無しさん
2022/07/09(土) 09:11:51.90ID:6ug5/LDh はつみみです。
370デフォルトの名無しさん
2022/07/09(土) 10:56:35.87ID:xh0VR/GV371デフォルトの名無しさん
2022/07/09(土) 11:11:15.93ID:tUS5A0PY move の挙動を「C言語レベルの基本の」サンプルコードで理解できたら画期的だなあ笑
372デフォルトの名無しさん
2022/07/09(土) 11:26:32.90ID:v7oB8mPb Cにはそもそもオーバーロードがないからなあ
373デフォルトの名無しさん
2022/07/09(土) 12:51:52.12ID:l8dyP7Xp374デフォルトの名無しさん
2022/07/09(土) 12:55:08.37ID:GKrnmeJx 所有権ってデストラクタで破棄する義務を負う、権利とは名ばかりな概念でしょ
375デフォルトの名無しさん
2022/07/09(土) 13:07:46.27ID:nKY2xH6j 昔はリファレンスカウンタでやってたな
376デフォルトの名無しさん
2022/07/09(土) 13:45:41.58ID:CWVMe8St 自分から破棄しない限りはアクセスできることが保証されるから権利ではあるな
377デフォルトの名無しさん
2022/07/09(土) 14:00:45.40ID:GKrnmeJx オプーナを買う権利をやろう
378デフォルトの名無しさん
2022/07/09(土) 14:07:45.84ID:p9oybaSY エナジーボンボンはCodeVeinに出てくる赤い玉だったんだよ
379デフォルトの名無しさん
2022/07/09(土) 16:17:17.24ID:vntA8Dp0380デフォルトの名無しさん
2022/07/11(月) 10:49:23.74ID:1W23UOpt >>358
ほんそれ
ほんそれ
381デフォルトの名無しさん
2022/07/11(月) 10:51:27.98ID:1W23UOpt >>364
ほんそれ++
ほんそれ++
382デフォルトの名無しさん
2022/07/11(月) 21:11:34.35ID:dGJ2mZ34 =std::numeric_limits<decltype(ほんそれ)>::max()
383デフォルトの名無しさん
2022/07/16(土) 16:37:55.35ID:scS6hSP+ condition_variableってなんでわざわざmutexと一緒に定義しないといけないの面倒でしかたないんだけど。
しかもへんてこな目覚めがあるなんてバグを平然と放置してるし。
win32のSetEvent()のほうが俄然使いやすいんだけど。
しかもへんてこな目覚めがあるなんてバグを平然と放置してるし。
win32のSetEvent()のほうが俄然使いやすいんだけど。
384はちみつ餃子 ◆8X2XSCHEME
2022/07/16(土) 17:49:19.54ID:cnHD4OK4 mutex は排他の仕組みであって同期の仕組みと分離する思想なんじゃないかなぁ……。
あんまりイケてないとは思うけど。
あんまりイケてないとは思うけど。
385デフォルトの名無しさん
2022/07/16(土) 19:38:19.38ID:UNJL4ykU それはOSの問題なうえ、充分合理的な動作と認められている。
386デフォルトの名無しさん
2022/07/16(土) 21:13:53.10ID:cotnetTK へんてこな目覚めはなんで生じるのかは知らんなんか深い理由でもあるんじゃないのJK
それはおくとして、両者にはキューイングの思想の違いがまずありき、
[1] WindowsのSetEvent()はイベント発生をキューイングし、待機中スレッドをキューイングしない
[2] 条件変数はイベント発生をキューイングせず、待機中スレッドをキューイングする
これでかなりイベント発生と待機の組み合わせの性格の違いが出る。
[1]は待機中スレッドが無くともイベントをセットでき、その後最初に待ちに入ったスレッド1個が待ち解除される
[2]は待機中スレッドが無いとイベントが無視されるが、通知方法をnotify_one()だけでなくnotify_all()も選べる
[1]はWaitForMultipleObject()により1箇所の待機で複数種類のイベントを待ち受けられる(μITRONのイベントフラグ的な使い方ができる
が、[2]でそれをやろうとするとあるイベントでスレッドを起こしたら、そのスレッドの待機中スレッドとしてのキューイングを
他のイベントついてもクリアせねばならない、みたいな余計な処理が必要で効率的に実装できない
ということは、条件変数でWaitForMultipleObject()的なことをやろうとしたら、イベント要因を別途変数にセットして
待機中スレッドに伝える必要があり、この変数の操作→イベント待ち解除→解除されたスレッドが変数を参照、
というのをatomicにやらざるおえないから、ミューテックスのブロック内でイベントの待機とセットを行わねばならない仕様に、
なったと思う
それはおくとして、両者にはキューイングの思想の違いがまずありき、
[1] WindowsのSetEvent()はイベント発生をキューイングし、待機中スレッドをキューイングしない
[2] 条件変数はイベント発生をキューイングせず、待機中スレッドをキューイングする
これでかなりイベント発生と待機の組み合わせの性格の違いが出る。
[1]は待機中スレッドが無くともイベントをセットでき、その後最初に待ちに入ったスレッド1個が待ち解除される
[2]は待機中スレッドが無いとイベントが無視されるが、通知方法をnotify_one()だけでなくnotify_all()も選べる
[1]はWaitForMultipleObject()により1箇所の待機で複数種類のイベントを待ち受けられる(μITRONのイベントフラグ的な使い方ができる
が、[2]でそれをやろうとするとあるイベントでスレッドを起こしたら、そのスレッドの待機中スレッドとしてのキューイングを
他のイベントついてもクリアせねばならない、みたいな余計な処理が必要で効率的に実装できない
ということは、条件変数でWaitForMultipleObject()的なことをやろうとしたら、イベント要因を別途変数にセットして
待機中スレッドに伝える必要があり、この変数の操作→イベント待ち解除→解除されたスレッドが変数を参照、
というのをatomicにやらざるおえないから、ミューテックスのブロック内でイベントの待機とセットを行わねばならない仕様に、
なったと思う
387デフォルトの名無しさん
2022/07/16(土) 21:20:57.63ID:ucdNPaM6 それ隠蔽できるだろうけど、条件変数の基本要素がそれなんだからそういうもんです。
388デフォルトの名無しさん
2022/07/16(土) 21:25:01.45ID:cotnetTK しかしまあ普通にスレッドの中にイベント待ちを作ったら、
イベント要因は
(1) 本来のイベントの意味(複数かもしれん
(2) スレッド終了
の2種類は必ず生じるけどこのために2種類以上のイベントオブジェクトを設けてWaitForMultipleObject()で待機するのは
アフォらしいので結局条件変数的に、イベントオブジェクトは1個、イベント要因を表す変数が1個、みたいな形になって
条件変数と同じようなしくみに落ち着く
、希ガス
(ただしイベントオブジェクトとイベントを待つスレッドの実体が完全に1対1ならミューテックスによるガードは不要
イベント要因は
(1) 本来のイベントの意味(複数かもしれん
(2) スレッド終了
の2種類は必ず生じるけどこのために2種類以上のイベントオブジェクトを設けてWaitForMultipleObject()で待機するのは
アフォらしいので結局条件変数的に、イベントオブジェクトは1個、イベント要因を表す変数が1個、みたいな形になって
条件変数と同じようなしくみに落ち着く
、希ガス
(ただしイベントオブジェクトとイベントを待つスレッドの実体が完全に1対1ならミューテックスによるガードは不要
389デフォルトの名無しさん
2022/07/16(土) 21:52:02.32ID:ucdNPaM6 mutexないとあっちのスレッドが条件変えちゃうのでは
390デフォルトの名無しさん
2022/07/16(土) 22:02:42.26ID:cotnetTK イベント要因が3種類以上とかイベント発生と待機解除が必ず1対1でなければならない、みたいなケースを含むちょう一般論で言うとそうかorz
391デフォルトの名無しさん
2022/07/16(土) 22:31:27.60ID:ogh00ppx392デフォルトの名無しさん
2022/07/17(日) 03:07:07.04ID:1DOilu1h >>383
condition_variableの引数にmutexのロックがあるおかげで休眠処理を(1-1)〜(1-5)のようにできる
(1-1)mutexでロックして、(1-2)起動条件を設定して、(1-3)起動条件のチェックをしてから、(1-4)休眠して、(1-5)ロックを解除
もしそういう仕組みが無いとこんな感じになるかな
(2-1)mutexでロックして、(2-2)起動条件を設定して、(2-3)ロックを解除して、(2-4)起動条件のチェックをしてから、(2-5)休眠する
休眠を起こす方は、(1)mutexでロックして、(2)起動条件を設定して、(3)起動して、(4)ロックを解除、となるわけだけど、
(2-1)〜(2-5)の場合、(2-4)の後(2-5)の前に(1)〜(4)が動くことができて、その場合に永遠に休眠する場合がある
(1-1)〜(1-5)ならそういう問題が無い
condition_variableの引数にmutexのロックがあるおかげで休眠処理を(1-1)〜(1-5)のようにできる
(1-1)mutexでロックして、(1-2)起動条件を設定して、(1-3)起動条件のチェックをしてから、(1-4)休眠して、(1-5)ロックを解除
もしそういう仕組みが無いとこんな感じになるかな
(2-1)mutexでロックして、(2-2)起動条件を設定して、(2-3)ロックを解除して、(2-4)起動条件のチェックをしてから、(2-5)休眠する
休眠を起こす方は、(1)mutexでロックして、(2)起動条件を設定して、(3)起動して、(4)ロックを解除、となるわけだけど、
(2-1)〜(2-5)の場合、(2-4)の後(2-5)の前に(1)〜(4)が動くことができて、その場合に永遠に休眠する場合がある
(1-1)〜(1-5)ならそういう問題が無い
393デフォルトの名無しさん
2022/07/17(日) 03:32:35.77ID:RIt+yucv バトン持ってるやつが偉いというのはいいとして、バトンを途切れなく渡すための仕組みが要るんじゃ
394デフォルトの名無しさん
2022/07/17(日) 11:47:51.28ID:sgfC4LCK395デフォルトの名無しさん
2022/07/21(木) 12:23:18.60ID:eB2QSMyp396デフォルトの名無しさん
2022/07/26(火) 01:16:01.56ID:DHatjrG/ 基底クラスのprivateメンバと、private継承された基底クラスのpublicメンバって派生クラスから見たら同じじゃないんでしょうか?
前者は派生クラスからアクセス不可で、後者は派生クラスからアクセス可能なようです
というとこは意味が違うんでしょうが調べでもよく分かりませんでした
どなたか教えてください
前者は派生クラスからアクセス不可で、後者は派生クラスからアクセス可能なようです
というとこは意味が違うんでしょうが調べでもよく分かりませんでした
どなたか教えてください
397デフォルトの名無しさん
2022/07/26(火) 04:47:14.80ID:F8qnHJbo public/privateは、自分よりも外側からのアクセスを許可するかの指定。
class B{
private: int b1;
public: int b2;
};
class C: private B{};
int main(){
B b;
C c;
}
b.b2はアクセス可能。c.b2はアクセス不可能。
class C内からは元々publicだったthis->b2のアクセスに制限はない。
class B{
private: int b1;
public: int b2;
};
class C: private B{};
int main(){
B b;
C c;
}
b.b2はアクセス可能。c.b2はアクセス不可能。
class C内からは元々publicだったthis->b2のアクセスに制限はない。
398デフォルトの名無しさん
2022/07/27(水) 00:07:28.21ID:f9fWEf7v Carbon の話はスレチ?
399デフォルトの名無しさん
2022/07/27(水) 00:43:24.02ID:YyifIEEo401デフォルトの名無しさん
2022/07/29(金) 01:50:30.95ID:0LOpWdsN 通常のキャストと参照へのキャストの違いを教えてください。
#include <iostream>
class Base {};
class Derived : public Base {};
int main()
{
Derived d;
Base& b1 = static_cast<Base&>(d); //@
Base& b2 = static_cast<Base>(d); //A
}
このようなとき、@だとコンパイルOK、Aだとコンパイルエラーになります。
どのような違いがあるのでしょうか?
#include <iostream>
class Base {};
class Derived : public Base {};
int main()
{
Derived d;
Base& b1 = static_cast<Base&>(d); //@
Base& b2 = static_cast<Base>(d); //A
}
このようなとき、@だとコンパイルOK、Aだとコンパイルエラーになります。
どのような違いがあるのでしょうか?
402デフォルトの名無しさん
2022/07/29(金) 02:07:00.18ID:drZ02Ew4403デフォルトの名無しさん
2022/07/29(金) 08:15:31.60ID:FIiQg0BH404はちみつ餃子 ◆8X2XSCHEME
2022/07/29(金) 10:28:08.30ID:nU9Bb2FG 具体例で言うとこれ↓はアリってこと。
#include <iostream>
class Base {};
class Derived : public Base {};
int main()
{
Derived d;
Base&& b3 = static_cast<Base>(d);
const Base& b4 = static_cast<Base>(d);
}
注意点として、
本来なら一時オブジェクトは式の終わりに解体されるので参照が無効になりそうなもんだが
参照で受けている場合はその参照の寿命と同じ分だけ延命される特例がある。
#include <iostream>
class Base {};
class Derived : public Base {};
int main()
{
Derived d;
Base&& b3 = static_cast<Base>(d);
const Base& b4 = static_cast<Base>(d);
}
注意点として、
本来なら一時オブジェクトは式の終わりに解体されるので参照が無効になりそうなもんだが
参照で受けている場合はその参照の寿命と同じ分だけ延命される特例がある。
405デフォルトの名無しさん
2022/07/29(金) 10:44:28.57ID:nIcw6oQb >>396
違うに決まってるだろ
違うに決まってるだろ
406デフォルトの名無しさん
2022/07/29(金) 11:30:48.51ID:FIiQg0BH 俺が言ったのはこれのこと
struct base
{
base(int);
};
int main()
{
static_cast<base const&>(1);
static_cast<base&&>(1);
}
struct base
{
base(int);
};
int main()
{
static_cast<base const&>(1);
static_cast<base&&>(1);
}
407デフォルトの名無しさん
2022/07/30(土) 21:44:57.83ID:Ejgi0TIU コンストラクタの最適化(によるコンストラクタ呼び出し自体を削除)は
コピコンだけが適用?
コピコンだけが適用?
408デフォルトの名無しさん
2022/07/30(土) 21:52:49.25ID:hbp6z9LQ moveもrvoとかで無くなる
409デフォルトの名無しさん
2022/07/31(日) 13:35:39.44ID:VcJyNGFX410デフォルトの名無しさん
2022/07/31(日) 14:03:07.60ID:oR2ATHk7 そもそも406のコードにコピーもムーブも一つも出てきてないけど
411デフォルトの名無しさん
2022/07/31(日) 16:05:21.48ID:7/NlTuud ・フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
・リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング
・1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
・『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
・副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望
・フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
・茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
・長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
・リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、
業務委託契約の求職者と企業をマッチング
・1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
・『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
・副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破
中小企業で進む副業人材の採用、96%が継続採用を希望
・フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
・茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
・長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
412デフォルトの名無しさん
2022/08/03(水) 14:12:19.69ID:Y5L3Fd0k 練習でオブジェクトデータベースもどき を書いたらGITHUBに送ったのになんか反映されない。
がーん!!
がーん!!
413デフォルトの名無しさん
2022/08/03(水) 14:27:47.83ID:7AThd70z 見てるブランチが違うんだろ
414デフォルトの名無しさん
2022/08/04(木) 00:40:10.66ID:s3oOei4P コンストラクタって本当に戻り値無いんですか?
例えば
MyClass c = MyClass();
としたとき、cにはMyClassのコンストラクタで生成されたインスタンスが格納されます
戻り値が無いのになぜそうなるのでしょうか?
例えば
MyClass c = MyClass();
としたとき、cにはMyClassのコンストラクタで生成されたインスタンスが格納されます
戻り値が無いのになぜそうなるのでしょうか?
415はちみつ餃子 ◆8X2XSCHEME
2022/08/04(木) 01:26:43.48ID:hPtMGH66 >>414
それは明示的な型変換 (関数記法) という規則で示されている。
https://timsong-cpp.github.io/cppwp/n3337/expr.type.conv
見かけ上は普通の関数呼出しと区別がつかない記法を使うけれど関数呼出しではない。
クラス名を関数風に使ったらコンストラクタで構築したオブジェクトを (あたかも関数の返却値のように) 返すことになっているというだけなんで、
まあそういう仕様なのだと覚えてもらうしかしょうがない。
コンストラクタは特別な地位にあって色々と特別な規則があるんよ。
それは明示的な型変換 (関数記法) という規則で示されている。
https://timsong-cpp.github.io/cppwp/n3337/expr.type.conv
見かけ上は普通の関数呼出しと区別がつかない記法を使うけれど関数呼出しではない。
クラス名を関数風に使ったらコンストラクタで構築したオブジェクトを (あたかも関数の返却値のように) 返すことになっているというだけなんで、
まあそういう仕様なのだと覚えてもらうしかしょうがない。
コンストラクタは特別な地位にあって色々と特別な規則があるんよ。
416デフォルトの名無しさん
2022/08/04(木) 01:47:34.25ID:s3oOei4P >>415
ありがとうございます
そういう仕様だと覚えることにします
ついでで申し訳ないんですが、コンストラクタと明示的な型変換って同じものなんですか?
MyClassA a;
MyClassB b = MyClassB(a);
としたとき、コンストラクタはMyClassBの関数ですが、明示的な型変換はa(MyClassA)の関数ですよね?
ありがとうございます
そういう仕様だと覚えることにします
ついでで申し訳ないんですが、コンストラクタと明示的な型変換って同じものなんですか?
MyClassA a;
MyClassB b = MyClassB(a);
としたとき、コンストラクタはMyClassBの関数ですが、明示的な型変換はa(MyClassA)の関数ですよね?
417はちみつ餃子 ◆8X2XSCHEME
2022/08/04(木) 02:30:19.53ID:hPtMGH66 >>416
> コンストラクタと明示的な型変換って同じものなんですか?
違う。 明示的な型変換を試みた結果としてコンストラクタが呼び出されたりもするということ。
> コンストラクタはMyClassBの関数ですが
MyClassB のメンバ関数の意かな?
> 明示的な型変換はa(MyClassA)の関数ですよね?
何がいいたいのかわからない。
MyClassB と書いてあるのに何故か MyClassA のなんらかのメンバ関数が呼ばれると思っているということ?
どうしてそう思ったのかもうちょっと詳しく説明してみて。
> コンストラクタと明示的な型変換って同じものなんですか?
違う。 明示的な型変換を試みた結果としてコンストラクタが呼び出されたりもするということ。
> コンストラクタはMyClassBの関数ですが
MyClassB のメンバ関数の意かな?
> 明示的な型変換はa(MyClassA)の関数ですよね?
何がいいたいのかわからない。
MyClassB と書いてあるのに何故か MyClassA のなんらかのメンバ関数が呼ばれると思っているということ?
どうしてそう思ったのかもうちょっと詳しく説明してみて。
418デフォルトの名無しさん
2022/08/04(木) 10:23:55.38ID:4E08n67o >> 417
class MyClassB {};
class MyClassA
{
public:
operator MyClassB() const {
return MyClassB();
}
};
int main()
{
MyClassA a;
MyClassB b = MyClassB(a);
}
このようなとき、型変換で呼ばれるのはMyClassAのメンバ関数であるoperator MyClassBですよね?
MyClassBのメンバ関数であるコンストラクタを呼び出しているのと見分けがつかないので、疑問に思いました
class MyClassB {};
class MyClassA
{
public:
operator MyClassB() const {
return MyClassB();
}
};
int main()
{
MyClassA a;
MyClassB b = MyClassB(a);
}
このようなとき、型変換で呼ばれるのはMyClassAのメンバ関数であるoperator MyClassBですよね?
MyClassBのメンバ関数であるコンストラクタを呼び出しているのと見分けがつかないので、疑問に思いました
419デフォルトの名無しさん
2022/08/04(木) 10:41:35.28ID:fn9V0Lga explicit指定してなけらば代入はコンストラクタに渡される
420はちみつ餃子 ◆8X2XSCHEME
2022/08/04(木) 11:47:40.74ID:hPtMGH66 >>418
ユーザー定義変換演算子があればそれが使われたりもすることもある。
どの状況で何が呼ばれるのかは複雑な解決規則があって、どちらかが優先になることもあれば曖昧 (エラー) になることもある。
この場合にどうなってるのか仕様を辿ってみたんだが、
MyClassB(a) は C スタイルのキャストと等しいので (MyClassB)a と同等、
そしてこれは static_cast<MyClassB>(a) と同等と解釈される。
このとき MyClassB temp(a) と宣言したときのように初期化された架空の変数 temp の値が返される。
そういうルールだった。
MyClassB temp(a) と宣言したときに MyClassB が MyClassA を受け取るコンストラクタを持っていれば
それが呼ばれる (この場合はそのようなコンストラクタはないので呼ばれない) し、
そうでないなら暗黙の型変換が実施されるので MyClassA::operator MyClassB が呼ばれてから初期化される。
ユーザー定義変換演算子があればそれが使われたりもすることもある。
どの状況で何が呼ばれるのかは複雑な解決規則があって、どちらかが優先になることもあれば曖昧 (エラー) になることもある。
この場合にどうなってるのか仕様を辿ってみたんだが、
MyClassB(a) は C スタイルのキャストと等しいので (MyClassB)a と同等、
そしてこれは static_cast<MyClassB>(a) と同等と解釈される。
このとき MyClassB temp(a) と宣言したときのように初期化された架空の変数 temp の値が返される。
そういうルールだった。
MyClassB temp(a) と宣言したときに MyClassB が MyClassA を受け取るコンストラクタを持っていれば
それが呼ばれる (この場合はそのようなコンストラクタはないので呼ばれない) し、
そうでないなら暗黙の型変換が実施されるので MyClassA::operator MyClassB が呼ばれてから初期化される。
421デフォルトの名無しさん
2022/08/04(木) 12:25:40.96ID:YlkBTNtd 職業としてc++を使用してる人に聞きたいんだけど
設計者がどう動作するか分かってないコードが含まれる製品が出荷されてるのっておかしくない?
しかもその担当は、俺あんまりパソコン得意じゃないって。
そんな人間が書いてるソフトをお金を出して買ってくださってるお客様に言えるかよ、馬鹿なのかな
設計者がどう動作するか分かってないコードが含まれる製品が出荷されてるのっておかしくない?
しかもその担当は、俺あんまりパソコン得意じゃないって。
そんな人間が書いてるソフトをお金を出して買ってくださってるお客様に言えるかよ、馬鹿なのかな
422デフォルトの名無しさん
2022/08/04(木) 12:42:29.07ID:foJKY5q3 まあ売る方も買う方も承知でやってる互助会みたいな世界もあるから
423デフォルトの名無しさん
2022/08/04(木) 12:49:09.16ID:iuI8tOa1 自社製品のすべてをわかっている事業者なんてないよ
もしものためにお客様相談窓口あるわけだし
もしものためにお客様相談窓口あるわけだし
424デフォルトの名無しさん
2022/08/04(木) 12:58:24.87ID:YlkBTNtd >>423
そう言うことではない。
では、あなたに聞きたい
車を買いに行って、ディーラーの人に「このボタンなんですか?」と質問して「押してみないと分からない」なんて答えたらどう思いますか?
ディーラーが設計してるわけではないことくらい誰でも知ってるけど、ここで買っていいのか?って思いませんか?
そう言うことではない。
では、あなたに聞きたい
車を買いに行って、ディーラーの人に「このボタンなんですか?」と質問して「押してみないと分からない」なんて答えたらどう思いますか?
ディーラーが設計してるわけではないことくらい誰でも知ってるけど、ここで買っていいのか?って思いませんか?
425デフォルトの名無しさん
2022/08/04(木) 13:09:55.40ID:4HLZV6kX >>421
C++使いはPCのパワーユーザーとは限らんよ
それにPCだって無数の技術が詰め込まれていて
たとえるなら1つの大学のようなもので
迂闊に「俺はものすごくPCに詳しいんだ!」なんて言うと
ほぼ100%恥かくしな
C++使いはPCのパワーユーザーとは限らんよ
それにPCだって無数の技術が詰め込まれていて
たとえるなら1つの大学のようなもので
迂闊に「俺はものすごくPCに詳しいんだ!」なんて言うと
ほぼ100%恥かくしな
426デフォルトの名無しさん
2022/08/04(木) 13:28:40.86ID:YMWE04jW >>424
外部仕様と内部仕様の区別もつかないボンクラ乙w
外部仕様と内部仕様の区別もつかないボンクラ乙w
427デフォルトの名無しさん
2022/08/04(木) 17:01:53.54ID:bxsqlndn つかC++関係無くね
どの工程にでも言える話をここでされても困るんだけど
どの工程にでも言える話をここでされても困るんだけど
428デフォルトの名無しさん
2022/08/04(木) 18:34:39.03ID:Te3vhihz >>426
お前は文章も読めないのか
お前は文章も読めないのか
429デフォルトの名無しさん
2022/08/04(木) 18:53:04.81ID:iPtxbdCe まず>>421がC++との関連を示すべき。それ以外のところで話を広げても不毛。
430デフォルトの名無しさん
2022/08/04(木) 19:04:48.18ID:4E08n67o431デフォルトの名無しさん
2022/08/04(木) 19:32:37.46ID:YMWE04jW432デフォルトの名無しさん
2022/08/04(木) 20:58:43.21ID:msSueNHM windows作ってる開発者や営業にメモ帳のショートカット全部言えるか聞いてみればいいんじゃね?
外部仕様すら知らんの?馬鹿なのかなって
外部仕様すら知らんの?馬鹿なのかなって
433デフォルトの名無しさん
2022/08/04(木) 21:17:24.76ID:isEYuHXY 「メモ帳のショートカットを言え」がなんのことやらわからない。
434はちみつ餃子 ◆8X2XSCHEME
2022/08/04(木) 21:27:41.19ID:hPtMGH66 最大限にエスパー能力を発揮してアクロバティックに解釈するとテキスト形式のファイルのことではないかと思う。
デフォルトだとメモ帳に関連付けられているからテキスト=メモ帳という認識が出来上がる可能性はある。
デフォルトだとメモ帳に関連付けられているからテキスト=メモ帳という認識が出来上がる可能性はある。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- でもこんなに高市がやらかしても中東みたいにミサイル飛んできたりしないから東アジアってクッソ平和だよなwwwwwwwwwwwwwwww [271912485]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- ほかほかご飯にかけるとうまいもの一覧
- 🏡
- 「これが完成された醜い姿である>>1」←これなに?
