前スレ
C++相談室 part156
https://mevius.5ch.net/test/read.cgi/tech/1621389313/
C++相談室 part157
■ このスレッドは過去ログ倉庫に格納されています
2021/08/09(月) 10:57:31.60ID:JaaB5Egp
2021/08/10(火) 19:06:35.71ID:W7aMf5pX
というわけで最終的な版を貼る、
https://ideone.com/G3XeAg
ProduceとConsumerそれぞれに対する起床条件を分離すた、
日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
https://ideone.com/G3XeAg
ProduceとConsumerそれぞれに対する起床条件を分離すた、
日本語ではいくら説明しても一向に理解の光が射さなかったボンクラ学生レヴェルの>>15でも
100行足らずのソースコードなら読めるんじゃないの
知らんけど
2021/08/10(火) 19:11:32.09ID:cMFKuo8t
2021/08/10(火) 19:24:28.15ID:mYAwPqTL
2021/08/10(火) 19:37:16.72ID:Lbev+Y0v
>>40
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
で、そこで取れると良い「スレッドの実行状態」って結局何なん?
2021/08/10(火) 20:32:27.09ID:W7aMf5pX
2021/08/10(火) 21:01:08.35ID:Lbev+Y0v
>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
それって具体的にどういうものを想定しているんだろう。
もともとの話はstd::threadに追加したい機能だったと思うけど、この説明だけじゃ全然想像がつかない。
2021/08/10(火) 22:11:54.85ID:W7aMf5pX
なんか元にしたコードにまだ問題があった気配orz
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、
>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える
言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、
MAX_QUEを1にすると高い頻度でProducerとConsumerが両方待ちに入ってしまいハングアップする、、、
対策版は多分これ↓で良いんジャマイカ……
https://ideone.com/at7ef9
(何が起きていて、どうしてこれで対策なのかはコメント参照、
>>45
>>「スレッドの実行状態とは起こす対象のスレッドが具体的に何をしているか、や
>それって具体的にどういうものを想定しているんだろう。
今回のサンプルコードでは具体的にはありません(キリ
しいて言えば!runningFlagならConsumerが自身を待ちに入れない(∵Producerがもう起こしてはくれない
というのはあるが、>>35に書いた通りフラグ以外の方法でも同じ判定を行える
言っていることにブレがあるのは今日pthreadを勉強したばっかりやし、
天才なので大目に見てホスイ、
2021/08/10(火) 22:25:26.70ID:W7aMf5pX
でもまあコメントを読んでいただければ、pthread系のしくみだと
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
今回はたまたま見込みでnotifyして話が通るからスレッドの実行状態を表す変数が具体的に生じなかっただけ
2021/08/10(火) 22:47:59.90ID:C0wcAbjz
すみません。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
自作プログラムが特定のPCだけ同じ場所でntdll.dllのエラーで止まるのですが、何が原因と考えられるでしょうか?
他のPCでは問題無く進み、エラーを起こすPCのメモリにも異常は見つかりませんでした。
2021/08/10(火) 23:06:02.90ID:OOQ3UOoB
2021/08/10(火) 23:24:57.75ID:C0wcAbjz
ソースはすみません、ちょっと出せないです
エラーコードは0xc0000005でしま
エラーコードは0xc0000005でしま
2021/08/10(火) 23:30:51.53ID:OOQ3UOoB
はいメモリアクセス違反ですね
デバッガでがんばって調べてね
デバッガでがんばって調べてね
2021/08/10(火) 23:32:41.60ID:C0wcAbjz
あざす
53デフォルトの名無しさん
2021/08/10(火) 23:34:52.75ID:5fGESjxl 他の言語にはスレッド実行中か判定するAPIあるしstd::thread作った人達だってそのくらいのこと知ってたでしょ
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
boost::thread時代にそういった要望もあっただろうし
それでもあえてstd::threadにはスレッド実行中を調べる機能を付けなかった
本質的に必要な機能ではないと判断したんじゃないの?
2021/08/10(火) 23:44:13.15ID:rk6SLsdN
スレッドそのものの終了状態を知る需要はあまりなく、スレッド内で行われるユーザー定義処理が終わったかどうかが重要だからでしょ
2021/08/10(火) 23:50:54.98ID:Lbev+Y0v
>>47
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
>起こす対象のスレッドが何をしているのかについて常に配慮が居るということをご理解いただけるのではないかと思う
それがwaitで待っている状態かそうでないかを意味しているんだとしたらそれは正しくない。
チェックした次の瞬間にwaitする可能性もあるわけなんで。
2021/08/11(水) 01:24:38.33ID:qkzYmFIh
2021/08/11(水) 01:28:13.23ID:qkzYmFIh
問題だらけだった@IT様のサンプルコードだけど
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……
でここまでやるならConsumerの状態変数が実体としてコードに現れる
これまともに実装するとしたら条件変数をConsumer x NとProducerの計N+1個設けて、
さらにConsumerそれぞれが待っているのか動いているのかを示すフラグを設けて
全部動いていたらProducerを待たせる
Consumerが待ちに入る直前にProducerにnotifyかけてキックする、みたいな
スレッドプールを手で実装するみたいな話になりそう……
でここまでやるならConsumerの状態変数が実体としてコードに現れる
2021/08/11(水) 01:44:51.77ID:01hIEDa4
何を主張したくてごちゃごちゃ言ってるのかさっぱり見えないし途中で変わったりしてるようでもあるので、
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
続けるならそもそもどういう主張をしているのかいっぺんまとめてほしい。
2021/08/11(水) 08:13:22.18ID:SyYdmIb8
60デフォルトの名無しさん
2021/08/11(水) 09:56:36.95ID:8ERcfmko C++ってiPhoneアプリ作れる?
2021/08/11(水) 12:11:01.26ID:sOdrsbt7
>>60
作れる。QtやUnityで。
作れる。QtやUnityで。
2021/08/11(水) 12:13:04.52ID:sOdrsbt7
iPhone専用でいいなら、そもそも、Appleが提供している標準開発環境だけでも
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
C++で作れる。
iPhoneの標準開発言語はSwiftだが、SwiftはC++と相互に呼び出せるから。
ただし、それだけだと面倒かも知れない。
そういう場合は、Qtで作れば。
63デフォルトの名無しさん
2021/08/11(水) 12:52:41.17ID:MU7UJMps std::vector で insert するとき
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
v.insert(v.begin() + n, hoge);
とかすると思いますが
このときの n の型って何ですか?
int ?
unsigned long ?
size_t ?
あとこういう型を調べるときって
vector のどことか iterator のどこを調べると判りますか?
2021/08/11(水) 13:03:37.14ID:19rzwYjH
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]が簡単だと思う
23.3.11.1 Overview
3
using iterator = implementation-defined; //see 22.2
となっていて、std::vector::iteratorの型は処理系定義だね
現物で調べるならVisual Studioの[F12]が簡単だと思う
2021/08/11(水) 14:01:06.77ID:OqxISI0I
2021/08/11(水) 14:15:21.29ID:EWMgwFeS
std::thread使ったことないから自信無くて黙ってたけど
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
thread::joinable()って別にスレッドが終了したかの判定ではなくない?
他スレッドでの実行を管理していない状態の(空の)オブジェクトが作れるから、そういう空の状態かどうかの判定関数であるように読めた
fstream::is_open()的な……
2021/08/11(水) 14:23:39.88ID:01hIEDa4
>>63
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
暗黙変換があるから n の型としてはすべての整数型があり得る。
基本的には、生ポインタで実装される可能性もあるものなので ptrdiff_t だと思っておけばいい。
正確な型が必要なら difference_type とか iter_difference_t とかで調べればわかる。
2021/08/11(水) 14:56:54.71ID:OqxISI0I
69デフォルトの名無しさん
2021/08/11(水) 15:08:15.20ID:MU7UJMps2021/08/11(水) 15:28:09.46ID:EWMgwFeS
2021/08/11(水) 15:29:37.31ID:EWMgwFeS
>>69
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
v.begin().operator+(n)とでも書き換えてoperator+で[F12]しろということではなかろうか
72はちみつ餃子 ◆8X2XSCHEME
2021/08/11(水) 15:43:43.66ID:QcAq7ivU >>69
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
ランダムアクセスイテレータには difference_type (またはそれに暗黙に型変換出来る何か) を足すことができて、
その結果の型はイテレータ自身と同じ。
https://timsong-cpp.github.io/cppwp/n3337/random.access.iterators
2021/08/11(水) 15:52:06.26ID:SyYdmIb8
2021/08/11(水) 15:54:21.05ID:19rzwYjH
>>71
そういうこと
そういうこと
75デフォルトの名無しさん
2021/08/13(金) 02:38:58.72ID:tLa9gek2 char *mystrcat(char *a, char *b)
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
}
みたいな実装にするとき参照カウンタが無限に増える心配はありますか?
shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b)
の方が良いのでしょうか?
あと
hoge = mystrcat(NULL, hage); みたいに使用されるときは
mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
{
// a に b を結合して
return a;
}
みたいな関数を
shared_ptr<char *> mystrcat(shared_ptr<char *> a, char *b)
{
// a に b を結合して
return a;
}
みたいな実装にするとき参照カウンタが無限に増える心配はありますか?
shared_ptr<char *> mystrcat(weak_ptr<char *> a, char *b)
の方が良いのでしょうか?
あと
hoge = mystrcat(NULL, hage); みたいに使用されるときは
mystrcat の中で new してコピーして new したポインタを返したいのですが問題ありませんか?
2021/08/13(金) 02:56:15.88ID:nopi39s7
>>75
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
shared_ptr<char *> だと、たぶんやりたいことはできてない。
shared_ptr<char[]> の間違いなんだろうと思うけど、この時点でコンパイルすら試してないのが見て取れる。
参照カウンタの動きは挙げられたソースだけじゃ読み取れないけど、無限に増えるなんてことはまず起こらない。
shared_ptr の use_count() で取れるから試してみればいい。
問題があるかどうかも自分で試してみればいい。何を「問題」とするかこちらにはわからないし。
2021/08/13(金) 09:51:25.31ID:BE9FMbqU
個別の事例で心配ない、問題ないという返答を得たとしても理解が深まらない。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
shared_ptr のメカニズムを理解できないと何度でも心配になるだけ。
どういう理屈で参照カウンタが無限に増えると思ったのかを説明してみて。
考え方に間違いがあれば指摘するよ。
2021/08/13(金) 11:40:57.21ID:UG8FRdqC
char *mystrcat(char *a, char *b)
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
{
// a に b を結合して
return make_shared<char []>(a);
}
じゃいかんの
しらんけど
2021/08/13(金) 14:30:41.36ID:vEVo7A6C
適当な質問者と適当な回答者
ゴミとゴミをあわせてもゴミはゴミ
ゴミとゴミをあわせてもゴミはゴミ
2021/08/13(金) 18:27:35.00ID:tLa9gek2
shared_ptr<char []> c(a);
return &c[0];
return &c[0];
2021/08/14(土) 08:57:21.71ID:dlgzlAXX
namespaceってどのように使うものなんですか?
存在意義がわからない。
存在意義がわからない。
2021/08/14(土) 09:56:52.00ID:2Gpa2MRC
>>81
大規模ライブラリを設計するときに重宝する機能
詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う
namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず
どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ
存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない
大規模ライブラリを設計するときに重宝する機能
詳しい経緯は知らないがグローバルスコープの識別子名の競合を回避する目的で導入されたと思う
namespaceがないC言語時代にいくつからの大規模ライブラリを組み合わせたときに何が起きがちだったか知っていれば納得出来るはず
どんな機能もそうだが、自分が必要と思った時に使えば良いだけだよ
存在意義が分からないならお前にとっては必要のない機能ということだから、気にする必要はない
2021/08/14(土) 10:45:32.18ID:MjnqNUAd
Cにnamespaceが導入されないのは何故なんです?
2021/08/14(土) 10:48:18.77ID:isR1pnnS
2021/08/14(土) 11:05:20.03ID:HmVXtcJk
>>83
namespace
namespace
2021/08/14(土) 11:07:32.50ID:HmVXtcJk
>>83
namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな
namespaceを導入するということは :: だのマングリングだのADLだの色々付いてくるからな
2021/08/14(土) 11:09:29.69ID:sh47n3w4
>>83
マングリングが必要になってしまうから、ってのが大きいだろうな。
マングリングが必要になってしまうから、ってのが大きいだろうな。
88デフォルトの名無しさん
2021/08/14(土) 11:16:28.29ID:Wd8wuOU/ C++を本格的に学ぼうと思って本を数冊買ったが、言語仕様が複雑な割には知らないとエラー起こすだろ
っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか
っていう項目が多くてビビってる。あと、きれいなコードを書くのに尋常じゃない経験が必要なんじゃないか
89はちみつ餃子 ◆8X2XSCHEME
2021/08/14(土) 11:34:44.96ID:xM4RG8+9 全部知らなくてもわかる部分だけでまあまあ使えるというのが C++ の方針なので
最初から綺麗に書こうと思わないほうがいいと思う。
綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。
最初から綺麗に書こうと思わないほうがいいと思う。
綺麗に書けないと考えるより汚くても普通なんだと考えると気が楽でしょ。
2021/08/14(土) 11:41:20.52ID:HmVXtcJk
構造体の中に関数が書ける、というコアの中のコアな部分の使い方・考え方さえ憶えるというより慣れれば
あと他のは追加で憶えればいいってだけ
ただし、その追加が今とんでもない量になってて
禿本の初版からやってる俺でさえ憶えきれなくてもがいてる
あと他のは追加で憶えればいいってだけ
ただし、その追加が今とんでもない量になってて
禿本の初版からやってる俺でさえ憶えきれなくてもがいてる
2021/08/14(土) 11:47:19.11ID:fhp8ilcT
いいかい学生さん、 他人のコードをな、 他人のコードをいつでも読めるくらいになりなよ。
それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。
それが、人間えら過ぎもしない貧乏過ぎもしない、 ちょうどいいくらいってとこなんだ。
2021/08/14(土) 13:15:40.19ID:MjnqNUAd
2021/08/14(土) 13:23:47.33ID:sh47n3w4
他人のコードを読んで学ぶのに一番向いてない言語だよなC++は。
2021/08/14(土) 13:48:08.91ID:fhp8ilcT
オーバーロードが悪いんですよ
2021/08/14(土) 14:19:07.48ID:EcmTnCEO
>>93
perl に比べたらまだマシ
perl に比べたらまだマシ
2021/08/14(土) 17:38:14.88ID:sh47n3w4
perlは文法が複雑なだけで、知らない書き方に出会ったらそれを調べればいい。
C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。
C++はコードの断片だけ見ても動作を想像できないことがあるから厄介。
2021/08/14(土) 18:45:25.98ID:lbIZmRLc
ぶっちゃけスマートポインターって面倒だよね?
2021/08/14(土) 18:54:41.75ID:fhp8ilcT
スマポに限らず面倒なテンプレートクラスだらけだよ
2021/08/14(土) 18:56:25.80ID:fRH2bKcn
ぶっちゃけどんなときに面倒だと感じる?
100デフォルトの名無しさん
2021/08/14(土) 19:58:29.67ID:x6Wgppy9 スマートポインタに慣れたら自分で解放しなきゃならないmallocやnewの方がよっぽど面倒
101デフォルトの名無しさん
2021/08/14(土) 20:04:27.45ID:HmVXtcJk >>98
クラステンプレートな
クラステンプレートな
102デフォルトの名無しさん
2021/08/14(土) 21:41:33.25ID:fhp8ilcT autoが便利すぎて反復子の型を明示していたころのC++には戻れそうにない
103デフォルトの名無しさん
2021/08/14(土) 22:18:40.56ID:cML6JT7R 11よりは前は書きたくないね
104デフォルトの名無しさん
2021/08/15(日) 00:20:00.85ID:YeWgyy60 QZ案外初心者やなw
でも言ってることは全面的に賛成
ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う
でも言ってることは全面的に賛成
ポインタや参照、クラス等の基本を抑えてからでないとスマポや、C++11からの要素(右辺値参照含む)の使い方もわからんと思う
105デフォルトの名無しさん
2021/08/15(日) 06:30:24.80ID:AkVzvB4L autoもそうだが ->戻り型やusingエイリアスもだね
typedefには戻れない
typedefには戻れない
106ハノン ◆QZaw55cn4c
2021/08/15(日) 09:34:41.47107デフォルトの名無しさん
2021/08/15(日) 14:37:33.11ID:Qb5ISoeo >>104
なにこれ?
QZ「〜」
名無し「QZ初心者やな。でも賛成」
っていう自演をやろうとしたが、一個目のQZのレスをコテつけ忘れで投稿してしまったのか?
あるいははちみつとQZを同一視している?
いずれにせよとんでもない皮肉だな笑
なにこれ?
QZ「〜」
名無し「QZ初心者やな。でも賛成」
っていう自演をやろうとしたが、一個目のQZのレスをコテつけ忘れで投稿してしまったのか?
あるいははちみつとQZを同一視している?
いずれにせよとんでもない皮肉だな笑
109デフォルトの名無しさん
2021/08/15(日) 17:48:49.44ID:pJ9UilRh >>107
それ、以前俺が書いたカキコを勝手にコピペされただけだよ
それ、以前俺が書いたカキコを勝手にコピペされただけだよ
110デフォルトの名無しさん
2021/08/15(日) 17:52:57.61ID:/OoKg6VD クッソささやかな体面保つためだけの自演も失敗とか本当にみじめないきものだな…
111デフォルトの名無しさん
2021/08/15(日) 18:00:11.34ID:/ZNLC/hj これか。どういう意図のコピペなんだろうかね。
https://mevius.5ch.net/test/read.cgi/tech/1594615908/595
https://mevius.5ch.net/test/read.cgi/tech/1594615908/595
112はちみつ餃子 ◆8X2XSCHEME
2021/08/15(日) 18:12:10.32ID:oR5NZ4bd113デフォルトの名無しさん
2021/08/15(日) 18:15:56.65ID:pJ9UilRh114はちみつ餃子 ◆8X2XSCHEME
2021/08/15(日) 18:21:10.51ID:oR5NZ4bd115デフォルトの名無しさん
2021/08/15(日) 18:25:05.27ID:pJ9UilRh (´・ω・`)そうか
116デフォルトの名無しさん
2021/08/16(月) 15:03:34.95ID:Gh+OcB3l >>107
なんで突然はちみつ?
なんで突然はちみつ?
117はちみつ餃子 ◆8X2XSCHEME
2021/08/16(月) 15:17:56.99ID:5E5Krdno >>116
現時点でこのスレにコテ (+トリップ) 付きで書き込んでいるのがはちみつ餃子と QZ だけだからだろ。
現時点でこのスレにコテ (+トリップ) 付きで書き込んでいるのがはちみつ餃子と QZ だけだからだろ。
118デフォルトの名無しさん
2021/08/16(月) 19:18:38.03ID:QgSHgEhC (unsigned) intの数を受けたら何らかの演算をして (unsigned) long longの数を返す、(unsigned) double の数を受けたら何らかの演算をして (unsigned) long double の数を返す、みたいのって逐一オーバーロードを書くしかないですよね?
要するに、大きいデータ型に格上げして何らかの演算をして返したいってことなんですが
要するに、大きいデータ型に格上げして何らかの演算をして返したいってことなんですが
119ハノン ◆QZaw55cn4c
2021/08/16(月) 19:34:40.64120デフォルトの名無しさん
2021/08/16(月) 19:55:44.02ID:AiYiQHL1 引数をテンプレートにして、引数Tのビット数と整数型かどうかを見て、一段階大きい型を戻り値の型とすることは出来る
122デフォルトの名無しさん
2021/08/16(月) 21:59:33.60ID:AiYiQHL1 ごめん、めんどい・・というか
sizeof(T)と整数or浮動小数点数のbool(is_integralとかで取る)を受け取る構造体の中でtype(戻り値の型)を定義、とか考えてたけど
結局Tのサイズごとに特殊化するから手間変わらん、てのと
関数の中身が長くなるなら、オーバーロードした関数からテンプレート版(戻り値の型と引数の型がテンプレート)を呼んで、そこで中身書けば一回で済むね
sizeof(T)と整数or浮動小数点数のbool(is_integralとかで取る)を受け取る構造体の中でtype(戻り値の型)を定義、とか考えてたけど
結局Tのサイズごとに特殊化するから手間変わらん、てのと
関数の中身が長くなるなら、オーバーロードした関数からテンプレート版(戻り値の型と引数の型がテンプレート)を呼んで、そこで中身書けば一回で済むね
123デフォルトの名無しさん
2021/08/16(月) 23:40:17.97ID:cwTPPWgm >>118
ふつうに long long や long double を引数で受け取るって演算して返す関数を書けば
その通りの動作になりそうなんだけど、何か気に入らないの?
2つ関数書くのが嫌だってこと?(やりたいことが少なくとも2通りあるのに?)
ふつうに long long や long double を引数で受け取るって演算して返す関数を書けば
その通りの動作になりそうなんだけど、何か気に入らないの?
2つ関数書くのが嫌だってこと?(やりたいことが少なくとも2通りあるのに?)
124はちみつ餃子 ◆8X2XSCHEME
2021/08/17(火) 00:20:49.88ID:yPn/BtRt 大きい型というのは一段階大きい型という意味なのかな?
型の大きさは処理系 (アーキテクチャ) 依存だし、
ポータブルに書こうと思ったら思ったよりも面倒な感じ。
主要なアーキテクチャだけ対処できればいいなら
8 → 16 → 32 → 64
の拡張が出来ればいいので用意するパターンはそんなに多くはない。
ちなみに Windows の long double は double と同じ大きさだよ。
型の大きさは処理系 (アーキテクチャ) 依存だし、
ポータブルに書こうと思ったら思ったよりも面倒な感じ。
主要なアーキテクチャだけ対処できればいいなら
8 → 16 → 32 → 64
の拡張が出来ればいいので用意するパターンはそんなに多くはない。
ちなみに Windows の long double は double と同じ大きさだよ。
125デフォルトの名無しさん
2021/08/17(火) 02:08:49.72ID:rNAqXouz 何種類か関数があるならtraitsを作成するのもありじゃない?
126デフォルトの名無しさん
2021/08/18(水) 04:11:58.97ID:ReVsRUuR 関数読んだら1段階デカい型が返ってくるなんて使う側でも面倒が起きそうだな
127デフォルトの名無しさん
2021/08/18(水) 04:23:43.76ID:TZ94eDdV まぁ、戻り値にも使用できるテンプレートの追加の型を関数内でconstexpr的に定義出来たらいろいろ面白いことが出来そうではあるなw
128デフォルトの名無しさん
2021/08/19(木) 15:14:48.98ID:9cCAU3aU 話は勝手に変わるけど、
{ 1,2,3,4,5 }
のような書き方が initializer_list になる場合とならない場合を全て知りたいけど
良く分からないので、誰か教えてくれまいか。
{ 1,2,3,4,5 }
のような書き方が initializer_list になる場合とならない場合を全て知りたいけど
良く分からないので、誰か教えてくれまいか。
129デフォルトの名無しさん
2021/08/19(木) 15:21:14.80ID:9cCAU3aU >>128
的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも
A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという
ことなのか、あるいは、
auto x {・・・};
auto x = {・・・};
auto x = TYPE {・・・};
func({・・・});
のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら
initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
のか、どちらなんだろう????
的を外しているかも知れないけど、その書き方をAと書くとすると、どんな文脈でも
A自体が最初に必ずいったん initializer_list<T> になった後にそれぞれの文脈で処理されるという
ことなのか、あるいは、
auto x {・・・};
auto x = {・・・};
auto x = TYPE {・・・};
func({・・・});
のようにいろいろな書き方や文脈が変わるとそもそも A は意味論的にすら
initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
のか、どちらなんだろう????
130デフォルトの名無しさん
2021/08/19(木) 15:24:22.53ID:9cCAU3aU あと、良く分からないのが、
struct CPerson {
・・・
CPerson(int a, int b, int c) {・・・} //(1)
};
とあった場合、
1. CPerson a{1,2,3};
2. CPerson a={1,2,3};
3. CPerson a=CPerson{1,2,3};
のどれを書いても多分、(1)が呼び出される気がするけど、
struct CPerson {
・・・
CPerson(initializer_list<int> a) {・・・} //(2)
};
と書いた場合、1,2,3 はやはり全て(2)が呼び出されるのだろうか?
struct CPerson {
・・・
CPerson(int a, int b, int c) {・・・} //(1)
};
とあった場合、
1. CPerson a{1,2,3};
2. CPerson a={1,2,3};
3. CPerson a=CPerson{1,2,3};
のどれを書いても多分、(1)が呼び出される気がするけど、
struct CPerson {
・・・
CPerson(initializer_list<int> a) {・・・} //(2)
};
と書いた場合、1,2,3 はやはり全て(2)が呼び出されるのだろうか?
131はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 16:38:31.07ID:z/GAGLjl >>129
> initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
initializer_list を経由しないことはある。
おおざっぱには initializer_list を受け取る文脈では initializer_list だし、
推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、
そうでないときは initializer_list を経由しない。
> initializer_list<T> を経由せずにそれぞれ独自に解釈されて処理される
initializer_list を経由しないことはある。
おおざっぱには initializer_list を受け取る文脈では initializer_list だし、
推論が必要なとき (auto やテンプレート) にも initializer_list に推論されるが、
そうでないときは initializer_list を経由しない。
132はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 16:48:40.83ID:z/GAGLjl >>130
優先順位がある。
1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。
initializer_list を受け取るコンストラクタが存在しなければ
三引数のコンストラクタが呼出される。
優先順位がある。
1. 2. 3. のいずれも initializer_list としての解釈が「優先される」。
initializer_list を受け取るコンストラクタが存在しなければ
三引数のコンストラクタが呼出される。
133デフォルトの名無しさん
2021/08/19(木) 16:54:44.67ID:9cCAU3aU >>132
なるほど。確認だけど、
1. CPerson a{1,2,3};
2. CPerson a={1,2,3};
3. CPerson a=CPerson{1,2,3};
4. CPerson a(1,2,3);
5. CPerson a=CPerson(1,2,3);
は、どれも3引数のコンストラクタで受け取ることは可能ということでOk?
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
なるほど。確認だけど、
1. CPerson a{1,2,3};
2. CPerson a={1,2,3};
3. CPerson a=CPerson{1,2,3};
4. CPerson a(1,2,3);
5. CPerson a=CPerson(1,2,3);
は、どれも3引数のコンストラクタで受け取ることは可能ということでOk?
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
134はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 17:08:54.15ID:z/GAGLjl >>133
(initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、
5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。
(コピーコンストラクタ、またはムーブコンストラクタが起動する。)
ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。
そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない
といった重要な違いがある。
(initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。
(initializer_list を受け取るコンストラクタが無ければ) いずれも 3 引数のコンストラクタが起動されるが、
5. は 3 引数のコンストラクタでオブジェクトを構築した上で a にコピーする。
(コピーコンストラクタ、またはムーブコンストラクタが起動する。)
ただし RVO が有効な状況ではコピーやムーブはが省略されるので 5. は 4. と同じ。
そしてこの場合には関係ないが、波括弧によるコンストラクタ起動では引数の暗黙の型変換を許さない
といった重要な違いがある。
(initializer_list を受け取るコンストラクタが有る状況でも) 4. と 5. は initializer_list とは解釈されない。
135デフォルトの名無しさん
2021/08/19(木) 17:14:28.81ID:9cCAU3aU >>134
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
については?
1. 2. 3. は、initializer_list を受け取るコンストラクタでも受け取ることが可能?
4. 5. は、initializer_list を受け取るコンストラクタでも受け取ることは不可能??
については?
137デフォルトの名無しさん
2021/08/19(木) 17:21:53.70ID:9cCAU3aU >>136
すまん。もう一度明言してくれるとありがたい。
すまん。もう一度明言してくれるとありがたい。
138デフォルトの名無しさん
2021/08/19(木) 17:27:44.09ID:td+NCu9W template <int N> void test(std::bitset<N>& arg);
int main()
{
std::bitset<1ull> lvalue;
test(lvalue);
}
これ、Nが推定できないのはなんで?
int main()
{
std::bitset<1ull> lvalue;
test(lvalue);
}
これ、Nが推定できないのはなんで?
139デフォルトの名無しさん
2021/08/19(木) 17:28:31.68ID:td+NCu9W すまん、自己解決
unsigned long long Nが正解だった
unsigned long long Nが正解だった
140はちみつ餃子 ◆8X2XSCHEME
2021/08/19(木) 17:30:02.71ID:z/GAGLjl■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「日本はパンダがいなくなる状況に直面するだろう」 中国メディア、専門家の見方伝える [♪♪♪★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★11 [樽悶★]
- 止まらぬ「日本売り」 高市財政への懸念で進む金利上昇と円安 ★2 [蚤の市★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★12 [樽悶★]
- 外国人の犯罪率は日本人の1.72倍 警察庁が短期滞在者除いた数字を参院内閣委で答弁★2 [七波羅探題★]
- 【無言】中国怒らせた高市首相→1週間だんまり、国民に実害も説明なし 中国問題を避けてスルー… ★5 [BFU★]
- 🏡
- 【高市悲報】大暴落 [115996789]
- 【速報】東京から人が消える [329329848]
- 【悲報】最強ロシア軍が3年と100万人を失いながら奪った領土、あまりにも広大過ぎると話題にww ウク信逝きましたー [916950698]
- 友達がお前らの事をさ…
- 銀行立てこもり犯「そこの男、この女とセックスしろ。マスコミはそれを生中継しろ」
