!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part163
https://mevius.5ch.net/test/read.cgi/tech/1672409791/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
C++相談室 part164
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 33da-QP0H)
2023/05/09(火) 11:50:52.06ID:EYc2I7oW02デフォルトの名無しさん (スプッッ Sd97-Itme)
2023/05/09(火) 17:29:42.12ID:fBzPCnLFd >>1
乙
乙
3デフォルトの名無しさん (ワッチョイ df01-ouLR)
2023/05/10(水) 05:46:16.13ID:v0BqkWXe0 >>2
よく見たらそれ乙じゃなくてポニーテールやん
よく見たらそれ乙じゃなくてポニーテールやん
4デフォルトの名無しさん (スプッッ Sd97-Itme)
2023/05/10(水) 07:28:21.43ID:htltMOsRd どゆこと?
5デフォルトの名無しさん (テテンテンテン MMde-qVtI)
2023/05/12(金) 20:00:57.96ID:mYlAeNCAM class template みたいなノリで、namespace templateとかできないかね。
ユーザーカスタマイズくらいしかメリット無いけど。
ユーザーカスタマイズくらいしかメリット無いけど。
6デフォルトの名無しさん (ワッチョイ 6f9a-syTp)
2023/05/13(土) 07:51:55.71ID:JxNjXH3v0 ある整数のペアが既に出てきたかどうかを管理したいのですが、
安直に unordered_set(pair<int, int>> としたら、これはハッシュ関数を定義してあげないと
使えないんですね。
ネット上で見かけた良さげなハッシュ関数の例をコピーする手もあるのですが、
これ以外で楽なやり方(データ型)ってありますかね?
安直に unordered_set(pair<int, int>> としたら、これはハッシュ関数を定義してあげないと
使えないんですね。
ネット上で見かけた良さげなハッシュ関数の例をコピーする手もあるのですが、
これ以外で楽なやり方(データ型)ってありますかね?
7デフォルトの名無しさん (テテンテンテン MM7f-hs0w)
2023/05/13(土) 08:05:00.58ID:qcT1eyp6M 職業プログラマに聞きたいんだけど
自分でソフト屋なんて言ってるけど、ほぼ全てを外注に投げて自分ではろくに書けないなんての普通のことなの?
今年から社会人になったんだけど、先輩たちのレベルが低すぎて失笑してる日々です。
c言語、クラスという単語をドヤ顔で宣ってる先輩達。
classを解釈できるcコンパイラがあるのかな
自分でソフト屋なんて言ってるけど、ほぼ全てを外注に投げて自分ではろくに書けないなんての普通のことなの?
今年から社会人になったんだけど、先輩たちのレベルが低すぎて失笑してる日々です。
c言語、クラスという単語をドヤ顔で宣ってる先輩達。
classを解釈できるcコンパイラがあるのかな
8デフォルトの名無しさん (ワッチョイ cf34-+/XS)
2023/05/13(土) 08:10:28.77ID:Er9DBy9d0 俺は自分がそうだったら恥ずかしくてプログラマなんて名乗れないけど
世の中には色んな人がいるからね
まあ俺の価値観では普通じゃない
クラス、つまりオブジェクト指向は何言語を使うかじゃなく頭の中の考え方だから
++じゃないCでも使っていい用語だよ
世の中には色んな人がいるからね
まあ俺の価値観では普通じゃない
クラス、つまりオブジェクト指向は何言語を使うかじゃなく頭の中の考え方だから
++じゃないCでも使っていい用語だよ
9デフォルトの名無しさん (ワッチョイ 6f9a-syTp)
2023/05/13(土) 08:20:18.41ID:JxNjXH3v010デフォルトの名無しさん (ワッチョイ 3302-Cej3)
2023/05/13(土) 08:32:20.51ID:/V+1J/0r011デフォルトの名無しさん (スップ Sd1f-ammQ)
2023/05/13(土) 09:16:37.00ID:uFhfbSODd >>6
単に vector とかのコンテナに入れて find とかで既出判定すればいいんじゃないかな。
単に vector とかのコンテナに入れて find とかで既出判定すればいいんじゃないかな。
12はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-Phjm)
2023/05/13(土) 09:44:38.89ID:vqN1nVlv013デフォルトの名無しさん (ワッチョイ cf34-+/XS)
2023/05/13(土) 09:49:39.77ID:Er9DBy9d0 ハッシュ関数を定義してあげないと使えないって
定義すれば使えるだろ
何が問題なんだ?
定義すれば使えるだろ
何が問題なんだ?
14デフォルトの名無しさん (アウアウエー Sadf-OfPZ)
2023/05/13(土) 10:30:48.84ID:W/YCRtGia 単にset<int, int>じゃダメなの?
場合によっちゃあmap<int, set<int>>のほうが容量ケチれそうだけど?
https://ideone.com/YB4CIY
{
std::set<std::pair<int, int>> s;
s.emplace(1, 1);
s.emplace(1, 2);
auto f = [&s](int a, int b) {
return s.find(std::pair<int, int>(a, b)) != s.end();
//return s.contains(std::pair<int, int>(a, b));
};
std::cout << f(1, 1) << f(1, 2) << f(0, 1) << std::endl;
}
{
std::map<int, std::set<int>> m;
m[1].insert(1);
m[1].insert(2);
auto f = [&m](int a, int b) {
return m.find(a) != m.end() && m[a].find(b) != m[a].end();
//return m.contains(a) && m[a].contains(b);
};
std::cout << f(1, 1) << f(1, 2) << f(0, 1) << std::endl;
}
場合によっちゃあmap<int, set<int>>のほうが容量ケチれそうだけど?
https://ideone.com/YB4CIY
{
std::set<std::pair<int, int>> s;
s.emplace(1, 1);
s.emplace(1, 2);
auto f = [&s](int a, int b) {
return s.find(std::pair<int, int>(a, b)) != s.end();
//return s.contains(std::pair<int, int>(a, b));
};
std::cout << f(1, 1) << f(1, 2) << f(0, 1) << std::endl;
}
{
std::map<int, std::set<int>> m;
m[1].insert(1);
m[1].insert(2);
auto f = [&m](int a, int b) {
return m.find(a) != m.end() && m[a].find(b) != m[a].end();
//return m.contains(a) && m[a].contains(b);
};
std::cout << f(1, 1) << f(1, 2) << f(0, 1) << std::endl;
}
15デフォルトの名無しさん (ワッチョイ f37c-rSo2)
2023/05/13(土) 11:16:03.77ID:giA7vv3r0 後者だったらstd::multimapでよくね
unorderedでもいいけど
unorderedでもいいけど
16デフォルトの名無しさん (アウアウウー Sa67-ayqt)
2023/05/13(土) 13:46:15.98ID:0/cn7SoCa >>7
WNDCLASS
RegisterClass
UnregisterClass
WNDCLASSEX
RegisterClassEx
GetClassName
GetClassLong
SetClassLong
GetWindowClass
WNDCLASS
RegisterClass
UnregisterClass
WNDCLASSEX
RegisterClassEx
GetClassName
GetClassLong
SetClassLong
GetWindowClass
17デフォルトの名無しさん (テテンテンテン MM7f-hs0w)
2023/05/13(土) 19:14:51.96ID:23Ow1LiAM >>16
君もc++を学習しなおせ
君もc++を学習しなおせ
18デフォルトの名無しさん (スップ Sd1f-MiYm)
2023/05/13(土) 19:17:32.52ID:acArdvJWd19デフォルトの名無しさん (スプッッ Sd1f-zj+H)
2023/05/13(土) 19:23:38.16ID:lAh8QD2cd コード書けないリーダーは事務方に徹してくれるなら別にいいんだよ
そうじゃないやつが迷惑ってだけ
コーダーをバカにするやつはすべてこれ
そうじゃないやつが迷惑ってだけ
コーダーをバカにするやつはすべてこれ
20デフォルトの名無しさん (ワッチョイ 6f9a-syTp)
2023/05/13(土) 19:32:33.50ID:JxNjXH3v021デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz)
2023/05/13(土) 21:58:43.54ID:TFo/sDKRM int int → long
何にでも突っ込め
何にでも突っ込め
22デフォルトの名無しさん (ワッチョイ 73da-M4GN)
2023/05/13(土) 22:42:01.19ID:2eXxQqWR0 long long int
23デフォルトの名無しさん (ワッチョイ 6f9a-syTp)
2023/05/13(土) 23:57:15.63ID:JxNjXH3v024デフォルトの名無しさん (ワッチョイ 335f-GJof)
2023/05/14(日) 00:07:36.91ID:QmAlZPFj0 何も考えないでboost::combine_hash使っとけばいい
25デフォルトの名無しさん (ワッチョイ f37c-rSo2)
2023/05/14(日) 00:50:39.86ID:uyb9YL620 どうせ整数のハッシュなんて値そのものだし
26デフォルトの名無しさん (ワッチョイ 73da-M4GN)
2023/05/14(日) 00:58:25.21ID:hOK4knnB0 よくあるサンプルが (x * 12345)%n
27デフォルトの名無しさん (ワッチョイ 73da-M4GN)
2023/05/14(日) 01:15:07.44ID:hOK4knnB0 いや、適当杉田わ
long int v=0;
for(auto c : int_array)
v += v*12345 + c ;
return v%hash_size;
long int v=0;
for(auto c : int_array)
v += v*12345 + c ;
return v%hash_size;
28デフォルトの名無しさん (ワッチョイ 73da-M4GN)
2023/05/14(日) 01:16:46.06ID:hOK4knnB0 いや、こうか
long int v=0;
for(auto c : int_array)
v*=12345, v+=c ;
return v%hash_size;
long int v=0;
for(auto c : int_array)
v*=12345, v+=c ;
return v%hash_size;
29デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 06:44:54.29ID:YUNKAbGY0 template <>
struct std::hash<std::pair<int, int>>
{
static constexpr std::size_t size = sizeof(int) * 2;
using result_type = std::bitset<size * CHAR_BIT>;
result_type operator()(const std::pair<int, int>& val) const
{
result_type ret;
ret |= result_type(get<0>(val));
ret |= result_type(get<1>(val));
return ret;
}
};
struct std::hash<std::pair<int, int>>
{
static constexpr std::size_t size = sizeof(int) * 2;
using result_type = std::bitset<size * CHAR_BIT>;
result_type operator()(const std::pair<int, int>& val) const
{
result_type ret;
ret |= result_type(get<0>(val));
ret |= result_type(get<1>(val));
return ret;
}
};
30デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 06:47:52.52ID:YUNKAbGY0 もとい
ret |= result_type(get<0>(val));
ret <<= sizeof(int) * CHAR_BIT; //fix
ret |= result_type(get<1>(val));
ret |= result_type(get<0>(val));
ret <<= sizeof(int) * CHAR_BIT; //fix
ret |= result_type(get<1>(val));
31デフォルトの名無しさん (ワッチョイ 6f9a-syTp)
2023/05/14(日) 10:45:03.83ID:28vpFfrh0 シフト演算が必要なのは、負の整数の場合が
あと、問題のサイズによってはハッシュの速度も気になるなあと
あと、問題のサイズによってはハッシュの速度も気になるなあと
32デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz)
2023/05/14(日) 13:45:27.63ID:pb1Dbmn7M この流れ…
小学生の頃の自分はもちろんc知らなかったけど
このスレでああだこうだ言ってる人間達よりは使える人間だったのかなと
小学生の頃の自分はもちろんc知らなかったけど
このスレでああだこうだ言ってる人間達よりは使える人間だったのかなと
33デフォルトの名無しさん (ワッチョイ 7f28-HoHV)
2023/05/14(日) 13:47:15.07ID:mysDM4PT0 負の整数を論理演算と組み合わせるときはオフセットして非負の範囲にしてから符号無し型にして唐論理演算したら安心、
取り出すときは(論理演算して切り出した後)逆オフセットで元に戻る
全ての過程で符号つき整数の右シフトが陽に現れずに済む
取り出すときは(論理演算して切り出した後)逆オフセットで元に戻る
全ての過程で符号つき整数の右シフトが陽に現れずに済む
34デフォルトの名無しさん (ワッチョイ 7f28-HoHV)
2023/05/14(日) 13:52:34.35ID:mysDM4PT0 しつれい
>オフセットして非負の範囲にしてから符号無し型
この処理順序で良いのは {扱う整数|<std::numeric_limits<オフセットするときの整数型>::max()のときはこれで良いが、
=の場合は符号無しにしてからオフセットする
全てが調和する、
>オフセットして非負の範囲にしてから符号無し型
この処理順序で良いのは {扱う整数|<std::numeric_limits<オフセットするときの整数型>::max()のときはこれで良いが、
=の場合は符号無しにしてからオフセットする
全てが調和する、
35デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz)
2023/05/14(日) 13:53:38.30ID:pb1Dbmn7M こんなの秒で解決するだろ
ごちゃごちゃ言うようなものなの?
ごちゃごちゃ言うようなものなの?
36デフォルトの名無しさん (ワッチョイ 835f-Phjm)
2023/05/14(日) 17:24:37.15ID:oi9EHG/70 こんなの秒でスルーするだろ
ごちゃごちゃ言うようなものなの?
ごちゃごちゃ言うようなものなの?
37デフォルトの名無しさん (スップー Sd1f-HMPm)
2023/05/14(日) 18:28:37.27ID:f2qVMn0Gd スルー出来てない人に言われましても
38デフォルトの名無しさん (ワッチョイ cf34-TSnC)
2023/05/14(日) 21:34:32.36ID:YUNKAbGY0 ヒントじゃあかんのね
100%完全なコードを提供しないとクレームつくわけか
# 若旦はん、やってて恥ずかしおまへんか?
100%完全なコードを提供しないとクレームつくわけか
# 若旦はん、やってて恥ずかしおまへんか?
39デフォルトの名無しさん (ワッチョイ 0310-QNcS)
2023/05/16(火) 15:18:28.27ID:cdgpde7Q0 教えてもらえないでしょうか
c++で
クラスを作って関数を書いています。
大きくなり、可読性が悪いので、
同じクラス内のcppを別ファイルに分けたいのですが、
可能なのでしょうか
継承を使って、10個ぐらい数珠つなぎにして、一番最後の継承クラスに関数呼び出し元の関数を書いて、
途中の継承クラスに分けたい関数を書いたら、
と考えたりしています。
c++で
クラスを作って関数を書いています。
大きくなり、可読性が悪いので、
同じクラス内のcppを別ファイルに分けたいのですが、
可能なのでしょうか
継承を使って、10個ぐらい数珠つなぎにして、一番最後の継承クラスに関数呼び出し元の関数を書いて、
途中の継承クラスに分けたい関数を書いたら、
と考えたりしています。
40デフォルトの名無しさん (アウアウウー Sa67-+/XS)
2023/05/16(火) 15:58:56.29ID:mGp2Y9l5a >>19
めっちゃわかります
めっちゃわかります
41デフォルトの名無しさん (アウアウウー Sa67-+/XS)
2023/05/16(火) 16:03:17.10ID:mGp2Y9l5a42デフォルトの名無しさん (アウアウウー Sa67-MLJk)
2023/05/16(火) 16:24:39.60ID:hKNAv4Vda43デフォルトの名無しさん (ワッチョイ 0310-QNcS)
2023/05/16(火) 17:34:39.57ID:cdgpde7Q044デフォルトの名無しさん (スッップ Sd1f-paFp)
2023/05/16(火) 21:35:23.62ID:+NXdN5Npd 可読性が悪いものは
ファイルを分けても良くはならんぞ
ファイルを分けても良くはならんぞ
45デフォルトの名無しさん (ワッチョイ 6fad-ZkZz)
2023/05/16(火) 21:55:30.94ID:RFVtGrOF046デフォルトの名無しさん (ワッチョイ 73da-M4GN)
2023/05/16(火) 22:05:53.03ID:oY5Fe8SB0 殆どコピペなんだろうな
クラスの継承知らないヤツがよくやる荒業
クラスの継承知らないヤツがよくやる荒業
47はちみつ餃子 ◆8X2XSCHEME (ワッチョイ ff3e-ZkZz)
2023/05/16(火) 22:27:10.76ID:tGbGLk1R0 そういえば C# でクラス定義を分ける機能 (パーシャルクラス) があると聞いたことがあるけど
本来的に分けるべきクラスを見かけだけ分割するような悪い設計を誘発しそうな印象がある。
C# について全然知らんので印象だけだけど。
本来的に分けるべきクラスを見かけだけ分割するような悪い設計を誘発しそうな印象がある。
C# について全然知らんので印象だけだけど。
48デフォルトの名無しさん (ワッチョイ 335f-GJof)
2023/05/16(火) 22:54:23.62ID:A1rs+At80 partialはXAMLから生成された.csと手書きする.csをマージするための機能なので
49デフォルトの名無しさん (スプッッ Sd1f-zj+H)
2023/05/17(水) 07:00:26.09ID:s9zxu+xkd >>47
多重継承っぽいやつ?
多重継承っぽいやつ?
50デフォルトの名無しさん (スップ Sd1f-kcYJ)
2023/05/17(水) 08:36:31.92ID:9mruUvtDd 分割されたそれぞれの断片をコンパイラの後工程で1クラスにまとめ上げる感じ。
なのでこんな感じの相互参照も許される。
partial class C{
private void F1(){ F2(); }
}
partial class C{
private void F2(){ F1(); }
}
まあ当然コードの見通しが悪くなるので、
コンパイラ生成が絡むとこだけをpartialにして1ファイル1クラスにしておくのが鉄則
なのでこんな感じの相互参照も許される。
partial class C{
private void F1(){ F2(); }
}
partial class C{
private void F2(){ F1(); }
}
まあ当然コードの見通しが悪くなるので、
コンパイラ生成が絡むとこだけをpartialにして1ファイル1クラスにしておくのが鉄則
51デフォルトの名無しさん (スッププ Sd1f-paFp)
2023/05/17(水) 12:04:20.17ID:nFfh+5gid 「1ファイル1クラスにしておくのが鉄則」
10行のクラスも10000行のクラスも何も考えずに1ファイル
思考停止君のやること
10行のクラスも10000行のクラスも何も考えずに1ファイル
思考停止君のやること
52デフォルトの名無しさん (オイコラミネオ MMc7-ZkZz)
2023/05/17(水) 12:36:42.78ID:F24a8wLtM C#のpartialは基本的に自動生成されたファイルとの分離が主目的
winformsのコントロールのプロパティのイニシャライズとか人から触ってほしくないファイルで一種の馬鹿避けになってる
delphiではそのコントロール向けのファイルがバイナリでぶっ壊れてもどうにもできないし
コーディング中にコード内検索も出来ない
利便性が著しくよくない
後は一般のコードジェネレータの吐き出すファイル用にも使える
最近はmvvm toolkitで便利に使われている
コードの可読性が上がるし触られたくないものを扱うのも便利
人力コードで使う場合は長いファイルの下請けメソッドを分割する場合
単純に可読性が上がるけど普通は別のアプローチを使う
特定の機能をまとめたファイルを一つ作ってそこに関連クラスを全部入れるとかもできるけど無しだろうな
特定のタイミングでプリンターに出力するメソッドを追加してファイルのアリ無しで切り替えるとかは出来そう
winformsのコントロールのプロパティのイニシャライズとか人から触ってほしくないファイルで一種の馬鹿避けになってる
delphiではそのコントロール向けのファイルがバイナリでぶっ壊れてもどうにもできないし
コーディング中にコード内検索も出来ない
利便性が著しくよくない
後は一般のコードジェネレータの吐き出すファイル用にも使える
最近はmvvm toolkitで便利に使われている
コードの可読性が上がるし触られたくないものを扱うのも便利
人力コードで使う場合は長いファイルの下請けメソッドを分割する場合
単純に可読性が上がるけど普通は別のアプローチを使う
特定の機能をまとめたファイルを一つ作ってそこに関連クラスを全部入れるとかもできるけど無しだろうな
特定のタイミングでプリンターに出力するメソッドを追加してファイルのアリ無しで切り替えるとかは出来そう
53デフォルトの名無しさん (アウアウウー Sa67-MLJk)
2023/05/17(水) 12:57:39.48ID:TlHThGt8a おんなじ意味合いの関数なんだけどSFINAEしまくってて1000行くらいあるやつはよく見かける
54デフォルトの名無しさん (ワッチョイ 3302-Cej3)
2023/05/17(水) 13:32:11.85ID:6s1sKbMg0 時代はパーシャル
55デフォルトの名無しさん (スプッッ Sd07-zj+H)
2023/05/17(水) 16:10:19.20ID:ZA2j/mjnd 触られたくないコードって危険を孕んで内科医?
業務の情報が1人の社員に独占されていると
そいつが急死したら詰むだろ
業務の情報が1人の社員に独占されていると
そいつが急死したら詰むだろ
56デフォルトの名無しさん (オイコラミネオ MMc7-Np+b)
2023/05/17(水) 22:50:57.85ID:F24a8wLtM 彼も若いころは文脈も理解できてまともにコーディングできたのかもしれない
皆いつか老化して意味が取れなくなるんだから
いつか行く道と言うことで…
皆いつか老化して意味が取れなくなるんだから
いつか行く道と言うことで…
57デフォルトの名無しさん (ワッチョイ 7f28-sx1H)
2023/05/18(木) 08:16:22.48ID:rquLbZPK0 互いに依存しないことを明確にするためにファイルを分けることはまれによくある……
static int g_foo;
class A { ... };
class B {
void bar() { baz(g_foo); A x; } // Bがg_fooやAへの依存が無いことはBをファイルを分けたらワカル分けなかったらわからん
};
static int g_foo;
class A { ... };
class B {
void bar() { baz(g_foo); A x; } // Bがg_fooやAへの依存が無いことはBをファイルを分けたらワカル分けなかったらわからん
};
58デフォルトの名無しさん (ワッチョイ 7f28-sx1H)
2023/05/18(木) 08:21:13.77ID:rquLbZPK0 もっともファイルを分けたからといってもメモリのエイリアシング的な形で依存した場合は知らん
some_func()が表記上はg_fooを含まないのに実は中でg_fooのアドレスを知っていて以下略
some_func()が表記上はg_fooを含まないのに実は中でg_fooのアドレスを知っていて以下略
59デフォルトの名無しさん (オイコラミネオ MMc7-Np+b)
2023/05/18(木) 22:15:33.79ID:mLb7AMe5M さすがに冷たい対応だったかなと
C#でpartialが入った経緯
winformsはGUIデザイナを使ってボタン等のコントロールを自由に配置してプロパティを変えて表示される文字を変えることができる
初期はデザイナで変更するとformのファイルがそのまま変更された
そのファイルを人間も書き換えているので人がミスしたり運が悪いと整合性が取れなくなったりしてた
例えば全置換などやってデザイナの部分も書き換わったりとか
それで自動生成された部分を人が不意に触れないないようにそこだけを別ファイルに出す目的でpartial classが出来た
partial methodも作られたけど他人が使ってるのを見たことがない
C#でpartialが入った経緯
winformsはGUIデザイナを使ってボタン等のコントロールを自由に配置してプロパティを変えて表示される文字を変えることができる
初期はデザイナで変更するとformのファイルがそのまま変更された
そのファイルを人間も書き換えているので人がミスしたり運が悪いと整合性が取れなくなったりしてた
例えば全置換などやってデザイナの部分も書き換わったりとか
それで自動生成された部分を人が不意に触れないないようにそこだけを別ファイルに出す目的でpartial classが出来た
partial methodも作られたけど他人が使ってるのを見たことがない
60デフォルトの名無しさん (ワッチョイ ff79-ScEU)
2023/05/19(金) 02:03:23.75ID:iSJAQTOS0 日本でパーシャルと言えばパーシャル冷蔵庫
微妙に凍結させた状態にして保存するというアレ
まさにC#のpartialの事である
微妙に凍結させた状態にして保存するというアレ
まさにC#のpartialの事である
61デフォルトの名無しさん (スプッッ Sd1f-zj+H)
2023/05/19(金) 14:04:53.67ID:Y7veEz1vd 偏微分
62デフォルトの名無しさん (ラクッペペ MM7f-fulC)
2023/05/19(金) 14:20:06.94ID:s84ipUzkM グラッド ダイバージェンス ローテーション
63デフォルトの名無しさん (アウアウウー Sa2f-SwK+)
2023/05/20(土) 13:24:28.97ID:QfLlK72xa Φ(E)
∇・E
∇×E
∇・E
∇×E
64デフォルトの名無しさん (JP 0H2b-QEN2)
2023/05/20(土) 14:24:46.00ID:duXb8gf0H ナブラッ
65デフォルトの名無しさん (ワッチョイ 03cf-owa4)
2023/05/20(土) 14:35:25.50ID:mmZhl8HV0 チロワッ
66デフォルトの名無しさん (オイコラミネオ MMeb-owa4)
2023/05/20(土) 15:53:45.99ID:KTPYLvU6M APLを思い出した
さすがに使ったことはないけど
さすがに使ったことはないけど
67デフォルトの名無しさん (アウアウウー Sa2f-IRVr)
2023/05/20(土) 16:00:42.45ID:eGW3N412a for(auto &v: createVector()) なんか処理
みたいな書き方してもcreateVectorは一回しかよばれず大丈夫ってことでいい?
みたいな書き方してもcreateVectorは一回しかよばれず大丈夫ってことでいい?
68はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cb3e-FIIW)
2023/05/20(土) 16:21:49.91ID:dyAKGBP2069デフォルトの名無しさん (ワッチョイ b301-HmrL)
2023/05/20(土) 16:23:49.47ID:am3G09Kz0 >>67
そんくらい自分で試しなされ
$ cat test.cpp
#include <iostream>
#include <vector>
using namespace std;
auto createVector() {
cout << "hoge\n";
return vector <int> ();
}
int main () {
for(auto &v: createVector()); // なんか処理
return 0;
}
$ g++ test.cpp
$ ./a.out
hoge
そんくらい自分で試しなされ
$ cat test.cpp
#include <iostream>
#include <vector>
using namespace std;
auto createVector() {
cout << "hoge\n";
return vector <int> ();
}
int main () {
for(auto &v: createVector()); // なんか処理
return 0;
}
$ g++ test.cpp
$ ./a.out
hoge
70デフォルトの名無しさん (ワッチョイ fff0-IRVr)
2023/05/20(土) 18:59:35.46ID:VcGb9zmJ0 >>69
自分の環境だと通るのは知ってるけど、実は未定義でアウトみたいな場合あるから5chの有識者の意見が聞きたかった
自分の環境だと通るのは知ってるけど、実は未定義でアウトみたいな場合あるから5chの有識者の意見が聞きたかった
71デフォルトの名無しさん (オイコラミネオ MMeb-owa4)
2023/05/20(土) 19:26:09.53ID:KTPYLvU6M かなり昔範囲forはプリプロセッサで展開されると聞いたことがあったなあ
そういうのから誤解なんじゃないかな
実際展開してみたけどプリプロセッサでは展開されないです
そういうのから誤解なんじゃないかな
実際展開してみたけどプリプロセッサでは展開されないです
72デフォルトの名無しさん (ワッチョイ 5f7c-aV//)
2023/05/20(土) 20:10:50.85ID:pdI1pmlS0 >>70
これのこと?
std::vector<int> createVector();
for(auto &v: createVector()) // セーフ
struct Result { std::vector<int> v; };
Result createResult();
for(auto &v: createResult().v) // UB
これのこと?
std::vector<int> createVector();
for(auto &v: createVector()) // セーフ
struct Result { std::vector<int> v; };
Result createResult();
for(auto &v: createResult().v) // UB
73はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cb3e-FIIW)
2023/05/21(日) 00:13:09.51ID:tvaGSf6W0 >>71
range-based for は等価なコードを示す形で意味論が規定されてる。
https://timsong-cpp.github.io/cppwp/n3337/stmt.ranged
「こう書いた場合の挙動と等しい」という説明が「このように展開される」と誤解されたんだろう。
コンパイラの内部で実際に展開しても構わないんだが
プリプロセッサはフェイズの整合性がとれなくなるのでこの展開をプリプロセッサでは実現できない。
range-based for は等価なコードを示す形で意味論が規定されてる。
https://timsong-cpp.github.io/cppwp/n3337/stmt.ranged
「こう書いた場合の挙動と等しい」という説明が「このように展開される」と誤解されたんだろう。
コンパイラの内部で実際に展開しても構わないんだが
プリプロセッサはフェイズの整合性がとれなくなるのでこの展開をプリプロセッサでは実現できない。
74はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cb3e-FIIW)
2023/05/21(日) 00:41:25.84ID:tvaGSf6W0 一時オブジェクトの寿命は個々の具体例を網羅的に覚えるというわけにもいかんので
ちゃんと原則を理解しないといかんというのは警告しておく。
>>72 で提示された内容を解説すると、このとき createResult の結果である Result は一時オブジェクトなので
完結式の終わりには解体される。 (>>73 で提示した展開形を参照のこと。)
右辺値は参照で受けた場合に限りその参照の寿命と同じ分だけ寿命が延長されるというルールがあるので
その原則に従えば Result::v の寿命は延長されるのだが v を内包する Result が解体されるときにメンバも解体してしまうので
Result::v も無効になってしまう。
当然だがすでに解体されたオブジェクトはそのイテレータも全部が無効。
ちゃんと原則を理解しないといかんというのは警告しておく。
>>72 で提示された内容を解説すると、このとき createResult の結果である Result は一時オブジェクトなので
完結式の終わりには解体される。 (>>73 で提示した展開形を参照のこと。)
右辺値は参照で受けた場合に限りその参照の寿命と同じ分だけ寿命が延長されるというルールがあるので
その原則に従えば Result::v の寿命は延長されるのだが v を内包する Result が解体されるときにメンバも解体してしまうので
Result::v も無効になってしまう。
当然だがすでに解体されたオブジェクトはそのイテレータも全部が無効。
75デフォルトの名無しさん (スップ Sd8a-Cz+X)
2023/05/21(日) 10:05:34.04ID:bUoMcGVnd 単純なFOREACHマクロだと展開できないんだよねこれ
FOREACH(T x, iterable) "文"
↓
{
auto&& range=iterable;
auto&& begin=range.begin();
auto&& end=range.end();
for(;begin!=end; ++begin){
T x=*begin;
"文"
}
}
range寿命の関係上スコープの外に漏らしてはいけない。
FOREACHの終了を表現するために"#define FOREACH_END }}"とかの間抜けなマクロが必要になる
(たぶんC++17で導入された初期化付きifを使えば誤魔化せるけど)
セパレータの":"(or ",")をプリプロセッサを見つけるのが不可能。
Tでもiterableでも":"とか","を使って表現するケースに対応し切れない
(Tにtypename std::array<int, 5>::value_type を指定されたら無理)
FOREACH(T x, iterable) "文"
↓
{
auto&& range=iterable;
auto&& begin=range.begin();
auto&& end=range.end();
for(;begin!=end; ++begin){
T x=*begin;
"文"
}
}
range寿命の関係上スコープの外に漏らしてはいけない。
FOREACHの終了を表現するために"#define FOREACH_END }}"とかの間抜けなマクロが必要になる
(たぶんC++17で導入された初期化付きifを使えば誤魔化せるけど)
セパレータの":"(or ",")をプリプロセッサを見つけるのが不可能。
Tでもiterableでも":"とか","を使って表現するケースに対応し切れない
(Tにtypename std::array<int, 5>::value_type を指定されたら無理)
76デフォルトの名無しさん (オイコラミネオ MMeb-owa4)
2023/05/21(日) 13:16:13.24ID:gNV32dtiM そうそう
プリプロセッサは重複の無い任意の変数名を持ってこれない
固定でもスコープの問題もあるからプリプロセッサ論は馬鹿げてるなと思った
プリプロセッサは重複の無い任意の変数名を持ってこれない
固定でもスコープの問題もあるからプリプロセッサ論は馬鹿げてるなと思った
77デフォルトの名無しさん (ワッチョイ 5f7c-aV//)
2023/05/21(日) 14:57:20.57ID:TLn2V+5X0 >>74
ちなみにこれはC++23からは解決する(P2644)
for文の中身のあらゆる一時オブジェクトは(謎の力によって)ループ終了まで生存するようになる
まあ現時点ではやらない方がいいし、気にしなくて良くなるまで10年はかかるだろうけど
ちなみにこれはC++23からは解決する(P2644)
for文の中身のあらゆる一時オブジェクトは(謎の力によって)ループ終了まで生存するようになる
まあ現時点ではやらない方がいいし、気にしなくて良くなるまで10年はかかるだろうけど
78デフォルトの名無しさん (ワッチョイ b301-HmrL)
2023/05/21(日) 15:50:41.28ID:hDRagkvp079デフォルトの名無しさん (ワッチョイ aa28-ff77)
2023/05/21(日) 19:09:41.96ID:9sSc2LHl0 class Foo {
int m_value;
public:
Foo() { m_value = 現在時刻に依存して決まる何かの値; }
int v() const { return m_value; }
};
int tmp;
for (i = 0; (tmp = Foo().v(), tmp < 100); i++) {
cout << i << "," << tmp << endl;
}
とかになったらどうなってしまウンダー/(;≧Д≦)\
int m_value;
public:
Foo() { m_value = 現在時刻に依存して決まる何かの値; }
int v() const { return m_value; }
};
int tmp;
for (i = 0; (tmp = Foo().v(), tmp < 100); i++) {
cout << i << "," << tmp << endl;
}
とかになったらどうなってしまウンダー/(;≧Д≦)\
80デフォルトの名無しさん (ワッチョイ 5f7c-aV//)
2023/05/21(日) 20:47:43.16ID:TLn2V+5X0 for (auto&& x: <<ここだけだよ>>)
81デフォルトの名無しさん (ワッチョイ 6f5f-u1DA)
2023/05/21(日) 21:41:43.50ID:Wy9ZySN20 std::for_eachと死ぬタイミング合わせようとしてるのかな
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 「アベノミクス」で投資対象と化したマンション ローンの低金利続き「年収の12倍」借りる20代出現 [蚤の市★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【高市悲報】神谷「部下が間違えて脱炭素を脱酸素て書いたんですよ😡それ読んだだけなのに挙げ足とるな!小学生か!」 [359965264]
- 【実況】博衣こよりのえちえち朝こよ🧪
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- インバウンドが崩壊したら日本はどうなるのか
- ほかほかご飯にかけるとうまいもの一覧
- FRUITS ZIPPERってアイドル流行ってるらしいが対抗してVIPもFRUITS VIPPERってアイドル結成しようぜ
