!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part162
https://mevius.5ch.net/test/read.cgi/tech/1667194175/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
C++相談室 part163
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ bbda-Axul)
2022/12/30(金) 23:16:31.37ID:DPUEZfMS0302デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/29(日) 23:00:33.52ID:JRnzhQFiM >>301
>「コピー初期化」ってのはコピーコンストラクタを呼ぶ初期化
>あるいはコピーコンストラクタ自体のことで良いのかな?
個人的には、
CPerson::CPerson( CPerson const &rPeson )
の形式のコンストラクタがコピーコンストラクタで、
それを使う初期化がコピー初期化、と思って今まで生きてきたが、
それだと、「直接初期化」の対比の意味のものとは違っているように思える。
どこかで、言葉の混乱が起きているかも。
分からない。
>「コピー初期化」ってのはコピーコンストラクタを呼ぶ初期化
>あるいはコピーコンストラクタ自体のことで良いのかな?
個人的には、
CPerson::CPerson( CPerson const &rPeson )
の形式のコンストラクタがコピーコンストラクタで、
それを使う初期化がコピー初期化、と思って今まで生きてきたが、
それだと、「直接初期化」の対比の意味のものとは違っているように思える。
どこかで、言葉の混乱が起きているかも。
分からない。
303デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/29(日) 23:11:23.60ID:JRnzhQFiM >>302
一部の例外を除いては、「コピー初期化」とは、= が書いてある初期化で、
「直接初期化」とは、= が書いて無い初期化、だといわれている。
但し、沢山例外があって、
T x = T(a);
などは、直接初期化なんだそうだ。
また、return a などは、コピー初期化、なんだそうだ。
記憶に頼っているので間違っているかも知れない。
一部の例外を除いては、「コピー初期化」とは、= が書いてある初期化で、
「直接初期化」とは、= が書いて無い初期化、だといわれている。
但し、沢山例外があって、
T x = T(a);
などは、直接初期化なんだそうだ。
また、return a などは、コピー初期化、なんだそうだ。
記憶に頼っているので間違っているかも知れない。
304デフォルトの名無しさん (ワッチョイ 83da-lkW6)
2023/01/29(日) 23:20:25.89ID:ppqTPlns0 コピコンか代入か明示するためのexplicitよ
305はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-fO7+)
2023/01/30(月) 01:17:26.91ID:kRDQpz8S0 >>302
コンストラクタはどれも直接初期化に使えるコンストラクタだけど
一定の形式を満たすものはコピー初期化の文脈「でも」使えるってだけ。
>>303
> T x = T(a);
> などは、直接初期化なんだそうだ。
これについて形式的にはあくまでもコピー初期化の一種ということになる。
https://timsong-cpp.github.io/cppwp/n4659/dcl.init#15
その上でコピーの省略が起きて結果的には直接初期化と同じ挙動になる。
https://timsong-cpp.github.io/cppwp/n4659/class.copy.elision#1
コンストラクタはどれも直接初期化に使えるコンストラクタだけど
一定の形式を満たすものはコピー初期化の文脈「でも」使えるってだけ。
>>303
> T x = T(a);
> などは、直接初期化なんだそうだ。
これについて形式的にはあくまでもコピー初期化の一種ということになる。
https://timsong-cpp.github.io/cppwp/n4659/dcl.init#15
その上でコピーの省略が起きて結果的には直接初期化と同じ挙動になる。
https://timsong-cpp.github.io/cppwp/n4659/class.copy.elision#1
306デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 16:11:51.36ID:S2+yDPxmM 記憶に頼って書くけど、
1. 1つの引数を持つコンストラクタは、explicit修飾することが推奨されている。
2. explicit指定が無いと、そのつもりは無い「ひょんな場所」で勝手に変換コンストラクタとして
利用されてしまうことがある。特に関数に引数を渡す場合に起き易いらしい。
3. CPerson::CPerson( CPerson &rPerson ) は、同じ型を単純にコピーする
コンストラクタであるから、そもそも型の変換はしないので変換コンストラクタでなく、
「コピー・コンストラクタ」と言われる。
4. つまり、CPerson::CPerson( AAA &rAAA ) のような場合に
1. 1つの引数を持つコンストラクタは、explicit修飾することが推奨されている。
2. explicit指定が無いと、そのつもりは無い「ひょんな場所」で勝手に変換コンストラクタとして
利用されてしまうことがある。特に関数に引数を渡す場合に起き易いらしい。
3. CPerson::CPerson( CPerson &rPerson ) は、同じ型を単純にコピーする
コンストラクタであるから、そもそも型の変換はしないので変換コンストラクタでなく、
「コピー・コンストラクタ」と言われる。
4. つまり、CPerson::CPerson( AAA &rAAA ) のような場合に
307デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 16:18:21.06ID:S2+yDPxmM >>306
[誤送信してしまった。スマソ]
4. つまり、CPerson::CPerson( AAA const &rAAA ) や CPerson::CPerson( int &rX )
のような場合に explicit 指定することが推奨されていたと思う。
T x = T(a);
の場合、「C++のからくり」のような昔の解説書だと、最適化に任されているのではなく、
特別処理されているようなニュアンス(?)で、T x(a) と同じだと書いてあった。
もし、特別処理されてないと考えた場合、= の部分だけに着目すれば、T::T( T const &rX ) という
コピーコンストラクタの呼び出しと意味論的には考えて考えられなくも無い。
そうするとそこは「変換コンストラクタ」ではなく「コピーコンストラクタ」が使われることになる。
コピーコンストラクタはいくら使っても速度が遅くなる以外は劣化やデータの変化が無いため
無害と言えば無害。なので、explicit が付いていてもいなくても余り関係が無いような気がする。
[誤送信してしまった。スマソ]
4. つまり、CPerson::CPerson( AAA const &rAAA ) や CPerson::CPerson( int &rX )
のような場合に explicit 指定することが推奨されていたと思う。
T x = T(a);
の場合、「C++のからくり」のような昔の解説書だと、最適化に任されているのではなく、
特別処理されているようなニュアンス(?)で、T x(a) と同じだと書いてあった。
もし、特別処理されてないと考えた場合、= の部分だけに着目すれば、T::T( T const &rX ) という
コピーコンストラクタの呼び出しと意味論的には考えて考えられなくも無い。
そうするとそこは「変換コンストラクタ」ではなく「コピーコンストラクタ」が使われることになる。
コピーコンストラクタはいくら使っても速度が遅くなる以外は劣化やデータの変化が無いため
無害と言えば無害。なので、explicit が付いていてもいなくても余り関係が無いような気がする。
308デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 16:24:16.09ID:S2+yDPxmM >>307
[補足]
void f(T x);
に対して、
U a;
f(a);
と書くと、実引数aが仮引数xに渡される時の動作は、「コピー(?)初期化」と考えられて
いる。もしかしたら言葉は正しく無いかもしれないが、少なくとも「直接初期化」には
分類されないということ。
そしてexplicitが付いて無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
[補足]
void f(T x);
に対して、
U a;
f(a);
と書くと、実引数aが仮引数xに渡される時の動作は、「コピー(?)初期化」と考えられて
いる。もしかしたら言葉は正しく無いかもしれないが、少なくとも「直接初期化」には
分類されないということ。
そしてexplicitが付いて無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
309デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 16:25:22.84ID:S2+yDPxmM >>308
[訂正]
誤: そしてexplicitが付いて無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
正: そしてexplicitが付いている無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
[訂正]
誤: そしてexplicitが付いて無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
正: そしてexplicitが付いている無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
310デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 16:26:12.39ID:S2+yDPxmM >>309
[再訂正]
誤: そしてexplicitが付いている無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
正: そしてexplicitが付いているコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
[再訂正]
誤: そしてexplicitが付いている無いコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
正: そしてexplicitが付いているコンストラクタは、このような初期化に対しては用いられ
ないことが保証されると書いてあったと思う。
311デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 16:50:51.20ID:S2+yDPxmM >>304
explicit指定の主な役割は、変換コンストラクタにexplicit修飾しておくことで
「変換コンストラクタが知らず知らずのうちに勝手に使われてしまう事」
を防げる、ということだったと思う。
explicit指定の主な役割は、変換コンストラクタにexplicit修飾しておくことで
「変換コンストラクタが知らず知らずのうちに勝手に使われてしまう事」
を防げる、ということだったと思う。
312デフォルトの名無しさん (スップ Sd5a-VuUV)
2023/01/30(月) 16:53:41.85ID:BI3s5DYMd regexやthreadのexplicitが邪魔
313はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-fO7+)
2023/01/30(月) 17:25:41.99ID:kRDQpz8S0 >>306
explicit を付けることは推奨されているわけじゃない。
推奨している人もいるけど普通は必要に応じて使い分けるよ。
明らかに変換を意味しないようなコンストラクタになっちゃうこともあるから気を付けろという程度の話。
たとえば vector は size_t を受け取るコンストラクタがある (指定サイズ分の大きさになる) がそれには当然 explicit が付いてる。
整数が vector に変換されるのは明らかにおかしいから。
char* から string への変換みたいな自然な変換では困らないし、あるほうが便利。
>>307
> 特別処理されているようなニュアンス
かつてはその場合はコピーの省略が許される (しなくてもよい) という仕様だった。 (今の仕様だとコピーの省略が必須。)
コピーコンストラクタは必ずしもコピーをするだけではなくなんらかの副作用を引き起こしても良いので
コピーの省略の有無によってプログラムの意味が変わってしまう。
プログラムの意味を変えない範囲で処理系が行う通常の「最適化」とは異なるという意味では特別扱いだ。
explicit を付けることは推奨されているわけじゃない。
推奨している人もいるけど普通は必要に応じて使い分けるよ。
明らかに変換を意味しないようなコンストラクタになっちゃうこともあるから気を付けろという程度の話。
たとえば vector は size_t を受け取るコンストラクタがある (指定サイズ分の大きさになる) がそれには当然 explicit が付いてる。
整数が vector に変換されるのは明らかにおかしいから。
char* から string への変換みたいな自然な変換では困らないし、あるほうが便利。
>>307
> 特別処理されているようなニュアンス
かつてはその場合はコピーの省略が許される (しなくてもよい) という仕様だった。 (今の仕様だとコピーの省略が必須。)
コピーコンストラクタは必ずしもコピーをするだけではなくなんらかの副作用を引き起こしても良いので
コピーの省略の有無によってプログラムの意味が変わってしまう。
プログラムの意味を変えない範囲で処理系が行う通常の「最適化」とは異なるという意味では特別扱いだ。
314デフォルトの名無しさん (ワッチョイ b7f4-+rQD)
2023/01/30(月) 17:35:07.72ID:c/LsY66H0 難しいなぁ。。。
ubuntu の g++って 11.1以降だから、c++23だったのね。
すご って思いました。
ubuntu の g++って 11.1以降だから、c++23だったのね。
すご って思いました。
315デフォルトの名無しさん (スップ Sd5a-VuUV)
2023/01/30(月) 19:37:46.73ID:BI3s5DYMd C++2bはまだドラフトだよ
316デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/01/30(月) 20:58:31.18ID:rMqdSurOM >>313
>たとえば vector は size_t を受け取るコンストラクタがある (指定サイズ分の大きさになる) がそれには当然 explicit が付いてる。
>整数が vector に変換されるのは明らかにおかしいから。
>char* から string への変換みたいな自然な変換では困らないし、あるほうが便利。
なるほど。そうだったのか。
勉強になりました。
>たとえば vector は size_t を受け取るコンストラクタがある (指定サイズ分の大きさになる) がそれには当然 explicit が付いてる。
>整数が vector に変換されるのは明らかにおかしいから。
>char* から string への変換みたいな自然な変換では困らないし、あるほうが便利。
なるほど。そうだったのか。
勉強になりました。
317デフォルトの名無しさん (アウアウウー Sa47-hJvz)
2023/02/02(木) 23:34:11.97ID:Ce1dvKO2a C++やるとどんな言語も使えるとか言うけどNode.jsも数時間あれば使いこなせるの?
あれは言語じゃないでしょって言われそうだがjavascriptともhtmlとも違くて別言語に思えるんだけど
あれは言語じゃないでしょって言われそうだがjavascriptともhtmlとも違くて別言語に思えるんだけど
318デフォルトの名無しさん (ワッチョイ b7b7-5WkL)
2023/02/02(木) 23:52:01.04ID:zSdJjx9q0319デフォルトの名無しさん (ワッチョイ 83da-lkW6)
2023/02/03(金) 00:10:02.14ID:GSbNqAeQ0 C++出来ます‼ってのはC言語上がりのなんちゃってチャソも含まれるから一概には言えない
320はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e33e-fO7+)
2023/02/03(金) 00:27:17.07ID:cvg0vFRY0 >>317
C++ を使っていれば低レイヤの事情やシステム全体の関連を知る機会があるし、
言語処理系がどう実装されるのか (低レイヤの視線から見てどう動くのか) を知っていれば
常識的な言語デザインの感覚がわかる。 (言語仕様を類推しやすい。)
C++ を使いこなしている状況からなら色々と理解しやすいという効果がないとは言えない。
ただ、あくまでも C++ を使いこなせるようになる過程で言語自体以外にも身につくことがあるという部分が効いてくるので
C++ の言語仕様の知識はそれほど役に立つわけではないし、さすがに数時間で Node.js を使いこなせるということはない。
C++ を使っていれば低レイヤの事情やシステム全体の関連を知る機会があるし、
言語処理系がどう実装されるのか (低レイヤの視線から見てどう動くのか) を知っていれば
常識的な言語デザインの感覚がわかる。 (言語仕様を類推しやすい。)
C++ を使いこなしている状況からなら色々と理解しやすいという効果がないとは言えない。
ただ、あくまでも C++ を使いこなせるようになる過程で言語自体以外にも身につくことがあるという部分が効いてくるので
C++ の言語仕様の知識はそれほど役に立つわけではないし、さすがに数時間で Node.js を使いこなせるということはない。
321デフォルトの名無しさん (アウアウウー Sa47-hJvz)
2023/02/03(金) 00:44:48.46ID:7WbTLk8Ha quoraとか知恵袋とかブログで「Cの次はC++をやればオブジェクト指向身について更にCから派生した言語が主流だからどんな言語も直ぐ理解できる」みたいなの多いよ
だからこのスレの人達ならNode.jsも余裕なのかなって
>>320
学ぶ過程の色んな経験が生きるって事か。そりゃそうだよね
だからこのスレの人達ならNode.jsも余裕なのかなって
>>320
学ぶ過程の色んな経験が生きるって事か。そりゃそうだよね
322はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e33e-fO7+)
2023/02/03(金) 01:31:41.47ID:cvg0vFRY0 >>321
JavaScript は C 風の外観を持ってこそいるけど動的型、かつ、プロトタイプベースであるという点で
根本的に異なるメカニズムなわけでこういうのを「C から派生」と呼んでよいのかどうか……。
JavaScript は C 風の外観を持ってこそいるけど動的型、かつ、プロトタイプベースであるという点で
根本的に異なるメカニズムなわけでこういうのを「C から派生」と呼んでよいのかどうか……。
323デフォルトの名無しさん (ワッチョイ 9af0-2biX)
2023/02/03(金) 07:32:32.82ID:gaR1XNY40 よく使う言語と比べて在るもの無いもの違うわけで
ちゃんと理解しようとしたらそれなりに時間がかかるでしょ
気軽に使いこなすとか言葉にしてると怖いおじさんに怒られるぞ
ちゃんと理解しようとしたらそれなりに時間がかかるでしょ
気軽に使いこなすとか言葉にしてると怖いおじさんに怒られるぞ
324デフォルトの名無しさん (ワッチョイ 5f10-3kgq)
2023/02/03(金) 08:03:03.43ID:HPBiMoRp0 そもそも理解しやすいと使いこなせるは別の概念やろ
325デフォルトの名無しさん (ワッチョイ e76b-N2mU)
2023/02/03(金) 09:08:55.43ID:b6b2xU8/0 vector<int>& a = c, b = c;
としたときに、bがcの参照になりませんでした。
&が後ろにかかるからかと思って
vector<int> &a = c, &b = c;
としても結果が変わりませんでした。
vector<int> &a = c;
vector<int> &b = c;
とすればやっと期待通りの動作になりました。
参照の宣言と初期化は複数をカンマで区切って一行で書くことは不可能なのでしょうか?
としたときに、bがcの参照になりませんでした。
&が後ろにかかるからかと思って
vector<int> &a = c, &b = c;
としても結果が変わりませんでした。
vector<int> &a = c;
vector<int> &b = c;
とすればやっと期待通りの動作になりました。
参照の宣言と初期化は複数をカンマで区切って一行で書くことは不可能なのでしょうか?
326デフォルトの名無しさん (ワッチョイ 83da-lkW6)
2023/02/03(金) 09:24:27.07ID:GSbNqAeQ0 え?コンパイラなに使ったの?
> vector<int> &a = c, &b = c;
> としても結果が変わりませんでした。
処理系ぶっ壊れてんのかな
> vector<int> &a = c, &b = c;
> としても結果が変わりませんでした。
処理系ぶっ壊れてんのかな
327デフォルトの名無しさん (ラクッペペ MMb6-Go++)
2023/02/03(金) 12:28:10.97ID:31rfnruOM c言語スレで質問したのですが
スレ違いとのことでしたので
改めて質問致します。
c言語の標準入出力ストリームの
本当に基本的なことなんですが
わからずに困っています。
教えてください。
std::ofstream stream;
ostream << "ABCEFG";
この入力した文字列の"ABCEFG"を
右側3文字を削除して"ABC"にするには
どうすれば良いのでしょうか?
スレ違いとのことでしたので
改めて質問致します。
c言語の標準入出力ストリームの
本当に基本的なことなんですが
わからずに困っています。
教えてください。
std::ofstream stream;
ostream << "ABCEFG";
この入力した文字列の"ABCEFG"を
右側3文字を削除して"ABC"にするには
どうすれば良いのでしょうか?
328デフォルトの名無しさん (ワッチョイ 0b01-Z6M9)
2023/02/03(金) 12:36:10.39ID:l5lsJ9Ru0 カーソルをEのところに持ってきてDeleteキーを3回押す
またはカーソルをGの右の"の上に移動してBSキーを3回押す
またはカーソルをGの右の"の上に移動してBSキーを3回押す
329デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/02/03(金) 13:21:17.85ID:cQeyOYIBM330デフォルトの名無しさん (オイコラミネオ MM63-ZqoR)
2023/02/03(金) 13:24:04.52ID:cQeyOYIBM >>329
[補足]
std::string str = "文字列";
の場合、
str.substr(開始位置, 取り出す長さ);
で部分文字列を作れるので、
std::string str = "ABCEFG";
の場合、
std::string str2 = str.substr(0, 3);
で str2 に "ABC" が入る。
[補足]
std::string str = "文字列";
の場合、
str.substr(開始位置, 取り出す長さ);
で部分文字列を作れるので、
std::string str = "ABCEFG";
の場合、
std::string str2 = str.substr(0, 3);
で str2 に "ABC" が入る。
331デフォルトの名無しさん (ラクッペペ MM4f-zLlH)
2023/02/04(土) 10:43:22.05ID:amDpu8JYM >>330
回答ありがとうございます。
あれから自分でも調べて
seekp()でファイル内位置を移動するなど
試してみたのですがうまくいきませんでした。
(修正の方向はあっていると思うのですが・・)
やはり>>330さんの言う通り、テキストの削除は難しくする
何かわかりませんがそういう思想があるみたいに感じました。
そこで自分も細かい編集は別に改めて行って
結果をまとめてstreamに出力する方法に切り替えました。
結果はOK、どうもありがとうございました。
tstring_t str = _T("ABCDEFG");
str.erase(str.size() - 3);
stream << str;
回答ありがとうございます。
あれから自分でも調べて
seekp()でファイル内位置を移動するなど
試してみたのですがうまくいきませんでした。
(修正の方向はあっていると思うのですが・・)
やはり>>330さんの言う通り、テキストの削除は難しくする
何かわかりませんがそういう思想があるみたいに感じました。
そこで自分も細かい編集は別に改めて行って
結果をまとめてstreamに出力する方法に切り替えました。
結果はOK、どうもありがとうございました。
tstring_t str = _T("ABCDEFG");
str.erase(str.size() - 3);
stream << str;
332デフォルトの名無しさん (ワッチョイ 4f01-hyUu)
2023/02/04(土) 11:10:24.50ID:e1OBQ9Uv0333デフォルトの名無しさん (アウアウウー Sa93-fxZT)
2023/02/04(土) 11:41:36.65ID:9C/WLP1pa >331
seekp seekg
tellp tellg
読み込み用と書き出し用でポインタが二つあるので
自分で思ってるのと違う場所になってるのかも
方向性はあってるはず
間違ってたらすまん子
seekp seekg
tellp tellg
読み込み用と書き出し用でポインタが二つあるので
自分で思ってるのと違う場所になってるのかも
方向性はあってるはず
間違ってたらすまん子
334デフォルトの名無しさん (ワッチョイ cf69-F1up)
2023/02/04(土) 14:37:50.00ID:cBqi3lSD0 >結果をまとめてstreamに出力する
これで済むなら、これこそが正道
必要のない出力をして後から切り詰めるなんて愚の骨頂
そうしなきゃならない理由があるならしょうがないけど
これで済むなら、これこそが正道
必要のない出力をして後から切り詰めるなんて愚の骨頂
そうしなきゃならない理由があるならしょうがないけど
335デフォルトの名無しさん (スッププ Sd5f-340S)
2023/02/04(土) 16:23:00.83ID:12Q26erYd >>331
テキストじゃなくてファイルの削除でしょ
そういう細かい言い間違いが多いから伝わりにくい文章になってると思う
ファイルに出力する前にメモリー上で編集済ますのは当たり前でファイルアクセスにはメモリよりも時間がかかるから
そういった基本を知ってたほうがいいプログラムを作れるよ
テキストじゃなくてファイルの削除でしょ
そういう細かい言い間違いが多いから伝わりにくい文章になってると思う
ファイルに出力する前にメモリー上で編集済ますのは当たり前でファイルアクセスにはメモリよりも時間がかかるから
そういった基本を知ってたほうがいいプログラムを作れるよ
336デフォルトの名無しさん (ラクッペペ MM4f-lcFY)
2023/02/04(土) 17:43:09.03ID:amDpu8JYM337デフォルトの名無しさん (アウアウウー Sa93-3Nzt)
2023/02/04(土) 17:45:16.88ID:NGTrSsWja アホの謎の上から目線
338デフォルトの名無しさん (スッププ Sd5f-340S)
2023/02/04(土) 19:15:57.04ID:EmptyAuWd >>336
ひょっとしてファイル上に出力した状態をテキストと呼んでるのか
メモリ上かファイル上かの区別でそんな呼び方はしない
思想とかじゃなくてメモリとファイルにはそういう性質があるってだけ
早とちりの激しい人のようだな
ひょっとしてファイル上に出力した状態をテキストと呼んでるのか
メモリ上かファイル上かの区別でそんな呼び方はしない
思想とかじゃなくてメモリとファイルにはそういう性質があるってだけ
早とちりの激しい人のようだな
339デフォルトの名無しさん (ワッチョイ 4f01-mMLA)
2023/02/04(土) 19:36:14.65ID:YYLIzwcR0 お前も人に言い間違い云々とか言う前にファイルの削除とか書くなよ...
せめてファイルのテキストから削除とか書かないと意味わからんだろ
せめてファイルのテキストから削除とか書かないと意味わからんだろ
340デフォルトの名無しさん (ラクッペペ MM4f-zLlH)
2023/02/04(土) 19:47:05.93ID:amDpu8JYM >>338
いや全然違うよ、もっと基礎的な話で
C言語の標準入出力ストリームでのテキスト出力の話をしているの。
(C++の文字列クラス std::stringとはまた別)
>>327の
ostream << "ABCEFG";
はテキストの書き込み処理だけど、
これをやっても内部のバッファに書き込まれるだけで
HDDファイルなどの真の書き込み先には書き込まれないの。
//ostream << std::fflush;
仮に上の関数を呼ぶことで初めてHDDファイルなどに書き込まれるの。
んで、入力されてまだフラッシュされていない文字列"ABCEFG"を
右側3文字を削除して"ABC"にするには
どうすれば良いのでしょうか?
ってのが私の質問なんです。
OK?
いや全然違うよ、もっと基礎的な話で
C言語の標準入出力ストリームでのテキスト出力の話をしているの。
(C++の文字列クラス std::stringとはまた別)
>>327の
ostream << "ABCEFG";
はテキストの書き込み処理だけど、
これをやっても内部のバッファに書き込まれるだけで
HDDファイルなどの真の書き込み先には書き込まれないの。
//ostream << std::fflush;
仮に上の関数を呼ぶことで初めてHDDファイルなどに書き込まれるの。
んで、入力されてまだフラッシュされていない文字列"ABCEFG"を
右側3文字を削除して"ABC"にするには
どうすれば良いのでしょうか?
ってのが私の質問なんです。
OK?
341デフォルトの名無しさん (ワッチョイ 3ff0-EOzK)
2023/02/04(土) 20:05:08.56ID:NNW9UvjL0 std::printってなんすか?鬱陶しいstream要らなくなりますか??
342デフォルトの名無しさん (ワッチョイ 0f7c-m47a)
2023/02/04(土) 20:22:02.19ID:Uc49lFdn0 >>340
std::flushは呼び出し後にバッファがフラッシュされることを保証するだけで、書き込みをするタイミングは未規定(pstreamの勝手)
ostreamはoperator<<が呼ばれたそばから全部書き出してもいいし、バッファを半分ずつとか書き出してもいいしそれはostreamの自由
「入力されてまだフラッシュされていない」なんていう状態はostreamが教える義理はないし真っ当な方法では外からは観測できないしするべきでもない
ましてそれを弄くろうなんて考えるのがカプセル化を無視した間違った考え方だ
std::flushは呼び出し後にバッファがフラッシュされることを保証するだけで、書き込みをするタイミングは未規定(pstreamの勝手)
ostreamはoperator<<が呼ばれたそばから全部書き出してもいいし、バッファを半分ずつとか書き出してもいいしそれはostreamの自由
「入力されてまだフラッシュされていない」なんていう状態はostreamが教える義理はないし真っ当な方法では外からは観測できないしするべきでもない
ましてそれを弄くろうなんて考えるのがカプセル化を無視した間違った考え方だ
343デフォルトの名無しさん (ワッチョイ 7fbb-jaVN)
2023/02/04(土) 20:26:28.53ID:b1h/gALG0 なんだろね。std::formatだけでは効率が悪かったのかな?
344デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/04(土) 20:26:47.52ID:KFFsFRScM >>340
C++のSTLには、ファイルではないstreamの中に、そういう機能を持つものがあり、
atoi()の代わりに用いる例が出ていた。
それは入力と出力が可能なstreamで、文字列を出力しておいて、整数型として
入力することが出来る。
それが出来るということは、語尾を削除することも出来そう。
C++のSTLには、ファイルではないstreamの中に、そういう機能を持つものがあり、
atoi()の代わりに用いる例が出ていた。
それは入力と出力が可能なstreamで、文字列を出力しておいて、整数型として
入力することが出来る。
それが出来るということは、語尾を削除することも出来そう。
345デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/04(土) 20:59:53.67ID:KFFsFRScM 全く確認できてないが、。
stringstring s;
s << "ABCDEF";
string s2;
s >> setw(3) >> s2;
で s2 に "ABC" が読み込めるかもしれない。
誰か確認して候。
stringstring s;
s << "ABCDEF";
string s2;
s >> setw(3) >> s2;
で s2 に "ABC" が読み込めるかもしれない。
誰か確認して候。
346デフォルトの名無しさん (ワッチョイ 4f01-hyUu)
2023/02/04(土) 21:06:47.02ID:e1OBQ9Uv0347デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/04(土) 21:10:37.97ID:KFFsFRScM >>345
[追加]
(2)
std::ofstream ostream;
ostream << setw(3) << "ABCEFG";
(3) C++ 20 以降限定になるが、
std::format() を使う。
[追加]
(2)
std::ofstream ostream;
ostream << setw(3) << "ABCEFG";
(3) C++ 20 以降限定になるが、
std::format() を使う。
348デフォルトの名無しさん (ワッチョイ 3fad-t53W)
2023/02/04(土) 21:44:35.26ID:J5X2r1Ng0 >>340
>んで、入力されてまだフラッシュされていない文字列"ABCEFG"を
>右側3文字を削除して"ABC"にするには
>どうすれば良いのでしょうか?
"ABC"しか入力(ストリームに対する出力)されないようにするのが筋じゃねえの?
何がしたいのか
>んで、入力されてまだフラッシュされていない文字列"ABCEFG"を
>右側3文字を削除して"ABC"にするには
>どうすれば良いのでしょうか?
"ABC"しか入力(ストリームに対する出力)されないようにするのが筋じゃねえの?
何がしたいのか
349デフォルトの名無しさん (アウアウエー Sabf-FmQs)
2023/02/04(土) 21:50:32.61ID:b6Tm4pTJa そういう感じの質問こそAIに聞くと的確な答が返ってきそう
350デフォルトの名無しさん (ワッチョイ 8f10-LcEw)
2023/02/04(土) 21:51:53.73ID:yysysFOo0 ストリームの出力を後からいじれたらそれはストリームじゃない
ただのバッファだ
ただのバッファだ
351デフォルトの名無しさん (ワッチョイ 3fad-4osW)
2023/02/04(土) 22:20:06.17ID:dPBsul5J0 JavaはStringBufferInputStreamとかいうのがあったけどdeprecatedされてるね
352デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/04(土) 22:39:15.87ID:KFFsFRScM353デフォルトの名無しさん (ワイーワ2 FFbf-+IHm)
2023/02/05(日) 20:22:13.30ID:KKxK2YdEF >>340
どうでもいいけどostreamはC++だぞ
どうでもいいけどostreamはC++だぞ
354デフォルトの名無しさん (ラクッペペ MM4f-lcFY)
2023/02/05(日) 22:02:55.86ID:leiLOsKWM355デフォルトの名無しさん (ワッチョイ 4f01-mMLA)
2023/02/05(日) 22:15:41.89ID:vWrwcA+50 ↑ 流石にこれはなにかの病気を疑わざるを得ないな
356デフォルトの名無しさん (ワッチョイ 0f7c-m47a)
2023/02/05(日) 23:11:05.45ID:ub5/0hy90 おかしいな、C言語の<<には左シフトの意味しかないはずだが
357デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/05(日) 23:16:38.70ID:jwd7GZbHM そもそも、C++のSTLにstd::ostreamがある。
358デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/06(月) 11:10:20.13ID:MSBukcfKM >>327
stdin から ABCDEF を入力して、stdout にABC を出力するらしい例。
なお、実際には全く確認してない。
[方法1]
// 文字列変数 a の段階で3文字に切り詰められ、ABC だけが入ってくるらしい。
string a;
cin >> setw(3) >> a;
cout << a;
[方法2]
// 文字列変数 a には、ABCDEF が入るが、出力は最初の 3 文字になるらしい。
string a;
cin >> a;
cout << setw(3) << a;
stdin から ABCDEF を入力して、stdout にABC を出力するらしい例。
なお、実際には全く確認してない。
[方法1]
// 文字列変数 a の段階で3文字に切り詰められ、ABC だけが入ってくるらしい。
string a;
cin >> setw(3) >> a;
cout << a;
[方法2]
// 文字列変数 a には、ABCDEF が入るが、出力は最初の 3 文字になるらしい。
string a;
cin >> a;
cout << setw(3) << a;
359デフォルトの名無しさん (ワッチョイ 4f5f-NCx9)
2023/02/06(月) 13:24:21.21ID:KoRl3hvD0 とりあえず変数名をostreamにするのはやめなよ
360デフォルトの名無しさん (スッププ Sd5f-340S)
2023/02/07(火) 12:29:25.49ID:UPy+Lbp7d >>340
だから自前のバッファで操作してから書き込めばいいじゃんって話
ストリー厶の意味がわかってないんじゃない
サンプル例題ならともかくもっと実用的なアプリを使うようになったら当然そうなるしそんなとこほじくってるよりもメモリ上で操作すれば簡単だって話
だから自前のバッファで操作してから書き込めばいいじゃんって話
ストリー厶の意味がわかってないんじゃない
サンプル例題ならともかくもっと実用的なアプリを使うようになったら当然そうなるしそんなとこほじくってるよりもメモリ上で操作すれば簡単だって話
361デフォルトの名無しさん (ワッチョイ 4f5f-NCx9)
2023/02/07(火) 13:30:35.63ID:3xIDowU30 ABCEFGのDが抜けてるのが気になって夜も眠れない
362デフォルトの名無しさん (ワッチョイ 3ff0-EOzK)
2023/02/07(火) 15:26:01.77ID:zqUp3ndL0 いつもの人かな?自由研究楽しそうだねー!
363デフォルトの名無しさん (ワッチョイ 0f7c-m47a)
2023/02/07(火) 19:29:46.00ID:EcDeonqz0 聞いてるのも答えてるのもいつもの天才くんだろ
お人形遊びなら他所でやってね
お人形遊びなら他所でやってね
364デフォルトの名無しさん (テテンテンテン MM4f-tu9g)
2023/02/07(火) 20:46:11.42ID:gvW0HmgtM この言語、constメンバ関数じゃなくてmutableメンバ関数だったらよかったのにと思いました。
あとnoexceptから普通に例外飛ばせるのなんとかしてください。
あとnoexceptから普通に例外飛ばせるのなんとかしてください。
365デフォルトの名無しさん (ワッチョイ 4f5f-NCx9)
2023/02/08(水) 00:16:04.31ID:XAt49H4z0 try/catchが重いのもなんとかしてほしい
366はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cf3e-F1up)
2023/02/08(水) 12:51:56.02ID:dBOwscE40 >>365
今は try はそんなに重くない。
今は try はそんなに重くない。
367デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/08(水) 14:01:54.37ID:ZMdgsCGCM >>366
tryを使う場合、その関数の冒頭で、exception handler(←名前は忘れました)の
アドレスを fs:[xxx] 見たいな場所に退避したり、新しいアドレスを入れたりする
プロローグコードが挿入されるので、例外が全く発生しない場合でも、
少し遅くなる。
tryを使う場合、その関数の冒頭で、exception handler(←名前は忘れました)の
アドレスを fs:[xxx] 見たいな場所に退避したり、新しいアドレスを入れたりする
プロローグコードが挿入されるので、例外が全く発生しない場合でも、
少し遅くなる。
368デフォルトの名無しさん (ワッチョイ 7fb2-KDf3)
2023/02/08(水) 14:04:21.50ID:9Chuoarh0 重いつーより設計の悪さが残念
C++11でC++98より「マシ」になったけど
まだまだ垢抜けてない
C++11でC++98より「マシ」になったけど
まだまだ垢抜けてない
369デフォルトの名無しさん (ワッチョイ 3ff0-EOzK)
2023/02/08(水) 14:31:26.00ID:sdVGBQKo0 そうか?
他の言語触るほど良く出来てるなと感心するけど
他の言語触るほど良く出来てるなと感心するけど
370デフォルトの名無しさん (ワッチョイ 4f5f-F1up)
2023/02/08(水) 15:04:01.92ID:xSLFVKqx0 >>367 それは昔のコンパイラの話でしょ。現行だというなら具体的なコンパイラを挙げてね。
371デフォルトの名無しさん (スプッッ Sddf-6749)
2023/02/08(水) 17:48:16.42ID:JNAb9Hi4d x86-64は速い
x86-32は遅い
x86-32は遅い
372デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/08(水) 19:21:58.71ID:ny58eQb8M373デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/08(水) 19:41:50.12ID:ny58eQb8M >>372
[補足]
その時にネットで検索したら、(確か)IBMのコンパイラだけは、
例外処理を行なう関数でも、追加プロローグが必要なくて、例外が発生しない
ときには全くオーバーヘッドが無い、ということだった。
VC++だと、例外処理を使う関数には以下の様なプロローグとエピローグが追加されると
思う。記憶に頼っているので大体こんな感じだった、という程度で、本当は
間違っているかも知れない。
push fs:[xxxx]
mov fs:[xxxx],その関数の例外ハンドラのアドレス
・・・
pop fs:[xxxx]
[補足]
その時にネットで検索したら、(確か)IBMのコンパイラだけは、
例外処理を行なう関数でも、追加プロローグが必要なくて、例外が発生しない
ときには全くオーバーヘッドが無い、ということだった。
VC++だと、例外処理を使う関数には以下の様なプロローグとエピローグが追加されると
思う。記憶に頼っているので大体こんな感じだった、という程度で、本当は
間違っているかも知れない。
push fs:[xxxx]
mov fs:[xxxx],その関数の例外ハンドラのアドレス
・・・
pop fs:[xxxx]
374デフォルトの名無しさん (オイコラミネオ MM03-IoIL)
2023/02/08(水) 19:45:44.31ID:ny58eQb8M >>367
誤: アドレスを fs:[xxx] 見たいな場所に退避したり、新しいアドレスを入れたりする
プロローグコードが挿入されるので、
正: fs:[xxx]の中身をスタックに保存した後、fs:[xxx]に新しい例外ハンドラの
アドレスを入れるプロローグコードが挿入されるので
誤: アドレスを fs:[xxx] 見たいな場所に退避したり、新しいアドレスを入れたりする
プロローグコードが挿入されるので、
正: fs:[xxx]の中身をスタックに保存した後、fs:[xxx]に新しい例外ハンドラの
アドレスを入れるプロローグコードが挿入されるので
375デフォルトの名無しさん (ワッチョイ 0f7c-m47a)
2023/02/08(水) 19:53:05.57ID://IGlelw0 3レスも使って具体的な情報ゼロの無能乙
376デフォルトの名無しさん (ワッチョイ 8f10-LcEw)
2023/02/08(水) 20:11:13.99ID:0CKFfiVb0 その程度のコードが気になるほど小さな処理を例外で囲むのはおよし
377デフォルトの名無しさん (ワッチョイ 0f02-9sAx)
2023/02/08(水) 21:14:42.08ID:TiunzV3b0 std::string_viewじゃダメ?
378デフォルトの名無しさん (ワッチョイ 3f28-G/zc)
2023/02/08(水) 23:14:10.46ID:91RYCz8E0 実験もせずに聞くのもアレですが
std::array<short, 100> x;
に対して
*(unsigned long long*)&(x[0]) = 1ULL << 63;
とかやってもアライメント的に問題は無いの?
std::array<short, 100> x;
に対して
*(unsigned long long*)&(x[0]) = 1ULL << 63;
とかやってもアライメント的に問題は無いの?
379デフォルトの名無しさん (ワッチョイ 3f28-G/zc)
2023/02/08(水) 23:43:16.66ID:91RYCz8E0 問題ありそうなのでこんな感じにしたわ;;;
const static int NECONV = (sizeof(uint64_t) - 1) / sizeof(short) + 1;
union LargeInt {
short m_small[NECONV];
uint64_t m_large;
};
static void writeLargeInt(const uint64_t x, std::array<short, NE>& arr) {
LargeInt u;
u.m_large = x;
for (int i = 0; i < NECONV; i++) {
arr[i] = u.m_small[i];
}
}
const static int NECONV = (sizeof(uint64_t) - 1) / sizeof(short) + 1;
union LargeInt {
short m_small[NECONV];
uint64_t m_large;
};
static void writeLargeInt(const uint64_t x, std::array<short, NE>& arr) {
LargeInt u;
u.m_large = x;
for (int i = 0; i < NECONV; i++) {
arr[i] = u.m_small[i];
}
}
380デフォルトの名無しさん (ワッチョイ 7ff2-zLlH)
2023/02/09(木) 00:00:46.36ID:vSPJO8mm0 エンディアンでググれ
381はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cf3e-F1up)
2023/02/09(木) 00:46:46.54ID:zt0qN6wf0 >>379
アラインというか、言語仕様上の保証という意味では最後に書き込んだ供用体メンバ意外から読むのは未定義という解釈が一般的だよ。
未定義と直接に書いてあるところもないんだけど出来ると書いてあるところもないのでこういう場合は未定義と解される。
(ただしスタンダードレイアウトで初期シーケンスが共通している箇所については OK 。)
m_large に書き込んだなら m_small として読むべきではない。
大抵の処理系では拡張として OK にしているけど細かい制約は場合によるから問題があるかないかは
処理系の都合をきちんと検証しないとわからん。
特にハードウェア寄りの仕方のない状況を除けば避けれるものなら避けたほうがよくはある。
アラインというか、言語仕様上の保証という意味では最後に書き込んだ供用体メンバ意外から読むのは未定義という解釈が一般的だよ。
未定義と直接に書いてあるところもないんだけど出来ると書いてあるところもないのでこういう場合は未定義と解される。
(ただしスタンダードレイアウトで初期シーケンスが共通している箇所については OK 。)
m_large に書き込んだなら m_small として読むべきではない。
大抵の処理系では拡張として OK にしているけど細かい制約は場合によるから問題があるかないかは
処理系の都合をきちんと検証しないとわからん。
特にハードウェア寄りの仕方のない状況を除けば避けれるものなら避けたほうがよくはある。
382デフォルトの名無しさん (ワッチョイ 3f28-G/zc)
2023/02/09(木) 08:04:31.16ID:nokdLSLo0 >エンディアンでググれ
えっ
>言語仕様上の保証という意味では最後に書き込んだ供用体メンバ意外から読むのは未定義
えっ;;;
LARGE_INTEGER共用体 (winnt.h)が使える環境でMicrosoft社製コンパイラでビルドする場合は未定義でないものとする、、、
LONGLONGとDWORDとLONG間でしか保証されないとか言われたら知らん、、、
えっ
>言語仕様上の保証という意味では最後に書き込んだ供用体メンバ意外から読むのは未定義
えっ;;;
LARGE_INTEGER共用体 (winnt.h)が使える環境でMicrosoft社製コンパイラでビルドする場合は未定義でないものとする、、、
LONGLONGとDWORDとLONG間でしか保証されないとか言われたら知らん、、、
383デフォルトの名無しさん (オッペケ Sr63-QuYT)
2023/02/09(木) 08:22:03.41ID:3hUU93Bbr >>382
未定義って言われたことに対して特定の処理系の仕様を挙げて何がしたいの?
未定義って言われたことに対して特定の処理系の仕様を挙げて何がしたいの?
384デフォルトの名無しさん (ワッチョイ 8f10-LcEw)
2023/02/09(木) 08:27:19.15ID:6bPfV7hH0385デフォルトの名無しさん (スプッッ Sddf-6749)
2023/02/09(木) 12:07:03.43ID:A8pViFCvd 未定義な環境なんかないんだから
C++の規格的に未定義とかどうでもいいじゃん
どうせ特定の環境でしか動かさないコードだろうし
C++の規格的に未定義とかどうでもいいじゃん
どうせ特定の環境でしか動かさないコードだろうし
386デフォルトの名無しさん (スッップ Sd5f-VAk/)
2023/02/09(木) 12:18:07.59ID:sPkxw56hd #ifで環境とエンディアンで切ってしまえ
387デフォルトの名無しさん (ワッチョイ 4f01-mMLA)
2023/02/09(木) 14:57:32.77ID:UhaInviD0 >>385
未定義な「環境」?
未定義な「環境」?
388デフォルトの名無しさん (ワッチョイ 4f5f-NCx9)
2023/02/09(木) 18:23:51.05ID:fimyrrlV0 特定の環境を想定してるのに、それを書かずに環境依存の質問するってほとんど釣りだよな
389デフォルトの名無しさん (ワッチョイ 7fb2-KDf3)
2023/02/09(木) 20:52:22.51ID:Fa1ce0CQ0390デフォルトの名無しさん (ワッチョイ cff0-6749)
2023/02/09(木) 21:21:46.36ID:/jyJY61Z0 おまいら読解力ゼロかよ
391デフォルトの名無しさん (ワッチョイ 7fb2-KDf3)
2023/02/09(木) 21:25:28.79ID:Fa1ce0CQ0 自分の意見主張を伝えるのは自分の責任
伝わらないのを人のせいにしたり人格攻撃したからって伝わりはしない
無駄で愚かな行為だ
伝わらないのを人のせいにしたり人格攻撃したからって伝わりはしない
無駄で愚かな行為だ
392デフォルトの名無しさん (ワッチョイ cff0-6749)
2023/02/09(木) 21:29:41.32ID:/jyJY61Z0 ばか
393デフォルトの名無しさん (ワッチョイ 8f12-KDf3)
2023/02/10(金) 12:00:14.43ID:rXRs96IF0 CHAR_BITってC++でもレガシーじゃないの?
394デフォルトの名無しさん (ワッチョイ 4f5f-F1up)
2023/02/10(金) 12:35:42.19ID:ntA0RsMN0 「レガシーである」の定義が不明。
395デフォルトの名無しさん (ワッチョイ 8f12-KDf3)
2023/02/10(金) 12:57:47.33ID:rXRs96IF0 例えばnumeric_limits<double>::infinity()を使うべきところでHUGE_VALを使うと
このジジイは・・・てなるようなこと
CHAR_BITを使うとこのジジイは・・・ってなる人は何使ってるのかって
このジジイは・・・てなるようなこと
CHAR_BITを使うとこのジジイは・・・ってなる人は何使ってるのかって
396デフォルトの名無しさん (ワッチョイ 4f5f-F1up)
2023/02/10(金) 13:11:57.08ID:ntA0RsMN0 numeric_limits<unsigned char>::digits なんだろうけど、圧倒的に記述が煩雑で
CHAR_BIT のほうが書きやすく読みやすいいから、「このジジイは・・・」と思う人が居ても
使えるところでは気にせず使えばいいかと。
CHAR_BIT のほうが書きやすく読みやすいいから、「このジジイは・・・」と思う人が居ても
使えるところでは気にせず使えばいいかと。
397はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cf3e-F1up)
2023/02/10(金) 13:27:44.87ID:ETMiF/8h0 #if で切り分けるのに使う定数はマクロで定義されていないといけないんで使いどころはある。
398デフォルトの名無しさん (ワッチョイ 8f12-KDf3)
2023/02/10(金) 14:22:36.26ID:rXRs96IF0399はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cf3e-F1up)
2023/02/10(金) 14:41:42.45ID:ETMiF/8h0 >>398
if constexpr は文を書けるところじゃないと使えないんで定義 (宣言) を切り替えるようなことができない。
この手の切り替えは割とごそっと切り替えることになると思うのでマクロは要るよ。
if constexpr は文を書けるところじゃないと使えないんで定義 (宣言) を切り替えるようなことができない。
この手の切り替えは割とごそっと切り替えることになると思うのでマクロは要るよ。
400デフォルトの名無しさん (ワッチョイ 835f-D0vN)
2023/02/12(日) 14:56:19.98ID:wUCNDItd0 template <class T , unsigned int pos , unsigned int len = 1>
struct bit_mask{
static constexpr T mask = ~( ~static_cast<T>(0) << (len) ) << pos;
// その他の処理
}
特定のビットをマスクする処理がしたくて↑のようなテンプレートクラスを作成したのだけど
warning: left operand of shift expression '(-1 << 1)' is negative [-fpermissive]
の警告が出てしまう
この警告が符号あり整数型を左シフトしてはいけないというのは分かるので、Tが必ず符号なし整数型であることを明示したいのだけどどうしたらいいだろう?
特殊化すると符号なしのバイト幅毎に処理を描かないといけなくなるし、もっと簡便なほうほうがあったりするのでしょうか?
struct bit_mask{
static constexpr T mask = ~( ~static_cast<T>(0) << (len) ) << pos;
// その他の処理
}
特定のビットをマスクする処理がしたくて↑のようなテンプレートクラスを作成したのだけど
warning: left operand of shift expression '(-1 << 1)' is negative [-fpermissive]
の警告が出てしまう
この警告が符号あり整数型を左シフトしてはいけないというのは分かるので、Tが必ず符号なし整数型であることを明示したいのだけどどうしたらいいだろう?
特殊化すると符号なしのバイト幅毎に処理を描かないといけなくなるし、もっと簡便なほうほうがあったりするのでしょうか?
402デフォルトの名無しさん (ワッチョイ 835f-t1ev)
2023/02/12(日) 16:21:40.75ID:JClhsLo90 >>400 ((static_cast<T>(1) << len) - 1) << pos じゃダメかな?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 【映画】『クレヨンしんちゃん』 中国で公開延期 対日報復、エンタメに波及 [冬月記者★]
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- サロピン💗行って来たらさWWWWWWWWWWWWWWWWWWWWWWWW
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- ウッドデッキで調子こいてたやついたじゃん
- 🦉エッホエッホ アンパンマンは猫舌って伝えなきゃ
- えんやすー
