!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part161
https://mevius.5ch.net/test/read.cgi/tech/1653135809/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part162
■ このスレッドは過去ログ倉庫に格納されています
1sage (ワッチョイ fbf0-ofdD)
2022/10/31(月) 14:29:35.57ID:J5sgTSch0173デフォルトの名無しさん (ワッチョイ 5701-kfYZ)
2022/11/19(土) 19:50:29.13ID:o7Lf802R0 はちみつもたまには役に立つな。
褒めてつかわす。
下がって良いぞ。
褒めてつかわす。
下がって良いぞ。
174デフォルトの名無しさん (アウアウウー Sa3b-5SHr)
2022/11/19(土) 23:24:23.61ID:G53M1f4ia >>172
trueは1なので同じです
trueは1なので同じです
175はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-stRS)
2022/11/20(日) 00:27:52.78ID:RgPem6BD0 >>172
オペランドがリテラルならコンパイル時に畳み込まれるので同じ。
そうではなく型による差について問うているのなら
少なくとも現代的な処理系・実行環境だとまず差は出ないよ。
うまいこと最適化されてそんな差はどうでもよくなる。
言語仕様通りの素朴な解釈だと両オペランドを bool に型変換するという工程が入るので
int の && のほうが余計に処理をすることにはなるが……。
ちなみに C と C++ では規則が違うので詳細を調べるなら混同しないように注意。
(文言は違うけど結果的な挙動はほぼ差はないんだけど。)
オペランドがリテラルならコンパイル時に畳み込まれるので同じ。
そうではなく型による差について問うているのなら
少なくとも現代的な処理系・実行環境だとまず差は出ないよ。
うまいこと最適化されてそんな差はどうでもよくなる。
言語仕様通りの素朴な解釈だと両オペランドを bool に型変換するという工程が入るので
int の && のほうが余計に処理をすることにはなるが……。
ちなみに C と C++ では規則が違うので詳細を調べるなら混同しないように注意。
(文言は違うけど結果的な挙動はほぼ差はないんだけど。)
176デフォルトの名無しさん (オイコラミネオ MM67-yS4u)
2022/11/20(日) 13:22:48.35ID:9/YCbfcZM >>172
どちらも、最適化されれば false(偽) になって同じコードになる。
どちらも、最適化されれば false(偽) になって同じコードになる。
177デフォルトの名無しさん (オイコラミネオ MM67-yS4u)
2022/11/20(日) 13:29:22.75ID:9/YCbfcZM >>176
[補足]
最適化には高レベルから低レベルまでさまざまな層で行なわれる。
高レベルで複雑な多くのマシン語が生成されても、後段の低レベルで集成されて短い
コードになる。
&& や || は、シーケンスポイントがあり A && B は A が偽ならば B を評価しないし、
A || B は、A が真なら B を評価しないので、マシン語レベルで条件 jump 命令が
生成されることが有るが、&& や || は、「高レベル」でも最適化する方法が
知られているので、このような場合、条件 jump 命令が生成されない。
また、仮に高レベルでは条件 jump 命令が生成されてしまった場合でも、
低レベルで最適化する際に、必ず真になったり必ず偽になるような条件 jump は、
無条件jumpになったり、削除されたりする。
そして、直後の命令への無条件 jump は、削除される。
二段階の無条件 jump は一段階の jump に修正される。
このような最適化を何度も何度も繰り返すので、結果的に同じことをするコードは、
同じコードになることが多い。
[補足]
最適化には高レベルから低レベルまでさまざまな層で行なわれる。
高レベルで複雑な多くのマシン語が生成されても、後段の低レベルで集成されて短い
コードになる。
&& や || は、シーケンスポイントがあり A && B は A が偽ならば B を評価しないし、
A || B は、A が真なら B を評価しないので、マシン語レベルで条件 jump 命令が
生成されることが有るが、&& や || は、「高レベル」でも最適化する方法が
知られているので、このような場合、条件 jump 命令が生成されない。
また、仮に高レベルでは条件 jump 命令が生成されてしまった場合でも、
低レベルで最適化する際に、必ず真になったり必ず偽になるような条件 jump は、
無条件jumpになったり、削除されたりする。
そして、直後の命令への無条件 jump は、削除される。
二段階の無条件 jump は一段階の jump に修正される。
このような最適化を何度も何度も繰り返すので、結果的に同じことをするコードは、
同じコードになることが多い。
178デフォルトの名無しさん (オイコラミネオ MM67-yS4u)
2022/11/20(日) 13:42:45.47ID:9/YCbfcZM >>177
誤:最適化には高レベルから低レベルまでさまざまな層で行なわれる。
正:最適化は高レベルから低レベルまでさまざまな層で行なわれる。
誤:高レベルで複雑な多くのマシン語が生成されても、後段の低レベルで集成されて短い
正:高レベルで複雑な多くのマシン語が生成されても、後段の低レベルで修正されて短い
誤:最適化には高レベルから低レベルまでさまざまな層で行なわれる。
正:最適化は高レベルから低レベルまでさまざまな層で行なわれる。
誤:高レベルで複雑な多くのマシン語が生成されても、後段の低レベルで集成されて短い
正:高レベルで複雑な多くのマシン語が生成されても、後段の低レベルで修正されて短い
179デフォルトの名無しさん (スプッッ Sd22-FDdn)
2022/11/22(火) 08:37:00.41ID:JLBL5Nrvd windowsでstd::create_symlinkを使おうとすると
特権がいるって言われるけど、何でそんな決まりになってんの?
mklinkコマンドも特権モードじゃないとシンボリックリンク作れないし
それのどこがそんなに危険な操作なのか理解に苦しむ
特権がいるって言われるけど、何でそんな決まりになってんの?
mklinkコマンドも特権モードじゃないとシンボリックリンク作れないし
それのどこがそんなに危険な操作なのか理解に苦しむ
180デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/22(火) 09:20:47.14ID:+RKYLIKe0 権限のないディレクトリにシンボリックリンクを作ろうとしてるのでは?
181デフォルトの名無しさん (スプッッ Sd22-FDdn)
2022/11/22(火) 09:57:07.23ID:ROGUGHEjd C:じゃないHDDだし俺専用PCだし
所有権でややこしいことにはなりっこない
所有権でややこしいことにはなりっこない
182デフォルトの名無しさん (アウアウウー Sa3b-5SHr)
2022/11/22(火) 10:05:16.45ID:emKQg5jla 特権の問題じゃなくて変なもん作ろうとしとる
183デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/22(火) 10:21:25.02ID:5norvibI0 ディレクトリの権限関係なくWindows のシンボリックリンクの作成自体に管理者権限が必要、理由は知らん
ディレクトリにリンク張るならジャンクション(こっちは管理者権限不要)使えってことかも
ジャンクションの作成はコマンドからならmklink /jで行けるけどコードからやるのはちょっと面倒みたい
https://stackoverflow.com/questions/29291059/issue-creating-windows-ntfs-directory-junction-in-c-c
ディレクトリにリンク張るならジャンクション(こっちは管理者権限不要)使えってことかも
ジャンクションの作成はコマンドからならmklink /jで行けるけどコードからやるのはちょっと面倒みたい
https://stackoverflow.com/questions/29291059/issue-creating-windows-ntfs-directory-junction-in-c-c
184デフォルトの名無しさん (スッップ Sd02-TJ0J)
2022/11/22(火) 16:05:23.29ID:glPNIX2fd 一般人に使わせるとショートカットと混同して危険だからそうしてるってどっかで見た
何が危険なのかは分からなかった
何が危険なのかは分からなかった
185デフォルトの名無しさん (ワッチョイ 06cf-zHbW)
2022/11/22(火) 16:27:39.36ID:tXIkHCtk0 >ユーザー権利を持つユーザーは、誤って、または悪意を持ってシステムをシンボリック リンク攻撃に公開する可能性があります。
>シンボリック リンク攻撃は、ファイルのアクセス許可の変更、データの破損、データの破棄、または DoS 攻撃として使用できます。
というのが、Microsoft の公式見解
>シンボリック リンク攻撃は、ファイルのアクセス許可の変更、データの破損、データの破棄、または DoS 攻撃として使用できます。
というのが、Microsoft の公式見解
186デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/22(火) 16:40:48.52ID:+RKYLIKe0187デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/22(火) 16:44:11.97ID:5norvibI0188デフォルトの名無しさん (ワッチョイ 06cf-zHbW)
2022/11/22(火) 16:48:44.26ID:tXIkHCtk0 シンボリック リンクの作成 (Windows 10) - Windows security | Microsoft Learn
https://learn.microsoft.com/ja-jp/windows/security/threat-protection/security-policy-settings/create-symbolic-links
https://learn.microsoft.com/ja-jp/windows/security/threat-protection/security-policy-settings/create-symbolic-links
189デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/22(火) 17:02:07.48ID:5norvibI0 >>188
リンク先には攻撃方法は書いてないな
シンボリックリンク攻撃 でググるとこれが出てきた
特にWindows特有というわけじゃなさそう、て言うかWindowsは/tmpみたいな誰もが共通的に使うディレクトリはないからより攻撃は難しそうだが
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c802.html
リンク先には攻撃方法は書いてないな
シンボリックリンク攻撃 でググるとこれが出てきた
特にWindows特有というわけじゃなさそう、て言うかWindowsは/tmpみたいな誰もが共通的に使うディレクトリはないからより攻撃は難しそうだが
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c802.html
190デフォルトの名無しさん (ワッチョイ cf5f-HmgA)
2022/11/22(火) 19:09:40.02ID:zDRYE0v60 他の人の書いたコードを読み解いています。
下の例では、キーが押されたら何かを切り替えてるのはわかるのですが、ここで使われている
・0xFの意味
・(1 << 0)などの右シフト?
がどういう使われ方をしてるのかが分からないので知りたいです。
16進数で掛け算して値を使っているのでしょうか?
単純な1,2,3,4などの数値で切り替えていないのも意図がよく分からないのでずが深い意味はありそうでしょうか?
// VIEW_MESH | VIEW_IMAGE | VIEW_PLOT | VIEW_LM
int _viewMode = 0xF;
enum
{
VIEW_MESH = (1 << 0),
VIEW_IMAGE = (1 << 1),
VIEW_PLOT = (1 << 2),
VIEW_LM = (1 << 3)
};
switch (key)
{
case 'i': _viewMode ^= VIEW_IMAGE; break;
case 'l': _viewMode ^= VIEW_LM; break;
case 'm': _viewMode ^= VIEW_MESH; break;
}
下の例では、キーが押されたら何かを切り替えてるのはわかるのですが、ここで使われている
・0xFの意味
・(1 << 0)などの右シフト?
がどういう使われ方をしてるのかが分からないので知りたいです。
16進数で掛け算して値を使っているのでしょうか?
単純な1,2,3,4などの数値で切り替えていないのも意図がよく分からないのでずが深い意味はありそうでしょうか?
// VIEW_MESH | VIEW_IMAGE | VIEW_PLOT | VIEW_LM
int _viewMode = 0xF;
enum
{
VIEW_MESH = (1 << 0),
VIEW_IMAGE = (1 << 1),
VIEW_PLOT = (1 << 2),
VIEW_LM = (1 << 3)
};
switch (key)
{
case 'i': _viewMode ^= VIEW_IMAGE; break;
case 'l': _viewMode ^= VIEW_LM; break;
case 'm': _viewMode ^= VIEW_MESH; break;
}
191デフォルトの名無しさん (ワッチョイ e2ad-szhu)
2022/11/22(火) 19:21:19.72ID:3Sn7h5kH0 >>190
>・0xFの意味
16進数、10進数の15、2進数の1111
> ・(1 << 0)などの右シフト?
左シフト、1 << 0に関して言えば0ビットシフトなのでつまりシフトしない、二進数で0001、10進数で1
(1 << 1)は1ビット左にシフトなので二進数で0010、10進数で2
(1 << 2)は2ビット左にシフトなので二進数で0100、10進数で4
(1 << 3)は3ビット左にシフトなので二進数で1000、10進数で8
>・0xFの意味
16進数、10進数の15、2進数の1111
> ・(1 << 0)などの右シフト?
左シフト、1 << 0に関して言えば0ビットシフトなのでつまりシフトしない、二進数で0001、10進数で1
(1 << 1)は1ビット左にシフトなので二進数で0010、10進数で2
(1 << 2)は2ビット左にシフトなので二進数で0100、10進数で4
(1 << 3)は3ビット左にシフトなので二進数で1000、10進数で8
192デフォルトの名無しさん (ワッチョイ e2ad-szhu)
2022/11/22(火) 19:40:28.84ID:3Sn7h5kH0 >>190
^= は複合代入演算子
_viewMode ^= VIEW_IMAGE は _viewMode = _viewMode ^ VIEW_IMAGE と同じ
^ は排他的論理和(ビットXOR)、二進数で 1001 ^ 1100 は 0110 になる、要はビットが同じなら偽、異なっていれば真という演算
>case 'i': _viewMode ^= VIEW_IMAGE; break;
_viewModeには1111が代入されている、VIEW_IMAGEは0010
1111 ^ 0010 は 1101 になる
その演算結果1101を_viewModeに代入する
一連のコードはビットをフラグとして扱っていて、初期値として全フラグを立たせ、keyに対して特定のフラグをへし折っている
^= は複合代入演算子
_viewMode ^= VIEW_IMAGE は _viewMode = _viewMode ^ VIEW_IMAGE と同じ
^ は排他的論理和(ビットXOR)、二進数で 1001 ^ 1100 は 0110 になる、要はビットが同じなら偽、異なっていれば真という演算
>case 'i': _viewMode ^= VIEW_IMAGE; break;
_viewModeには1111が代入されている、VIEW_IMAGEは0010
1111 ^ 0010 は 1101 になる
その演算結果1101を_viewModeに代入する
一連のコードはビットをフラグとして扱っていて、初期値として全フラグを立たせ、keyに対して特定のフラグをへし折っている
193デフォルトの名無しさん (ワッチョイ cf5f-HmgA)
2022/11/22(火) 20:24:07.39ID:zDRYE0v60194デフォルトの名無しさん (ワッチョイ 227c-stRS)
2022/11/22(火) 22:10:58.50ID:TSfOUCtJ0 論理演算とか知らない奴がプログラムやっているんだな・・・
195デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/22(火) 22:14:00.95ID:+RKYLIKe0 始めたばっかりなんでしょ
ビットをフラグとして使うとか最初は面食らったな
ビットをフラグとして使うとか最初は面食らったな
196デフォルトの名無しさん (ササクッテロリ Spdf-k7YZ)
2022/11/22(火) 22:48:40.37ID:s23xOfAqp ファミコンでもあるまいし、いまどき1ビットに意味をもたせなんて、通信制御くらいしか思い付かないなぁ
197デフォルトの名無しさん (ワッチョイ 06cf-zHbW)
2022/11/22(火) 23:01:34.34ID:tXIkHCtk0 マシン語のレベルで、演算結果を示す幾つかの1ビットデータがあって
それらにキャリーフラグ、ゼロフラグなどの名前が付いてたのが呼び方の元
それらにキャリーフラグ、ゼロフラグなどの名前が付いてたのが呼び方の元
198デフォルトの名無しさん (ササクッテロリ Spdf-k7YZ)
2022/11/22(火) 23:04:06.68ID:s23xOfAqp 恋愛ゲームのフラグと同意語だよな
199デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/22(火) 23:10:53.75ID:+RKYLIKe0 flagでしょ
大元は手旗信号
大元は手旗信号
200デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/22(火) 23:22:36.31ID:5norvibI0201デフォルトの名無しさん (ササクッテロリ Spdf-k7YZ)
2022/11/22(火) 23:49:48.37ID:s23xOfAqp >>200
そうか?普通#defineされてる名前を使うからあんま意識しないよ?
そうか?普通#defineされてる名前を使うからあんま意識しないよ?
202デフォルトの名無しさん (ワッチョイ 06cf-zHbW)
2022/11/22(火) 23:59:07.88ID:tXIkHCtk0 後方互換性や制御系の都合かもね
203デフォルトの名無しさん (ガックシ 068e-mZSb)
2022/11/23(水) 00:01:47.87ID:6zcmIvp36 >>201
defineされてようが複数のフラグをand/or で繋いだりするのは桁で管理してるからじゃん
defineされてようが複数のフラグをand/or で繋いだりするのは桁で管理してるからじゃん
204デフォルトの名無しさん (アウアウウー Sa3b-5SHr)
2022/11/23(水) 00:20:21.73ID:E00oDXjza chmodとかどうやってんの
205デフォルトの名無しさん (ワッチョイ 06cf-zHbW)
2022/11/23(水) 00:43:41.07ID:cGYFLLo00 さっきのビット演算、XOR 使うってことは
key によって特定のビットをトグルで ON/OFFする処理
の一部を抜粋した様に見える
key によって特定のビットをトグルで ON/OFFする処理
の一部を抜粋した様に見える
206デフォルトの名無しさん (ワッチョイ 77f0-yHLe)
2022/11/23(水) 05:44:17.85ID:agXFLOTv0 >>196
ご冗談を
ご冗談を
207デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/23(水) 08:43:03.58ID:g5bfG+kA0 >>201
複数フラグを同時に使う時は FlagA | FlagB とかやるんだが意識してないお前はどうやってるんだ?w
複数フラグを同時に使う時は FlagA | FlagB とかやるんだが意識してないお前はどうやってるんだ?w
208デフォルトの名無しさん (ワッチョイ e2ad-szhu)
2022/11/23(水) 09:08:55.00ID:a3Z+vFOW0209はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-stRS)
2022/11/23(水) 10:34:19.99ID:TBut/iDU0 現代的な C++ なら std::byte とか std::bitset を使って欲しいところではある。
210デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/23(水) 12:32:20.17ID:A/L1k8HF0 std::byte なんてあるんだ
211デフォルトの名無しさん (アウアウウー Sa3b-kfYZ)
2022/11/23(水) 12:34:44.63ID:DxhXFxCJa istringstreamとかifstreamとかistreamとか
入力系からreadした場合実際に読めたバイト数は
.gcount()で取得出来ますが
ostringstreamとかofstreamとかostreamとか
出力系にwriteした場合実際に描き込めたバイト数はどうすれば取得出来ますか?
.pcount()とかは無いようです
入力系からreadした場合実際に読めたバイト数は
.gcount()で取得出来ますが
ostringstreamとかofstreamとかostreamとか
出力系にwriteした場合実際に描き込めたバイト数はどうすれば取得出来ますか?
.pcount()とかは無いようです
212デフォルトの名無しさん (ワッチョイ fb7c-IsEx)
2022/11/23(水) 12:40:51.08ID:fdWr7Y/z0 writeに文字数与えてるだろ?成功したらその数だよ
失敗したら未定義
失敗したら未定義
213デフォルトの名無しさん (アウアウウー Sa3b-kfYZ)
2022/11/23(水) 12:46:45.47ID:DxhXFxCJa Nを指定して成功していたら必ずNは判りますが
未定義: 失敗したとき0かどうかは判らない
定義済(0): 0からNの間の値になる可能性は無い
の未定義にあたるということですかね
途中までならその途中までの数字が知りたいと思うのは不自然?
ありがとうございます
未定義: 失敗したとき0かどうかは判らない
定義済(0): 0からNの間の値になる可能性は無い
の未定義にあたるということですかね
途中までならその途中までの数字が知りたいと思うのは不自然?
ありがとうございます
214デフォルトの名無しさん (ワッチョイ 0646-7h5B)
2022/11/23(水) 13:01:17.94ID:KaofbnpA0 write(2)じゃなくてfputs(3)に相当するから
書き込んだバイト数なんて概念はないのでは
書き込んだバイト数なんて概念はないのでは
215デフォルトの名無しさん (ワッチョイ fb7c-IsEx)
2022/11/23(水) 13:59:19.61ID:fdWr7Y/z0 書き込みエラーなんてプログラムからは何が起きてるかわかんないんだよ
最悪壊れかけのディスクにちょうどトドメ刺して何もかも吹っ飛んだのかもしれない
エラーが起きた時点でプログラム側で保証できることなんてほとんどないし、たまたま途中の何文字まで書けたかなんて大抵は無意味な情報
逆に読み込みで何文字読んだって情報は、プログラム側で管理してるメモリの話だからプログラムからも分かるし必要でもある
最悪壊れかけのディスクにちょうどトドメ刺して何もかも吹っ飛んだのかもしれない
エラーが起きた時点でプログラム側で保証できることなんてほとんどないし、たまたま途中の何文字まで書けたかなんて大抵は無意味な情報
逆に読み込みで何文字読んだって情報は、プログラム側で管理してるメモリの話だからプログラムからも分かるし必要でもある
216デフォルトの名無しさん (オッペケ Srdf-KP+k)
2022/11/23(水) 14:04:25.04ID:8VVNMMLlr テキストアライメント関係の 始端よせ/中央/終端よせ の類で
0~3の 2 bit値を ビットパターンマスクの途中に織り込んでくるのはどっきりする
0~3の 2 bit値を ビットパターンマスクの途中に織り込んでくるのはどっきりする
217デフォルトの名無しさん (ワッチョイ 4228-17Q5)
2022/11/23(水) 23:37:54.49ID:t8T/jR0m0 質問なのですがenum class初心者なのですが
enum classはint以外の整数型としても定義できるそうなので
整数型への自動変換ぐらいしてくれるのかと思いきや、
enum Foo { A, B, C, D, N };
int arr[Foo::N];
arr[Foo::A] = 1;
arr[Foo::B] = 999;
みたいに配列の添え字に使うケースで
error C2677: 二項演算子 '[': 型 'Foo' を扱うグローバルな演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
というコンパイルエラーになります……orz
Visual Studio 2019なのですがおれ環?
enum classはint以外の整数型としても定義できるそうなので
整数型への自動変換ぐらいしてくれるのかと思いきや、
enum Foo { A, B, C, D, N };
int arr[Foo::N];
arr[Foo::A] = 1;
arr[Foo::B] = 999;
みたいに配列の添え字に使うケースで
error C2677: 二項演算子 '[': 型 'Foo' を扱うグローバルな演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。
というコンパイルエラーになります……orz
Visual Studio 2019なのですがおれ環?
218デフォルトの名無しさん (スフッ Sd02-TJd5)
2022/11/23(水) 23:45:44.60ID:MlF8tgQAd enum class Fooって書いてみやがれ
219デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/23(水) 23:54:39.59ID:g5bfG+kA0220デフォルトの名無しさん (ワッチョイ 4228-17Q5)
2022/11/24(木) 00:25:30.42ID:WosJnlmu0 レス㌧クス
なるほどキャスト必須ですか、、、
Fooへの整数の代入だけエラーになるのかと思ったら
思ってたのと違う……
なるほどキャスト必須ですか、、、
Fooへの整数の代入だけエラーになるのかと思ったら
思ってたのと違う……
221デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/24(木) 01:18:48.76ID:4/0XLjMc0 スコープを限定したいときは以下のように俺は書いてるな
namespace Foo
{
enum { A, B, C, D, N };
}
int main ()
{
struct Bar
{
enum { A, B, C, D, N };
};
int arr0[Foo::N];
arr0[Foo::A] = 1;
int arr1[Bar::N];
arr1[Bar::A] = 1;
return 0;
}
namespace Foo
{
enum { A, B, C, D, N };
}
int main ()
{
struct Bar
{
enum { A, B, C, D, N };
};
int arr0[Foo::N];
arr0[Foo::A] = 1;
int arr1[Bar::N];
arr1[Bar::A] = 1;
return 0;
}
222デフォルトの名無しさん (ワッチョイ 5f01-KP+k)
2022/11/24(木) 01:41:40.71ID:4/0XLjMc0 >>221 は忘れてくれ
寝ぼけてた
寝ぼけてた
223はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-stRS)
2022/11/24(木) 02:01:14.76ID:7DmT43os0 >>217
enum class といいつつ enum で宣言しているところをみるに、
ひょっとして enum と enum class が別物であることを知らずに混乱しているのでは?
ちなみに enum class も class というキーワードを使いはするが分類上はクラスではないのも混乱するかもな。
> enum classはint以外の整数型としても
たぶん underlying type のことを言っているんだと思うが
指定しなかったときの underlying type は int ではなく
その列挙体における全ての列挙子を格納可能な処理系定義のなんらかの整数としか決まってない。
(格納可能である限りは int より大きくなることはないという制約はついているけど。)
enum class といいつつ enum で宣言しているところをみるに、
ひょっとして enum と enum class が別物であることを知らずに混乱しているのでは?
ちなみに enum class も class というキーワードを使いはするが分類上はクラスではないのも混乱するかもな。
> enum classはint以外の整数型としても
たぶん underlying type のことを言っているんだと思うが
指定しなかったときの underlying type は int ではなく
その列挙体における全ての列挙子を格納可能な処理系定義のなんらかの整数としか決まってない。
(格納可能である限りは int より大きくなることはないという制約はついているけど。)
224デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/24(木) 06:18:15.26ID:0c/PVttN0 >>223
> 指定しなかったときの underlying type は int ではなく
> その列挙体における全ての列挙子を格納可能な処理系定義のなんらかの整数としか決まってない。
> (格納可能である限りは int より大きくなることはないという制約はついているけど。)
それunscoped enumeration typeの方
enum class は無指定だと int になる
https://cpprefjp.github.io/lang/cpp11/scoped_enum.html
> 指定しなかったときの underlying type は int ではなく
> その列挙体における全ての列挙子を格納可能な処理系定義のなんらかの整数としか決まってない。
> (格納可能である限りは int より大きくなることはないという制約はついているけど。)
それunscoped enumeration typeの方
enum class は無指定だと int になる
https://cpprefjp.github.io/lang/cpp11/scoped_enum.html
225デフォルトの名無しさん (ワッチョイ 4228-17Q5)
2022/11/24(木) 08:03:44.62ID:WosJnlmu0226デフォルトの名無しさん (アウアウウー Sa3b-eHBA)
2022/11/24(木) 08:35:12.79ID:0WkgaUasa >>225
おれ環ではなくて仕様
おれ環ではなくて仕様
227デフォルトの名無しさん (ワッチョイ 3bda-D5jK)
2022/11/24(木) 08:57:54.29ID:rMCXw8Tu0 C++の言語仕様を決めてる人たちの考えとしては
配列とハッシュはまったく異なる概念なので分けて使うようにってことですか?
配列とハッシュはまったく異なる概念なので分けて使うようにってことですか?
228デフォルトの名無しさん (スプッッ Sd22-FDdn)
2022/11/24(木) 09:08:45.63ID:AuoRjAvpd 逆に聞きたいが
配列とハッシュが同じカテゴリに入ることなんてあるのか?
配列とハッシュが同じカテゴリに入ることなんてあるのか?
229デフォルトの名無しさん (スフッ Sd02-XhSM)
2022/11/24(木) 09:20:49.08ID:qRYWlPaYd enumはいらないこ
230はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-stRS)
2022/11/24(木) 11:00:48.22ID:7DmT43os0 歴史的経緯というやつだなぁ。
C では列挙子の型が int なんだよ。 列挙型は定義ごとに独立した型になるのに列挙子は整数そのものとして扱われる。
C++ では列挙子の型は列挙型に変更しつつも型変換がゆるゆるだから結果的に C とほぼ同じ挙動になって互換性が維持された。
あまりよくはないが C との連携は C++ の強みだから仕方がない。
でもさすがに扱いにくいから新しく enum class が作られたという経緯なので最初から使い分けを意図して二種類作られたわけではない。
enum の改良として enum class が出来たので一貫性がなく全く別物として成立している。
C では列挙子の型が int なんだよ。 列挙型は定義ごとに独立した型になるのに列挙子は整数そのものとして扱われる。
C++ では列挙子の型は列挙型に変更しつつも型変換がゆるゆるだから結果的に C とほぼ同じ挙動になって互換性が維持された。
あまりよくはないが C との連携は C++ の強みだから仕方がない。
でもさすがに扱いにくいから新しく enum class が作られたという経緯なので最初から使い分けを意図して二種類作られたわけではない。
enum の改良として enum class が出来たので一貫性がなく全く別物として成立している。
231デフォルトの名無しさん (ワッチョイ 3bda-D5jK)
2022/11/24(木) 12:09:29.22ID:rMCXw8Tu0232デフォルトの名無しさん (テテンテンテン MM8e-IwB9)
2022/11/24(木) 12:23:01.01ID:hRuvaNsTM233デフォルトの名無しさん (アウアウウー Sa3b-5SHr)
2022/11/24(木) 12:57:58.38ID:ggwtZAtna dictがいいね
234デフォルトの名無しさん (JP 0H13-W1GA)
2022/11/24(木) 14:33:18.54ID:CXfVk4LxH ハッシュを使ってマップ(対応付)ってことよね
235デフォルトの名無しさん (オイコラミネオ MM67-yS4u)
2022/11/24(木) 15:31:29.44ID:a85Uy2KJM 簡単そうに見えたけど、俺の中でなかなか理解できないのが explicit 指定。
明示的初期化、直接初期化、代入初期化(?)、暗黙の型変換の禁止、
などなど色々な概念があるし、頭の中で整理できてない。
「直接初期化」の定義が今一分かって無い。
明示的初期化、直接初期化、代入初期化(?)、暗黙の型変換の禁止、
などなど色々な概念があるし、頭の中で整理できてない。
「直接初期化」の定義が今一分かって無い。
236はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-stRS)
2022/11/25(金) 09:44:10.24ID:9Oo+WeOy0 >>235
もちろん色々な概念と相互に関係はあるんだが explicit 指定に直接的に関連するルールは
・ 引数一個で呼び出せるコンストラクタ (デフォルト引数や可変長引数の場合も含む) は変換コンストラクタ (converting constructor) としても機能する
・ ただし explicit 指定がついている場合はそうならない
ってだけだな。
変換コンストラクタがいつ起動するのかはまた別の話として……。
もちろん色々な概念と相互に関係はあるんだが explicit 指定に直接的に関連するルールは
・ 引数一個で呼び出せるコンストラクタ (デフォルト引数や可変長引数の場合も含む) は変換コンストラクタ (converting constructor) としても機能する
・ ただし explicit 指定がついている場合はそうならない
ってだけだな。
変換コンストラクタがいつ起動するのかはまた別の話として……。
237デフォルトの名無しさん (スプッッ Sd22-TJ0J)
2022/11/25(金) 11:20:20.74ID:rtODN+wBd C++03まではそうだったけど
11から複数引数にも波括弧からの変換を認めない機能が追加されてややこしくなってる
struct Hoge{
/*explicit*/ Hoge(int,double,char*);
…
};
Hoge foo(){
return {42,3.14,”Hello”); // explicitだとダメ
}
Hoge h[] = { {1,1.0,””}, {2,2.0,””}}; //explicitだとダメ
11から複数引数にも波括弧からの変換を認めない機能が追加されてややこしくなってる
struct Hoge{
/*explicit*/ Hoge(int,double,char*);
…
};
Hoge foo(){
return {42,3.14,”Hello”); // explicitだとダメ
}
Hoge h[] = { {1,1.0,””}, {2,2.0,””}}; //explicitだとダメ
238デフォルトの名無しさん (アウアウウー Sa3b-kfYZ)
2022/11/25(金) 12:30:00.19ID:PV2ZG9bua ハッシュを使って実現した連想配列をハッシュって呼ぶのは
携帯電話をケータイと呼ぶような類のこと
携帯電話をケータイと呼ぶような類のこと
239デフォルトの名無しさん (テテンテンテン MM8e-IwB9)
2022/11/25(金) 12:43:43.65ID:hG6NI52YM >>238
誤用の無い範囲で用語を混同するのは理工学じゃ普通。
誤用の無い範囲で用語を混同するのは理工学じゃ普通。
240デフォルトの名無しさん (アウアウウー Sa3b-kfYZ)
2022/11/25(金) 12:47:02.94ID:PV2ZG9bua >>237
こういうこと?
#include <iostream>
using namespace std;
struct Hoge{
int a;
double b;
char *c;
explicit Hoge(int _a, double _b, char *_c) : a(_a), b(_b), c(_c) {}
};
Hoge foo(){
return Hoge{42, 3.14, "Hello"};
}
Hoge h[] = {Hoge{1, 1.0, ""}, Hoge{2, 2.0, ""}};
int main() {
return 0;
}
こういうこと?
#include <iostream>
using namespace std;
struct Hoge{
int a;
double b;
char *c;
explicit Hoge(int _a, double _b, char *_c) : a(_a), b(_b), c(_c) {}
};
Hoge foo(){
return Hoge{42, 3.14, "Hello"};
}
Hoge h[] = {Hoge{1, 1.0, ""}, Hoge{2, 2.0, ""}};
int main() {
return 0;
}
241デフォルトの名無しさん (アウアウウー Sa3b-kfYZ)
2022/11/25(金) 12:48:02.39ID:PV2ZG9bua242はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b63e-stRS)
2022/11/25(金) 12:50:26.80ID:9Oo+WeOy0 そのへんの仕様を何度も読んだことは記憶にあるのに内容はなんも覚えとらん。
実際わかりにくいと思うわ。
実際わかりにくいと思うわ。
243デフォルトの名無しさん (オイコラミネオ MM67-yS4u)
2022/11/25(金) 14:21:14.78ID:TzWxad5dM 今まで本を読んでも、「直接初期化」「コピー初期化」
の厳密定義が分からなかったけど、英語版の en.cppreference.com
をそれぞれ
「direct initialization」「copy initialization」
で検索すると「全てのパターン(?)」の一覧が出てくるみたいだ。
の厳密定義が分からなかったけど、英語版の en.cppreference.com
をそれぞれ
「direct initialization」「copy initialization」
で検索すると「全てのパターン(?)」の一覧が出てくるみたいだ。
244デフォルトの名無しさん (スプッッ Sd22-TJ0J)
2022/11/25(金) 14:30:36.00ID:rtODN+wBd245デフォルトの名無しさん (スプッッ Sd22-TJ0J)
2022/11/25(金) 14:32:53.51ID:rtODN+wBd あ、第3引数const char*じゃないとダメだったすまん
246デフォルトの名無しさん (スプッッ Sd22-FDdn)
2022/11/25(金) 18:47:26.18ID:H2Sh2jTOd247デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/25(金) 20:26:20.13ID:HZEumDr50 >>246
しつこい、Perl では連想配列をハッシュと言ってるんだからいちいち数学的とが絡んでくるなよ
https://perldoc.jp/docs/perl/5.36.0/perldata.pod
しつこい、Perl では連想配列をハッシュと言ってるんだからいちいち数学的とが絡んでくるなよ
https://perldoc.jp/docs/perl/5.36.0/perldata.pod
248デフォルトの名無しさん (ササクッテロリ Spdf-k7YZ)
2022/11/25(金) 20:32:13.35ID:kbwNStuYp C++スレなんだがw
249デフォルトの名無しさん (ワッチョイ 06cf-zHbW)
2022/11/25(金) 20:51:44.30ID:v7fq4Pg10 不条理スレだろ
250デフォルトの名無しさん (アウアウウー Sa3b-5SHr)
2022/11/25(金) 20:59:11.33ID:/ARUt2jFa 一方的と連想が関係ないとかちょっと
251デフォルトの名無しさん (ワッチョイ cf5f-pHhH)
2022/11/25(金) 21:16:26.19ID:3wykxWfs0 ハッシュテーブルとかも知らなさそう
252デフォルトの名無しさん (ワッチョイ a7c2-TaOI)
2022/11/25(金) 22:15:24.17ID:mXzsiLHg0253デフォルトの名無しさん (ワッチョイ 4228-17Q5)
2022/11/25(金) 22:37:42.42ID:RzATrhyN0 explicit……
ある型を別の型にするコンストラクタを定義したのだけど
暗黙の型変換は辞めて欲しいときに使う(使った
ある型を別の型にするコンストラクタを定義したのだけど
暗黙の型変換は辞めて欲しいときに使う(使った
254デフォルトの名無しさん (ワッチョイ a7c2-TaOI)
2022/11/25(金) 22:41:33.27ID:mXzsiLHg0 C++スレでPerlマウント取りに来たの?
ダサすぎwww 本国で相手されないからってするに事欠いて、ちったあ恥を知れよ
ダサすぎwww 本国で相手されないからってするに事欠いて、ちったあ恥を知れよ
255デフォルトの名無しさん (ワッチョイ e201-IwB9)
2022/11/25(金) 22:44:15.86ID:HZEumDr50256デフォルトの名無しさん (ワッチョイ 77f0-yHLe)
2022/11/25(金) 23:04:39.42ID:UZlFL5FW0 ここはC++のスレです
257デフォルトの名無しさん (ワッチョイ 4228-17Q5)
2022/11/25(金) 23:06:31.95ID:RzATrhyN0 > >>231
> ハッシュは数学的な関数で
> 辞書とは根本的に違うぞ
之大いに我が意を得たり
ハッシュ関数使わなくても連装配列実装できるもん遅いけど
ていうかハッシュが衝突したらそこから先は線形探索か何か(通常の実装では
なので連装配列をハッシュと呼ぶ風潮は嘆かわしいPerlerの端くれだけど
> ハッシュは数学的な関数で
> 辞書とは根本的に違うぞ
之大いに我が意を得たり
ハッシュ関数使わなくても連装配列実装できるもん遅いけど
ていうかハッシュが衝突したらそこから先は線形探索か何か(通常の実装では
なので連装配列をハッシュと呼ぶ風潮は嘆かわしいPerlerの端くれだけど
258デフォルトの名無しさん (US 0H12-UafS)
2022/11/25(金) 23:19:03.90ID:AKMJjhwVH259デフォルトの名無しさん (ワッチョイ a7c2-TaOI)
2022/11/25(金) 23:59:25.23ID:mXzsiLHg0260デフォルトの名無しさん (ワッチョイ 9f01-YdBL)
2022/11/26(土) 04:52:09.51ID:rUW0f5oN0 医学用語?
ネットスラングやぞw
----
ネットスラングなので明確な定義はなく、用法は人によるところだが、おおむね下記のような人間を指すことが多い。
■コミュニケーションが苦手(コミュ障):話や文章の理解力が乏しい、円滑な意思疎通が困難、空気が読めない、相手の感情を察知できない。
■拘りが強い:些細な間違いを指摘し揚げ足を取る、自分の作ったものに手を加えられるのを嫌う(ここやwikiで言う自治厨)、理想とするパターンをもっておりそれを邪魔されるとヒステリックになる。
■短気:上記のような過ちを指摘されると反射的に逆上する。
■独善的:ロジカルシンキングが出来ず自分が悪いという思考に思い至らない。
https://dic.pixiv.net/a/%E3%82%A2%E3%82%B9%E3%83%9A
ネットスラングやぞw
----
ネットスラングなので明確な定義はなく、用法は人によるところだが、おおむね下記のような人間を指すことが多い。
■コミュニケーションが苦手(コミュ障):話や文章の理解力が乏しい、円滑な意思疎通が困難、空気が読めない、相手の感情を察知できない。
■拘りが強い:些細な間違いを指摘し揚げ足を取る、自分の作ったものに手を加えられるのを嫌う(ここやwikiで言う自治厨)、理想とするパターンをもっておりそれを邪魔されるとヒステリックになる。
■短気:上記のような過ちを指摘されると反射的に逆上する。
■独善的:ロジカルシンキングが出来ず自分が悪いという思考に思い至らない。
https://dic.pixiv.net/a/%E3%82%A2%E3%82%B9%E3%83%9A
261デフォルトの名無しさん (ワッチョイ 9701-zuBb)
2022/11/26(土) 07:25:12.45ID:iOeKRej80 医師免許持ってないやつが診察するなよ。
262デフォルトの名無しさん (ワッチョイ 17c2-RPwI)
2022/11/26(土) 07:29:45.15ID:JBLsurgz0 Perl厨はカナー症候群かw
263デフォルトの名無しさん (ワッチョイ 9f01-YdBL)
2022/11/26(土) 08:13:50.52ID:rUW0f5oN0264デフォルトの名無しさん (ワッチョイ 17c2-RPwI)
2022/11/26(土) 08:45:08.96ID:JBLsurgz0 へー、カナーと言われて傷ついてんのかw
265デフォルトの名無しさん (ワッチョイ 17c2-RPwI)
2022/11/26(土) 08:47:44.37ID:JBLsurgz0 ハッシュとはそもそも何かがわかってなくて頓珍漢なこと言って恥かいたやつは
こういう低レベルな煽り合いになると喜んでついて来やがる
こういう低レベルな煽り合いになると喜んでついて来やがる
266デフォルトの名無しさん (ワッチョイ f77c-PVVO)
2022/11/26(土) 09:09:52.76ID:Q1Vkq5Eh0 そもそもC++ではそのデータ構造のことunordered_mapって呼ぶんですよ
スレ違いやめてください
スレ違いやめてください
267デフォルトの名無しさん (アウアウウー Sa5b-YdBL)
2022/11/26(土) 09:32:30.94ID:ClD6WYXHa >>265
自己紹介は要らんよ
自己紹介は要らんよ
268デフォルトの名無しさん (アウアウウー Sa5b-zuBb)
2022/11/26(土) 10:07:14.70ID:B3T+QFuSa 最近の人はハッシュと言えば#しか思い浮かばんだろうから
perlの連想配列とか#hoge{'fuga'}とか描いてバグ理想
perlの連想配列とか#hoge{'fuga'}とか描いてバグ理想
269デフォルトの名無しさん (スッップ Sdbf-R/SA)
2022/11/26(土) 10:07:55.88ID:c2ia0w6pd 昼飯はハヤシにすっかな
270デフォルトの名無しさん (アウアウエー Sadf-/SwU)
2022/11/26(土) 10:19:15.89ID:qL7kB8pFa perl界隈で連想配列のことハッシュとか言ってる人知らないな
何十年も前からみんな連想配列連想配列言ってたでしょ
最近はハッシュって呼ぶ人もいるのかな?
むしろRubyの方なら昔から組み込みライブラリに
その名も Hash っていうそのまんまのクラスがあるから分かるけど
何十年も前からみんな連想配列連想配列言ってたでしょ
最近はハッシュって呼ぶ人もいるのかな?
むしろRubyの方なら昔から組み込みライブラリに
その名も Hash っていうそのまんまのクラスがあるから分かるけど
271デフォルトの名無しさん (ワッチョイ ffcf-RPwI)
2022/11/26(土) 10:36:56.47ID:39+gXbIT0 いちいち連想配列って言ってる人を逆に見かけたことないが。perl用語ではhashなんだし。
272デフォルトの名無しさん (ワッチョイ 9f01-YdBL)
2022/11/26(土) 10:41:58.99ID:rUW0f5oN0 >>270
まだやるの?
公式がハッシュって言ってるのになに言ってるんだよ
Perl has three built-in data types: scalars, arrays of scalars, and associative arrays of scalars, known as "hashes".
https://perldoc.perl.org/perldata#NAME
まだやるの?
公式がハッシュって言ってるのになに言ってるんだよ
Perl has three built-in data types: scalars, arrays of scalars, and associative arrays of scalars, known as "hashes".
https://perldoc.perl.org/perldata#NAME
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本の立場説明へ…外務省局長が北京到着 “台湾有事”首相答弁に中国反発 ★3 [煮卵★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★2 [蚤の市★]
- NHK、受信料の未払い世帯に督促強化へ 民事手続きの新組織を設置 差し押さえなどの強制執行も [1ゲットロボ★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 橋下徹氏「この喧嘩は日本の完敗」 台湾有事答弁めぐる外務省局長訪中で指摘「中国に怒られてご説明に伺った日本と見られる」 [muffin★]
- 【日本大使館】中国在留邦人は安全確保を [ぐれ★]
- 韓国、泥船から爆速で逃げ出す 「高市…さん…でしたっけ?」 [878970802]
- 高市早苗の中国問題、「オーバーツーリズムが解消されてウザい中国人が消えるから日本の勝ち」という風潮になってしまう [562983582]
- 【忖度】野村総研、痛恨のミス!中国人の訪日自粛で2兆2000億円の経済損失!と、はじいたが誤りだった。4000億減って1.8兆円。高市 [219241683]
- 「稼ぐのよ!」高市が電話でガチャ切り😱鈴木農水大臣に伝えたこと… [993451824]
- 【悲報】有名ウヨ論客、「現実的に考えて中国と仲直りするしかなくね?」と言ったら野良ウヨから総叩きにあう [856698234]
- 愛国者ナザレンコ「左翼は自己中な差別主義者で偽善者。日本人ファーストを叩いておいて台湾人が死んでも知らな〜いでしょ。中露の犬」 [856698234]
