[過去ログ] C++相談室 part157 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: 2021/08/09(月)10:57 ID:JaaB5Egp(1/2) AAS
前スレ
C++相談室 part156
2chスレ:tech
2
(1): 2021/08/09(月)11:24 ID:M3I2CbwW(1) AAS
前スレの >>997
キューが溢れないようにするのなら
スレッドが実行中かどうかを確認するのではなく
キューサイズを見るほうが確実じゃないですか?
3
(1): 2021/08/09(月)11:43 ID:GC6B710d(1/5) AAS
>スレッドが実行中か確認したいってどんなときなのかな?
たとえばゲームでセーブするとき、
メインの処理はブロックしたくないので別スレッドで実行しつつ「セーブ中です」みたいな表示を出し、終了したら消す
みたいな時かな
4
(4): 2021/08/09(月)11:48 ID:OWI9S7jW(1/2) AAS
>>3
それはセーブするスレッドのほうが開始と終了を通知すればよくない?
そうデザインするもんじゃないの?

できないときもあるのかもしれんが。
5
(2): 2021/08/09(月)11:56 ID:GC6B710d(2/5) AAS
>>4
もちろん方法ならいくらでもあると思うけど、別スレッドのインスタンス1つで全部済むなら、そっちの方がすっきりするし楽でしょ
6: 2021/08/09(月)12:12 ID:GC6B710d(3/5) AAS
>>4,5
あぁ、いやそうじゃないか
ゲームのあらゆる部分をスレッドセーフで設計すれば良いのかもしれないけど、
ゲームのメインの状態遷移なんてわざわざマルチスレッド化するような重い処理でもないので、
その辺の表示とかはシングルスレッド前提で書いてるわけよ、もちろんそのほうが楽だからw
7
(1): 2021/08/09(月)12:17 ID:qYrd5+ip(1) AAS
この「実行中」が実際にタイムスライスが割り当てられている状態を意味しているんであれば
OSにもよるが実装が大変な割に実際に役立つシーンは限られるような。
>>4であればjoinableで十分だろうし。
8: 2021/08/09(月)12:25 ID:DVzh2mox(1) AAS
別スレッド処理の進捗を他スレッドから閲覧するためのパラメータを使っってる時点で、お察し
9
(1): 2021/08/09(月)12:40 ID:S8n0VVLE(1/3) AAS
前スレ997は色々勘違いしてそうな気がする
普通pushしようとしてキューが満杯なら何らかの同期メカニズムで自分を待ち状態にする
pop側はpopしたらその同期メカニズムに対して待ちを解除するだけだからスレッド自体が実行中かどうかなんて見る必要がない
10: 2021/08/09(月)13:35 ID:eF2Q2UUf(1/4) AAS
std::condition_variable
11: ハノン ◆QZaw55cn4c 2021/08/09(月)13:52 AAS
正直いって pthread の条件変数は私には理解が難しく、私は安易に win32api のクリティカルセッション&シグナルを多用してしまうのです
ただし、スタベーションに陥ることが多々あり、どうもクリティカルセクション・シグナルでは駄目なパターンがあるかもしれない、とヒヤヒヤしています‥‥
12: 2021/08/09(月)14:01 ID:TRAo/ccI(1/2) AAS
>>2
別に
Producer(pushする側)がこれからpushするのを待っている場合、
Consumer(popする側)はキューサイズ(キューの中の要素数)を見ても
Producerが待っているのかどうかの情報を得られない
なぜなら、まだpushしていないからな
13
(1): 2021/08/09(月)14:14 ID:TRAo/ccI(2/2) AAS
>>9
>pop側はpopしたらその同期メカニズムに対して待ちを解除するだけ
そういう実現方法も(pop側が行った待ち解除がキューイングされれば)成立する鴨、と>>997にちゃんと書いているもーん
14: 2021/08/09(月)14:32 ID:JaaB5Egp(2/2) AAS
>>5
>>4って新規スレッド1個で全部済むと思うんだけど……
15
(2): 2021/08/09(月)14:33 ID:S8n0VVLE(2/3) AAS
>>13
いや、スレッドの実行状態なんて見てもしゃーないって話
pop後にpush側が実行中だとしてもそのチェック直後にpushするかも知れん
要するにスレッドの実行状態の変化は排他制御できないから意味がないって話
pop前にいちいちスレッドをsuspendしてチェックしてからresumeするとかするならできるかもしれないけどw
16: 2021/08/09(月)14:34 ID:aCXIbwxy(1) AAS
std::vectorの部分ベクトルの切り出しって絶対O(要素数)の計算量かかりますよね?
17: 2021/08/09(月)14:40 ID:fi8SjIox(1) AAS
「部分ベクトルの切り出し」とは何かを定義せよ。
18: 2021/08/09(月)14:47 ID:eF2Q2UUf(2/4) AAS
こういうの?
std::vector<int> a{ 4, 6, 4, 9 };
std::vector<int> b(a.begin() + 1, a.begin() + 2);
19
(1): 2021/08/09(月)15:11 ID:KzU8BZnC(1) AAS
参照できればいいのか、コピーがいるのか、切り出し位置はわかってるのか、検索を伴うのか、
その辺の条件もなしに計算量の議論なんて出来んわ
20
(3): 2021/08/09(月)16:11 ID:6v1cUfUr(1) AAS
クラスAの内部にクラスBがある (入れ子クラス) として、BからAのメンバにアクセスするテクってないんですかね?
アクセスしたいメンバをstaticにはしたくないです
21
(1): 2021/08/09(月)16:20 ID:GC6B710d(4/5) AAS
>>20
AへのポインタをBに定義して、コンストラクタかなんかで渡せばいいのでは?
22: はちみつ餃子 ◆8X2XSCHEME 2021/08/09(月)16:48 ID:OWI9S7jW(2/2) AAS
>>20
クラスの中でクラスを定義しても A の名前空間の中に B が定義されるってだけ。
B のオブジェクトを作っても A のオブジェクトが存在しないなら存在しないオブジェクトのメンバにはアクセスできない。
A のオブジェクト (インスタンス) と B のオブジェクトの間には勝手に関係が出来たりもしない。
関係ないのに関係あるように見えて初心者が混乱してるのはどっかの質問サイトでも見たことがある。
よく理解できてないならまずはクラスの定義を入れ子にせずにやってみるのがオススメ。
23
(1): 2021/08/09(月)16:52 ID:S8n0VVLE(3/3) AAS
>>20
AやBのインスタンスをどう生成してるのよ
>>21の言うようにAへのポインタ持ってたら普通にアクセスするだけでしょ
class A {
public: int i;
class B {
public: B(A* a){ … = a->i; }
}
}

省1
24: 2021/08/09(月)16:59 ID:eF2Q2UUf(3/4) AAS
>>19
コピーか参照かは1要素あたりの処理量なので
コンテナの計算量には関係ない
25: 2021/08/09(月)17:00 ID:hJGoZPOe(1) AAS
絶対レビュー通らないウンココードでよいなら
(char*)this + offsetof(A, b)でなんとかならんのか
26: 2021/08/09(月)17:33 ID:GC6B710d(5/5) AAS
class Aをtemplate化して、class BでAを継承すれはメンバにはアクセスできるけど、たぶんそういうことがしないんじゃないんだろうなw
コンテナクラスのイテレータから親クラスインスタンスのメンバにアクセスしたいとかか?
27: 2021/08/09(月)17:48 ID:eF2Q2UUf(4/4) AAS
リファレンサを作るときなんか親オブジェクトへのポインタ使うね
28: 2021/08/09(月)20:07 ID:XVy1LhuX(1) AAS
>>23
普通にコンポジションで実現できる条件だよな
メルプラネットの奴らも同じこと言いそう
29: 2021/08/10(火)00:55 ID:rk6SLsdN(1/2) AAS
親オブジェクトへのポインタをうっかり共有ポインタにすると循環参照の原因になる(小並感)
30
(2): 2021/08/10(火)03:53 ID:mPLpHQ1a(1) AAS
+=の引数が1のときは++を呼ぶようにする方法ってありますか
31: ハノン ◆QZaw55cn4c 2021/08/10(火)04:41 AAS
>>30
自分でそう書くのがいいのでは?
(n == 1) ? x++ : x += n;
32
(1): 2021/08/10(火)08:16 ID:JssHBcjd(1) AAS
>>30
遅くなる可能性があるから気にしない。
コンパイル時に解決できるなら++使っても同じだし、実行時に解決するようだと1かどうかの判定が増えて遅くなる。
33: 2021/08/10(火)12:11 ID:OMlKC5pQ(1) AAS
TCPIPのソケット通信プログラム作ろうと思っているのですが、
コネクションを維持し続ける場合のデメリットって何がありますか?
34
(1): 2021/08/10(火)12:42 ID:ZRv1Vy3I(1) AAS
>>32
後出しになって申し訳ありませんが、*、!=、++、+=、- 辺りが定義されたイテレータを持つ自作のデータ構造を範囲for文で走査することを考えています
それ自体は想定した通りにできたのですが、その範囲for文をomp並列化するとイテレータのインクリメントが ++ でなく +=1 で行われるようになります
で、その自作データ構造では ++ よりも += の方が重い実装になっているので、+=1 よりは ++ の方を使ってほしいです

omp に特有の仕様に思えるので、普通に += の冒頭で引数が1かどうかの分岐を入れることにしようかと思います

ありがとうございました
35
(3): 2021/08/10(火)14:57 ID:W7aMf5pX(1/8) AAS
マルチスレッドのキューのサンプルをSTLで作りゃったーしたったわ、
外部リンク:ideone.com

↓ここのC#のサンプルプログラムの移植
// 外部リンク[html]:atmarkit.itmedia.co.jp

フラグの必要性は意味を取り違えていたわサーセン、
しかしこれフラグ(runningFlag)無しでやるとしたら終了時にConsumerがいちいちProducerが
join可能か調べる(std::thread::joinable())ことになってスレッドより先にプログラムした人が終了したくなるお
フラグで済むのに、
36: 2021/08/10(火)15:21 ID:W7aMf5pX(2/8) AAS
Windowsのイベントオブジェクトと条件変数の違いまとめ
外部リンク:dev.activebasic.com
37: 2021/08/10(火)15:28 ID:W7aMf5pX(3/8) AAS
と思ったがやっぱ当初の意味(Producerが待っているのかどうか)のフラグが無いと、
キューが空になった後のnotifyで、1万個あるかもしれない仕事の無いConsumerが次々起床され、
巡り巡ってようやくProducerが起床されるみたいな非効率が生じる余地があるやんけ;;;

やっぱ当初の漏れのフラグ必要という意見で正しかったのかもしんない
漏れは天才なのかもしんない、
かもしんない運転、
38: 2021/08/10(火)18:25 ID:W7aMf5pX(4/8) AAS
つかその前に、漏れの天才eyesが改造元とした@IT様のサンプルプログラムに
スレッドのディスパッチ依存で終了できなくなることがあるという恥ずかしいバグを発見した、
論より証拠:
外部リンク:ideone.com

変更点は、Consumerを1個にして、Producerの側のある個所にsleepを入れただけ
(マクロ CAUSE_STOPPING_FAILURE_BUG で条件コンパイルで有効にしている個所
これでConsumerスレッドが終了できなくなる

対策は、同ソースコードの BUGFIX_STOPPING_FAILURE_BUG マクロを有効にしたら宜しい

天才の判断である
39
(1): 2021/08/10(火)18:42 ID:mYAwPqTL(1/2) AAS
>>34
すみません。この件なんですが、

void operator += (int n){
 if(n == 1){
  // ここ
 }else{
  ……
 }
}

「ここ」で演算子++を呼びたいときってどう書いたら良いでしょうか
省3
40
(1): 2021/08/10(火)19:06 ID:W7aMf5pX(5/8) AAS
というわけで最終的な版を貼る、
外部リンク:ideone.com

ProduceとConsumerそれぞれに対する起床条件を分離すた、

日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
41
(1): 2021/08/10(火)19:11 ID:cMFKuo8t(1) AAS
>>39
++(*this);
または
this->operator++();
42: 2021/08/10(火)19:24 ID:mYAwPqTL(2/2) AAS
>>41
ありがとうございます
前置/後置の別が自分の中でよく付いていませんが、教えていただいたことに基づいて調べてみます
43: 2021/08/10(火)19:37 ID:Lbev+Y0v(1/3) AAS
>>40
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
44: 2021/08/10(火)20:32 ID:W7aMf5pX(6/8) AAS
「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
とれると良い、ではなく取ることが必須や

なぜなら、WIN32APIのイベントは1回だけキューイングされるので投げたら投げっぱなしでもそのうち
受け取ってもらえるが、(pthread系統のしくみである)状態変数はそうではなく、
起床信号を投げつける前に相手が信号をキャッチ可能なのか(待ちに入っているのか)知る必要がある

なお、イベントのキューイングの有無によって話が変わる旨はすでに書いたある(>>997
上記のことを書いてあるというのに理解もせずにしつこく同じことを繰り返し言ってきたのが>>15
45
(1): 2021/08/10(火)21:01 ID:Lbev+Y0v(2/3) AAS
>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や

それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
46: 2021/08/10(火)22:11 ID:W7aMf5pX(7/8) AAS
なんか元にしたコードにまだ問題があった気配orz
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
外部リンク:ideone.com
(何が起きていて、どうしてこれで対策なのかはコメント参照、

>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
省3
47
(1): 2021/08/10(火)22:25 ID:W7aMf5pX(8/8) AAS
でもまあコメントを読んでいただければ、pthread系のしくみだと
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
48
(1): 2021/08/10(火)22:47 ID:C0wcAbjz(1/3) AAS
すみません。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
49: 2021/08/10(火)23:06 ID:OOQ3UOoB(1/2) AAS
>>48
未初期化変数があって無効なアドレスにアクセスしたとかじゃね

確実なことを言うためには例外コードが知りたい
あと問題の箇所のソースコードも
50: 2021/08/10(火)23:24 ID:C0wcAbjz(2/3) AAS
ソースはすみません、ちょっと出せないです
エラーコードは0xc0000005でしま
51: 2021/08/10(火)23:30 ID:OOQ3UOoB(2/2) AAS
はいメモリアクセス違反ですね
デバッガでがんばって調べてね
52: 2021/08/10(火)23:32 ID:C0wcAbjz(3/3) AAS
あざす
53
(1): 2021/08/10(火)23:34 ID:5fGESjxl(1) AAS
他の言語にはスレッド実行中か判定するAPIあるしstd::thread作った人達だってそのくらいのこと知ってたでしょ
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
54: 2021/08/10(火)23:44 ID:rk6SLsdN(2/2) AAS
スレッドそのものの終了状態を知る需要はあまりなく、スレッド内で行われるユーザー定義処理が終わったかどうかが重要だからでしょ
55
(1): 2021/08/10(火)23:50 ID:Lbev+Y0v(3/3) AAS
>>47
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う

それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
56
(1): 2021/08/11(水)01:24 ID:qkzYmFIh(1/2) AAS
>>55
>チェックした次の瞬間にwaitする可能性もあるわけなんで。
無い
チェックと処置をmutexによる単一のロック期間の中でアトミックに行うのだから>>55は全くナンセンスな問題提起

>>53
thread::joinable()があることは書いたもーん
57: 2021/08/11(水)01:28 ID:qkzYmFIh(2/2) AAS
問題だらけだった@IT様のサンプルコードだけど
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……

でここまでやるならConsumerの状態変数が実体としてコードに現れる
58
(1): 2021/08/11(水)01:44 ID:01hIEDa4(1/2) AAS
何を主張したくてごちゃごちゃ言ってるのかさっぱり見えないし途中で変わったりしてるようでもあるので、
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
59
(1): 2021/08/11(水)08:13 ID:SyYdmIb8(1/2) AAS
>>56
std::threadから取得する「スレッドの実行状態」の話をしているんだが。
それをmutexでアトミックに操作する???
60
(1): 2021/08/11(水)09:56 ID:8ERcfmko(1) AAS
C++ってiPhoneアプリ作れる?
61: 2021/08/11(水)12:11 ID:sOdrsbt7(1/2) AAS
>>60
作れる。QtやUnityで。
62: 2021/08/11(水)12:13 ID:sOdrsbt7(2/2) AAS
iPhone専用でいいなら、そもそも、Appleが提供している標準開発環境だけでも
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
63
(1): 2021/08/11(水)12:52 ID:MU7UJMps(1/2) AAS
std::vector で insert するとき
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
64
(1): 2021/08/11(水)13:03 ID:19rzwYjH(1/2) AAS
22.3.11 Class Template vector
23.3.11.1 Overview
3
using iterator = implementation-defined; //see 22.2
となっていて、std::vector::iteratorの型は処理系定義だね

現物で調べるならVisual Studioの[F12]が簡単だと思う
65
(1): 2021/08/11(水)14:01 ID:OqxISI0I(1/2) AAS
>>59
ID:W7aMf5pX = ID:qkzYmFIh はスレッドの状態として
・その瞬間の状態: Run/Ready/Wait/...
・終了してるかどうか: thread::joinable で取得できる
を混同してる(わざとかどうかは知らんが)
あと条件変数とスレッドの状態も混同してるので
> チェックと処置をmutexによる単一のロック期間の中でアトミックに行うのだから
なんて意味不明なことを言い出してる
これ以上続けるなら>>58が言うように本人にまとめてもらわないとますますグダグダになるだけだと思う
66
(2): 2021/08/11(水)14:15 ID:EWMgwFeS(1/3) AAS
std::thread使ったことないから自信無くて黙ってたけど
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
67
(1): 2021/08/11(水)14:23 ID:01hIEDa4(2/2) AAS
>>63
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
68
(1): 2021/08/11(水)14:56 ID:OqxISI0I(2/2) AAS
>>66
> thread::joinable()って別にスレッドが終了したかの判定ではなくない?
もちろん正確にはスレッド変数がスレッドと関連づいてるかどうかの判定
彼は>>35辺りでスレッド終了判定と思い込んでるフシが見られるのでそう書いてある
69
(2): 2021/08/11(水)15:08 ID:MU7UJMps(2/2) AAS
>>67
ありがとうございます

>>64
>現物で調べるならVisual Studioの[F12]が簡単だと思う

それで判るのは自分で定義した可能性の高い n の型ですよね?
知りたいのは v.begin() + n に要求されている型のことです
70: 2021/08/11(水)15:28 ID:EWMgwFeS(2/3) AAS
>>68
やっぱりそうですよね
じゃあ>>65の2個目の中黒の内容については引用??

例のコードではjoinableなんか使ってないし>>7が書いたのを試しもせずに真に受けた感じなのかな
71
(1): 2021/08/11(水)15:29 ID:EWMgwFeS(3/3) AAS
>>69
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
72: はちみつ餃子 ◆8X2XSCHEME 2021/08/11(水)15:43 ID:QcAq7ivU(1) AAS
>>69
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
外部リンク:timsong-cpp.github.io
73: 2021/08/11(水)15:52 ID:SyYdmIb8(2/2) AAS
>>66
>thread::joinable()って別にスレッドが終了したかの判定ではなくない?

実際にそのスレッドが実行中か待ちか終了しているかを表しているわけじゃないことはその通り。
で、たぶんそれで十分だからjoinable以上の機能は用意されなかった。

ところがそれが役に立つ場面があるよと言ったのが前スレ>>997
このスレの>>35と同一人物かどうかは知らんが。
74: 2021/08/11(水)15:54 ID:19rzwYjH(2/2) AAS
>>71
そういうこと
75
(2): 2021/08/13(金)02:38 ID:tLa9gek2(1/2) AAS
char *mystrcat(char *a, char *b)
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
省7
76: 2021/08/13(金)02:56 ID:nopi39s7(1) AAS
>>75
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
77: 2021/08/13(金)09:51 ID:BE9FMbqU(1) AAS
個別の事例で心配ない、問題ないという返答を得たとしても理解が深まらない。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。

どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
78: 2021/08/13(金)11:40 ID:UG8FRdqC(1) AAS
char *mystrcat(char *a, char *b)
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
79: 2021/08/13(金)14:30 ID:vEVo7A6C(1) AAS
適当な質問者と適当な回答者
ゴミとゴミをあわせてもゴミはゴミ
80: 2021/08/13(金)18:27 ID:tLa9gek2(2/2) AAS
shared_ptr<char []> c(a);
return &c[0];
81
(1): 2021/08/14(土)08:57 ID:dlgzlAXX(1) AAS
namespaceってどのように使うものなんですか?
存在意義がわからない。
82: 2021/08/14(土)09:56 ID:2Gpa2MRC(1) AAS
>>81
大規模ライブラリを設計するときに重宝する機能
詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う
namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず

どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ
存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない
83
(3): 2021/08/14(土)10:45 ID:MjnqNUAd(1/2) AAS
Cにnamespaceが導入されないのは何故なんです?
84: 2021/08/14(土)10:48 ID:isR1pnnS(1) AAS
>>75
蛇足だけど、理由がなければshared_ptr<char[]>の代わりにshared_ptr<str>にしたほうがいいな。
// a に b を結合して
return a
がすごく怖い。
85: 2021/08/14(土)11:05 ID:HmVXtcJk(1/4) AAS
>>83
namespace
86: 2021/08/14(土)11:07 ID:HmVXtcJk(2/4) AAS
>>83
namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな
87: 2021/08/14(土)11:09 ID:sh47n3w4(1/3) AAS
>>83
マングリングが必要になってしまうから、ってのが大きいだろうな。
88
(1): 2021/08/14(土)11:16 ID:Wd8wuOU/(1) AAS
C++を本格的に学ぼうと思って本を数冊買ったが、言語仕様が複雑な割には知らないとエラー起こすだろ
っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか
89: はちみつ餃子 ◆8X2XSCHEME 2021/08/14(土)11:34 ID:xM4RG8+9(1) AAS
全部知らなくてもわかる部分だけでまあまあ使えるというのが C++ の方針なので
最初から綺麗に書こうと思わないほうがいいと思う。
綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。
90: 2021/08/14(土)11:41 ID:HmVXtcJk(3/4) AAS
構造体の中に関数が書ける、というコアの中のコアな部分の使い方・考え方さえ憶えるというより慣れれば
あと他のは追加で憶えればいいってだけ

ただし、その追加が今とんでもない量になってて
禿本の初版からやってる俺でさえ憶えきれなくてもがいてる
91: 2021/08/14(土)11:47 ID:fhp8ilcT(1/4) AAS
いいかい学生さん、 他人のコードをな、 他人のコードをいつでも読めるくらいになりなよ。
それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。
92: 2021/08/14(土)13:15 ID:MjnqNUAd(2/2) AAS
>>88
エラーが起こったらまだマシだな
イクときはだまってイクからな
93
(1): 2021/08/14(土)13:23 ID:sh47n3w4(2/3) AAS
他人のコードを読んで学ぶのに一番向いてない言語だよなC++は。
94: 2021/08/14(土)13:48 ID:fhp8ilcT(2/4) AAS
オーバーロードが悪いんですよ
95: 2021/08/14(土)14:19 ID:EcmTnCEO(1) AAS
>>93
perl に比べたらまだマシ
96: 2021/08/14(土)17:38 ID:sh47n3w4(3/3) AAS
perlは文法が複雑なだけで、知らない書き方に出会ったらそれを調べればいい。
C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。
97: 2021/08/14(土)18:45 ID:lbIZmRLc(1) AAS
ぶっちゃけスマートポインターって面倒だよね?
98
(1): 2021/08/14(土)18:54 ID:fhp8ilcT(3/4) AAS
スマポに限らず面倒なテンプレートクラスだらけだよ
99: 2021/08/14(土)18:56 ID:fRH2bKcn(1) AAS
ぶっちゃけどんなときに面倒だと感じる?
100: 2021/08/14(土)19:58 ID:x6Wgppy9(1) AAS
スマートポインタに慣れたら自分で解放しなきゃならないmallocやnewの方がよっぽど面倒
1-
あと 902 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.054s