次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。
前スレ
C++相談室 part137
https://mevius.5ch.net/test/read.cgi/tech/1531558382/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/
■長いソースを貼るときはここへ。■
http://codepad.org/
https://ideone.com/
[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
----- テンプレ ここまで -----
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
探検
C++相談室 part137
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 12c3-4saf)
2018/08/27(月) 16:02:00.94ID:vY3QDx2y0196さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-3h0E)
2018/09/04(火) 00:09:11.92ID:I66W1B5fd See source by your IDE.
197はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/04(火) 00:37:21.78ID:f5HJ/2BD0 >>195
> 異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
矛盾というのがどういう状況を想定しているのかわからないけど、
言語仕様上はデータ競合が起こりうると解釈できる場面だと思う。
要するに未定義動作に突入する可能性がある。
mutex でロックすることで簡単に回避は出来るが速度を考えるならば
操作するデータが atomic であるようにデザインするとなんとかなるかも?
> biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
される。
> bitset[index] = boolean,
> とか
> vector[index] = boolean
> (operator[] が「bool の参照」?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?
「1 ビットを表す型」のオブジェクトを返すことで対応する。
そのせいで、 std::vector<bool> は bool 以外を格納する std::vector よりも出来ることに若干の制約がある。
> 異なるスレッドから集中してビットをオンしまくる、ということをして矛盾が発生することはありますか?
矛盾というのがどういう状況を想定しているのかわからないけど、
言語仕様上はデータ競合が起こりうると解釈できる場面だと思う。
要するに未定義動作に突入する可能性がある。
mutex でロックすることで簡単に回避は出来るが速度を考えるならば
操作するデータが atomic であるようにデザインするとなんとかなるかも?
> biset や vector<bool> というのは、一つの物理バイトに対して複数の bool を詰め込んだ作りとして実装されているのでしょうか?
される。
> bitset[index] = boolean,
> とか
> vector[index] = boolean
> (operator[] が「bool の参照」?を返す、みたいな感じ) は実際にはどのように記述されているのでしょうか?
「1 ビットを表す型」のオブジェクトを返すことで対応する。
そのせいで、 std::vector<bool> は bool 以外を格納する std::vector よりも出来ることに若干の制約がある。
198はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/04(火) 03:10:23.32ID:f5HJ/2BD0 テトリスの素材を用意したぞ
https://dotup.org/uploda/dotup.org1633818.png
https://dotup.org/uploda/dotup.org1633818.png
199デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/04(火) 05:42:55.53ID:4a01gUXa0 惜しい、もうちょっと工夫すれば
「テトリス」だけでなく「○○トリス」としても使えるのに。
「テトリス」だけでなく「○○トリス」としても使えるのに。
200デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/04(火) 06:42:41.96ID:Nt/zN6W10201デフォルトの名無しさん (ブーイモ MMab-Rc6j)
2018/09/04(火) 07:24:16.79ID:FJBPHmlLM202デフォルトの名無しさん (ブーイモ MM29-gjm5)
2018/09/04(火) 09:34:15.28ID:W1MTXd47M203デフォルトの名無しさん (ワッチョイ 2323-GfG6)
2018/09/04(火) 17:05:52.60ID:QK+jEBGl0 こういう待ち時間が僅少なものはスピンロックの方がいいぞ
204デフォルトの名無しさん (ブーイモ MM29-gjm5)
2018/09/04(火) 18:06:05.25ID:W1MTXd47M というよりこの場合CASが成功するまで繰り返せばいいだけ
205デフォルトの名無しさん (ワッチョイ 2323-GfG6)
2018/09/04(火) 18:43:17.89ID:QK+jEBGl0 bitset 位なら自分でcasで実装するのが最善か
206デフォルトの名無しさん (ワッチョイ eb9f-jo4B)
2018/09/04(火) 20:32:54.12ID:j0Ybv1km0 C++に標準で画像を表示する方法がないと聞いたけど
どんな方法で出来るのか教えてくれないか?
openGLとダイレクトX以外にないものなのか
どんな方法で出来るのか教えてくれないか?
openGLとダイレクトX以外にないものなのか
207さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-3h0E)
2018/09/04(火) 20:35:12.07ID:I66W1B5fd GDIならウィンドウに画像表示できるよ。
208デフォルトの名無しさん (ワッチョイ eb9f-jo4B)
2018/09/04(火) 20:40:18.08ID:j0Ybv1km0 そんなものがあるのか 調べてみるわ
209さまよえる蟻人間 ◆T6xkBnTXz7B0 (スフッ Sd43-3h0E)
2018/09/04(火) 20:44:23.36ID:I66W1B5fd 他にもgtkmmとかQtというのも、ウィンドウに画像表示できる。
210デフォルトの名無しさん (ワッチョイ eb9f-jo4B)
2018/09/04(火) 20:47:51.19ID:j0Ybv1km0 3つだけじゃないんだなw
ありがとうそっちのほうも調べてみるよ
ありがとうそっちのほうも調べてみるよ
>>197 はちみつさん、>>201,203-205
コメントありがとうございます。
>>204,205
初めて atomic を使ってみました
https://ideone.com/HHUfCw
そのままでは atomic を vector の要素にはできないようで、stackoverflow 由来の変てこな回避策をとっています
https://stackoverflow.com/questions/13193484/how-to-declare-a-vector-of-atomic-in-c
マルチスレッドでの評価はこれからとりかかりますが、
こんな感じで CAS できてますでしょうか
コメントありがとうございます。
>>204,205
初めて atomic を使ってみました
https://ideone.com/HHUfCw
そのままでは atomic を vector の要素にはできないようで、stackoverflow 由来の変てこな回避策をとっています
https://stackoverflow.com/questions/13193484/how-to-declare-a-vector-of-atomic-in-c
マルチスレッドでの評価はこれからとりかかりますが、
こんな感じで CAS できてますでしょうか
212デフォルトの名無しさん (ブーイモ MM43-uAjs)
2018/09/04(火) 21:44:16.54ID:rJd6gmxFM なんとなくだけど、
vector<bool>でなくてよいのなら、複数スレッドからビットをonにしまくったところでそもそも問題にならないのでは?
vector<bool>でなくてよいのなら、複数スレッドからビットをonにしまくったところでそもそも問題にならないのでは?
213デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/04(火) 22:20:34.19ID:gG5zqknwd windowsでのパイプでのやり取りに詳しい人助けてくれませんか
あとで一部ソースコードは載せます
パイプ処理を非同期で行いたい
1. CreateNamedPipeで名前つきパイプを作成
2. CreateEventでオーパーラップ構造体にシグナル用のイベントをひもづける
3. 「非同期」でConnectNamedPipeを行う
4. WaitForSingleObjectでタイムアウトか接続が来たらパイプのコネクトをする
この流れで処理を作ろうとしてる
ただ、非同期な設定にすると上手く繋げず困ってます
そもそも名前つきパイプで非同期処理はできない..??
msdnにはCreateNamedPipeの第3引数にPIPE_WAITかPIPE_NOWAITかあるが、
PIPE_NOWAITは使用しないでくださいとあるのでPIPE_WAITを指定すると同期処理で待機することはできました
ただし、接続が来なかったらタイムアウトみたいなことができないので、ためしにPIPE_NOWAITにするとGetLastErrorによると218のエラーを返してくる
オーパーラップ構造体を指定したらConnectNamedPipeは非同期云々掛かれてるけどもできないのかな..?
あとで一部ソースコードは載せます
パイプ処理を非同期で行いたい
1. CreateNamedPipeで名前つきパイプを作成
2. CreateEventでオーパーラップ構造体にシグナル用のイベントをひもづける
3. 「非同期」でConnectNamedPipeを行う
4. WaitForSingleObjectでタイムアウトか接続が来たらパイプのコネクトをする
この流れで処理を作ろうとしてる
ただ、非同期な設定にすると上手く繋げず困ってます
そもそも名前つきパイプで非同期処理はできない..??
msdnにはCreateNamedPipeの第3引数にPIPE_WAITかPIPE_NOWAITかあるが、
PIPE_NOWAITは使用しないでくださいとあるのでPIPE_WAITを指定すると同期処理で待機することはできました
ただし、接続が来なかったらタイムアウトみたいなことができないので、ためしにPIPE_NOWAITにするとGetLastErrorによると218のエラーを返してくる
オーパーラップ構造体を指定したらConnectNamedPipeは非同期云々掛かれてるけどもできないのかな..?
214デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/04(火) 22:34:45.20ID:Nt/zN6W10 どうやっても無理
215デフォルトの名無しさん (スッップ Sd43-GfG6)
2018/09/04(火) 22:41:49.50ID:GmxIRs0ad dirty とか使わず単に
set
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
reset
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
じゃないのよく分からんけど
set
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
reset
T e;
while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
じゃないのよく分からんけど
216デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/04(火) 22:47:11.82ID:gG5zqknwd >>214
それまじすか....
それまじすか....
217デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/04(火) 23:05:32.40ID:Nt/zN6W10 >>216
待たないでデータ読むにはPeekNamedPipeの第五引数cbAvailでサイズ判定してcbAvailが0以外ならデータ読んでも止まらない
これ以外の方法は何やってもダメ
Linuxみたいにすんなり行かんね
待たないでデータ読むにはPeekNamedPipeの第五引数cbAvailでサイズ判定してcbAvailが0以外ならデータ読んでも止まらない
これ以外の方法は何やってもダメ
Linuxみたいにすんなり行かんね
218デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/04(火) 23:07:37.86ID:gG5zqknwd219デフォルトの名無しさん (オッペケ Srf1-Zer2)
2018/09/04(火) 23:07:51.12ID:b2qgijeQr sort に渡す比較関数って、たとえば
sort(A.begin(), A.end(), [](int a, int b){return a > b;});
としたら、降順になるのか昇順になるのかいつも分からなくなるんだが、どうやって覚えたら良いの
不等号の向き、つまり return で返る真偽とコンテナの要素番号の大小がどう対応してるのか分からない
sort(A.begin(), A.end(), [](int a, int b){return a > b;});
としたら、降順になるのか昇順になるのかいつも分からなくなるんだが、どうやって覚えたら良いの
不等号の向き、つまり return で返る真偽とコンテナの要素番号の大小がどう対応してるのか分からない
220デフォルトの名無しさん (ワッチョイ 3dbd-FrgJ)
2018/09/04(火) 23:59:12.10ID:IwUdbTOo0 a, bで順序がわからなくなるのなら、
first, secondとかleft, rightとかにすればいいんじゃね?
first < secondが昇順でなかったらクレーム続出だろ
first, secondとかleft, rightとかにすればいいんじゃね?
first < secondが昇順でなかったらクレーム続出だろ
221デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/05(水) 00:07:00.10ID:p8WqhzKed サーバー側だけどこんな感じです。
スマホで打つの限界がある...
{
HANDLE handle = CreateFileName(" \\\\.\\pipe\\"sample ,
PIPE_ACCESS_DUPLEX,
// ここの | って意味あるのかな?
// 両方とも0なので
PIPE_TYPE_BYTE |PIPE_READMODE_BYTE | PIPE_WAIT,
1,
0,
0,
0,
NULL );
OVERLAPED over = {0};
over.hEvent = CreateEvent(NULL, TRUE, FALSE, "sampleEvent");
BOOL result =ConnectNamedPipe(handle, &over);
DWORD error = GetLastError();
if( ( 0 == result) &&
( ( ERROR_SUCCESS == error ) || ( ERROR_PPE_CNNECTED != error ) || ( ERROR_IO_PENDING != error ) )
{
WaitForSingleObject(); //本当はここで待ってほしいが、ConnectNamedPipeで止まる
}
}
スマホで打つの限界がある...
{
HANDLE handle = CreateFileName(" \\\\.\\pipe\\"sample ,
PIPE_ACCESS_DUPLEX,
// ここの | って意味あるのかな?
// 両方とも0なので
PIPE_TYPE_BYTE |PIPE_READMODE_BYTE | PIPE_WAIT,
1,
0,
0,
0,
NULL );
OVERLAPED over = {0};
over.hEvent = CreateEvent(NULL, TRUE, FALSE, "sampleEvent");
BOOL result =ConnectNamedPipe(handle, &over);
DWORD error = GetLastError();
if( ( 0 == result) &&
( ( ERROR_SUCCESS == error ) || ( ERROR_PPE_CNNECTED != error ) || ( ERROR_IO_PENDING != error ) )
{
WaitForSingleObject(); //本当はここで待ってほしいが、ConnectNamedPipeで止まる
}
}
222デフォルトの名無しさん (ワッチョイ 15b3-+Ae+)
2018/09/05(水) 00:13:10.80ID:9rSvLDak0223デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/05(水) 00:18:10.89ID:VENvGGw0d224デフォルトの名無しさん (ワッチョイ 0580-rkYf)
2018/09/05(水) 00:30:09.32ID:+wARDt+J0 ココにサンプルコードがある
http://eternalwindows.jp/ipc/namedpipe/namedpipe02.html
FILE_FLAG_OVERLAPPED を追加する
よく分からんがコレとはまた違うのか
http://eternalwindows.jp/ipc/namedpipe/namedpipe02.html
FILE_FLAG_OVERLAPPED を追加する
よく分からんがコレとはまた違うのか
225デフォルトの名無しさん (スップ Sd03-snBd)
2018/09/05(水) 00:37:34.35ID:ABz0W8sZd >>224
FILE_FLAG_OVERLAPPEDの使用はまだ試してないので明日試してみますありがとう
FILE_FLAG_OVERLAPPEDに関しては持たないときの条件を使ってたんだけどだめだったんかな...
これをしたかったのだが...
https://msdn.microsoft.com/ja-jp/library/cc429611.aspx
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。
制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは
ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。
peekNamedPipe読んでるけど難しい
FILE_FLAG_OVERLAPPEDの使用はまだ試してないので明日試してみますありがとう
FILE_FLAG_OVERLAPPEDに関しては持たないときの条件を使ってたんだけどだめだったんかな...
これをしたかったのだが...
https://msdn.microsoft.com/ja-jp/library/cc429611.aspx
hNamedPipe ハンドルが FILE_FLAG_OVERLAPPED フラグを持たないとき、かつ、lpOverlapped パラメータで有効なポインタを指定したときは、この関数は非同期的に実行されます。
制御はすぐに返り、戻り値は 0 になります。GetLastError 関数は、ConnectNamedPipe 関数を呼び出す前にクライアントプロセス側が接続されていたときは
ERROR_PIPE_CONNECTED を、そうでないときは ERROR_IO_PENDING を返します。
peekNamedPipe読んでるけど難しい
226デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/05(水) 01:24:39.22ID:BafBBEgt0 peekで調べるのはcbAvailだけ
データは読まなくていい
読むときはReadFile
データは読まなくていい
読むときはReadFile
227デフォルトの名無しさん (ワッチョイ 3de3-zBrR)
2018/09/05(水) 02:51:54.52ID:n3z3O06I0 C++関係無いよね
Win32APIスレに行くべきだと思う
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365146(v=vs.85).aspx
こっちにはその部分に相当する箇所が無いようにみえる
FLAG_OVERLAPPEDの有無で非同期/同期は決まるんじゃないのかなぁ
>If hNamedPipe was not opened with FILE_FLAG_OVERLAPPED, the function does not return until a client is connected or an error occurs.
ってあるし
Win32APIスレに行くべきだと思う
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365146(v=vs.85).aspx
こっちにはその部分に相当する箇所が無いようにみえる
FLAG_OVERLAPPEDの有無で非同期/同期は決まるんじゃないのかなぁ
>If hNamedPipe was not opened with FILE_FLAG_OVERLAPPED, the function does not return until a client is connected or an error occurs.
ってあるし
228デフォルトの名無しさん (ワッチョイ 0b80-4Jnz)
2018/09/05(水) 12:47:17.08ID:TWmx8fnR0 >>223
>クライアント側が居なかった場合、ずっと待機し続ける
パイプって、パイプラインにデータが流れてくるまでは、ブロックされるものだろ。
データも流れて来ないのに、先へ進んだら、バグるだけ
その際、非同期なら、データ無しで、即座に返答が返ってくるのでは?
>クライアント側が居なかった場合、ずっと待機し続ける
パイプって、パイプラインにデータが流れてくるまでは、ブロックされるものだろ。
データも流れて来ないのに、先へ進んだら、バグるだけ
その際、非同期なら、データ無しで、即座に返答が返ってくるのでは?
229デフォルトの名無しさん (ワッチョイ e322-tpL7)
2018/09/05(水) 13:15:20.01ID:mkiFi/5o0 入力が「まだ来んからちょ待っとれ」なのか
「来るわけないやろアホかおまえ」なのかは
別の手段で判断せにゃならん
「来るわけないやろアホかおまえ」なのかは
別の手段で判断せにゃならん
230はちみつ餃子 ◆8X2XSCHEME (ワッチョイ db6f-tpL7)
2018/09/05(水) 15:48:09.73ID:QNa0Ltxl0 まあ常識的には適当な時間でタイムアウトするようにするくらいのものかな。
231デフォルトの名無しさん (スッップ Sd43-GfG6)
2018/09/05(水) 16:08:15.65ID:Nag0NR3Rd >>221
https://stackoverflow.com/questions/14306499/non-blocking-connectnamedpipe-event-not-getting-signaled/14306743
PIPE_NOWAIT を使えば ERROR_PIPE_LISTENING だの ERROR_IO_PENDING が即座に返されるが
WaitForSingleObject は発火しない
PIPE_WAIT だと当然ブロックする
PIPE_NOWAIT はlan managerとの互換性のために残されているだけで使用は推奨されていない
面倒でも FILE_FLAG_OVERLAPPED を使うしかない
https://stackoverflow.com/questions/14306499/non-blocking-connectnamedpipe-event-not-getting-signaled/14306743
PIPE_NOWAIT を使えば ERROR_PIPE_LISTENING だの ERROR_IO_PENDING が即座に返されるが
WaitForSingleObject は発火しない
PIPE_WAIT だと当然ブロックする
PIPE_NOWAIT はlan managerとの互換性のために残されているだけで使用は推奨されていない
面倒でも FILE_FLAG_OVERLAPPED を使うしかない
232デフォルトの名無しさん (スッップ Sd43-GfG6)
2018/09/05(水) 16:09:55.39ID:Nag0NR3Rd と書いたけどカッコつけずに後先考えず PIPE_NOWAIT でポーリングしてもいいか
233デフォルトの名無しさん (オイコラミネオ MMb9-RPdS)
2018/09/05(水) 18:53:58.76ID:H6UyuApwM void hoge(int x, int *returnint){
returnint = int * 2;
}
int hoge(int x){
return int * 2;
}
これって内容同じですか?
returnint = int * 2;
}
int hoge(int x){
return int * 2;
}
これって内容同じですか?
234デフォルトの名無しさん (ワッチョイ 2334-hqRA)
2018/09/05(水) 19:15:02.29ID:BafBBEgt0 どっちもコンパイルエラー出る点では同じ
235デフォルトの名無しさん (ワッチョイ 9593-kT/R)
2018/09/05(水) 19:32:27.66ID:YeNc+rPy0 >>233 C言語に対して重大な勘違い、または質問レスに些細な打ち間違い、
どちらかだと思うが、どちらかは分からない。
どちらかだと思うが、どちらかは分からない。
236235 (ワッチョイ 9593-kT/R)
2018/09/05(水) 19:33:03.57ID:YeNc+rPy0 C言語じゃなくてC++だね、ここ。
237デフォルトの名無しさん (ブーイモ MM29-s+Zn)
2018/09/05(水) 22:59:59.06ID:yXdlNP4XM selectしろや
>>215
内容をみてくださり感謝いたします、とても考えさせられました
まず >>211 に二点誤りがありました
・コンストラクタ引数に与える bit 数から、内部 vector<atomic<int>> の確保容量を計算する方法に誤りがあった
・CAS 後にスピンロックするかどうかの判断にあやまりがあった
修正 https://ideone.com/nwcmzq
>>215
>while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
>while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
>(e は未初期化状態でも構わない)
>>195 「やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません」
に範囲を限定するのならば >>215 はうまくいくと思います。これには「なるほど!!」と思いました。
ビットセットの最中は別スレッドのビットリセットやビットテストをスピンロックさせたい、
とかの排他制御をやるのならば、dirty-bit(というか1ビットセマフォ)を作らないといけないと考えています
内容をみてくださり感謝いたします、とても考えさせられました
まず >>211 に二点誤りがありました
・コンストラクタ引数に与える bit 数から、内部 vector<atomic<int>> の確保容量を計算する方法に誤りがあった
・CAS 後にスピンロックするかどうかの判断にあやまりがあった
修正 https://ideone.com/nwcmzq
>>215
>while (!_v[q]. _a.compare_exchange_weak(e, e|(1<<r)) {}
>while (!_v[q]. _a.compare_exchange_weak(e, e& ~(1<<r)) {}
>(e は未初期化状態でも構わない)
>>195 「やりたいことはエラトステネスのふるいなので、この場合オンしたあとオフすることはありません」
に範囲を限定するのならば >>215 はうまくいくと思います。これには「なるほど!!」と思いました。
ビットセットの最中は別スレッドのビットリセットやビットテストをスピンロックさせたい、
とかの排他制御をやるのならば、dirty-bit(というか1ビットセマフォ)を作らないといけないと考えています
239デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 02:04:16.57ID:Gt7E2PT1M >>234,235
すみません
C++にあまり詳しくないのでわからないのですが、どこがおかしいのでしょうか?
これなら内容等しいですか?
void hoge(int x, int& ret){
ret = int * 2;
}
int hoge(int x){
return int * 2:
}
すみません
C++にあまり詳しくないのでわからないのですが、どこがおかしいのでしょうか?
これなら内容等しいですか?
void hoge(int x, int& ret){
ret = int * 2;
}
int hoge(int x){
return int * 2:
}
240デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 02:08:35.51ID:itCyrIVk0 それはギャグで言っているのか?
void hoge(int x, int& ret){
ret = x * 2;
}
int hoge(int x){
return x * 2:
}
void hoge(int x, int& ret){
ret = x * 2;
}
int hoge(int x){
return x * 2:
}
241デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 02:15:35.03ID:Ev1vpWJGM242デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 02:38:44.74ID:itCyrIVk0 えーっと、
上段の参照渡しは呼び出し時に渡した変数そのものがやってきて書き換える。
下段のやつはコピーを返すので一手間ある。
理論的には下段の方がちょっと遅い。
まぁ、コンパイラが頑張ってきえるかもしれんし、
デルタ時間的に差はあるかもしれないが最近のコンピュータならあまり問題にならない。
それよりも速度を気にするなら採用しているアルゴリズムを精査したほうが効果的。
ちょっと変な文になった。
上段の参照渡しは呼び出し時に渡した変数そのものがやってきて書き換える。
下段のやつはコピーを返すので一手間ある。
理論的には下段の方がちょっと遅い。
まぁ、コンパイラが頑張ってきえるかもしれんし、
デルタ時間的に差はあるかもしれないが最近のコンピュータならあまり問題にならない。
それよりも速度を気にするなら採用しているアルゴリズムを精査したほうが効果的。
ちょっと変な文になった。
243デフォルトの名無しさん (ワッチョイ 5393-WN3X)
2018/09/06(木) 05:45:03.77ID:UQb09hzL0 厳密なところはアセンブラ出力を個別に見ないと分からない、
という前提はひとまず措くとして…。
int x, ret1, ret2; // x が未初期化ってところは見逃してくれ
hoge_ref(x, ret1); // void hoge(int x, int& ret)
ret2 = hoge_val(x); // int hoge(int x)
上は第2引数に参照を渡す手間が必要な代わりに返り値の処理は不要
下は引数1個で済む代わりに呼出側で返り値を別の変数に代入しなきゃいけない
相殺してどっこいどっこい大差なし、じゃないかな。
計算結果を変数に入れる必要がない場合、等はまた別のお話。
という前提はひとまず措くとして…。
int x, ret1, ret2; // x が未初期化ってところは見逃してくれ
hoge_ref(x, ret1); // void hoge(int x, int& ret)
ret2 = hoge_val(x); // int hoge(int x)
上は第2引数に参照を渡す手間が必要な代わりに返り値の処理は不要
下は引数1個で済む代わりに呼出側で返り値を別の変数に代入しなきゃいけない
相殺してどっこいどっこい大差なし、じゃないかな。
計算結果を変数に入れる必要がない場合、等はまた別のお話。
244はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 05:49:16.79ID:IzfX8EX20 >>240
後者の末尾がコロンになってるのがそのままやで。
後者の末尾がコロンになってるのがそのままやで。
245はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 05:59:16.76ID:IzfX8EX20 仮に差があったとしてもナノ秒レベルの話やん
246デフォルトの名無しさん (ワッチョイ 17c3-oywQ)
2018/09/06(木) 07:14:55.98ID:3Sjg8sdP0 速度どうこうは1兆回回すループの中にあるとか1マイクロ秒以内に完了しないと原子炉が爆発するとか
プロファイラでクソ時間がかかってることが判明したとかした時だけ気にしよう
プロファイラでクソ時間がかかってることが判明したとかした時だけ気にしよう
247243 (ワッチョイ 5393-WN3X)
2018/09/06(木) 08:27:46.68ID:UQb09hzL0 実際のところ「別のお話」と切り捨てた部分が大切でね。
元の質問から逸れてしまうけど。
関数が計算する結果の値だけが欲しい(別の変数に格納する必要がない、
格納すべき変数そのものが存在しない)場合とか、
返り値に相当するのがint等の単純なデータでなく大きなクラスの場合とか、
その辺りを基準に比較すべきなんだよ。
元の質問から逸れてしまうけど。
関数が計算する結果の値だけが欲しい(別の変数に格納する必要がない、
格納すべき変数そのものが存在しない)場合とか、
返り値に相当するのがint等の単純なデータでなく大きなクラスの場合とか、
その辺りを基準に比較すべきなんだよ。
248はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 08:44:12.19ID:IzfX8EX20 早すぎる最適化は諸悪の根源っていうもんな。
249デフォルトの名無しさん (ワッチョイ efd2-7GfT)
2018/09/06(木) 08:51:51.10ID:j/wx9LUv0 同意。固定長オンリーなどの最適化を最初から入れ込むとロクなことがない。
250デフォルトの名無しさん (オイコラミネオ MMe6-xaKy)
2018/09/06(木) 09:29:04.75ID:mrWZ3sxKM そーそー
尻拭く時間だけ早くしてもンコが早く出なきゃしゃーない
尻拭く時間だけ早くしてもンコが早く出なきゃしゃーない
251デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 10:29:33.35ID:c/F3wcvdM252はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 10:57:52.18ID:IzfX8EX20253はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 10:58:36.13ID:IzfX8EX20 実際のところ、インライン化されて更に他の最適化とコンボが起こったりすると
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。
普通の人間にはどうなるか予測がつかんので考えるだけ無駄。
254デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 11:15:06.66ID:c/F3wcvdM >>252
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ
このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい
なんで呼び出し側の話がはいってくるんだよ
そっちの話を含めるとしても
呼び出し側もレジスタのまま処理が行われるのが普通だし、
メモリに書き出されるとしても、
参照と同程度になるってだけ
このABIを理解するのはc/c++使う上で基本
無意味と思うのは結構だがそれはお前の関心がないってだけ
レスしなけりゃいい
255デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 12:11:07.39ID:uRta3OIBM intの場合は速度差は特に考慮しなくて良いんですねありがとうございます
それと、関数内でOpenCVで画像をゴニョゴニョして、結果の画像をリターンしたい場合は、どちらが良いのですかね?
特にメモリリークを起こしたくない(今現在起きてるので改善したい)ので、もし何か重大な違いがあるなら知りたいです
void hoge(cv::Mat x, cv::Mat ret){
ret = x + cv::Scalar(100);
}
cv::Mat hoge(cv::Mat x){
return x + cv::Scalar(100);
}
それと、関数内でOpenCVで画像をゴニョゴニョして、結果の画像をリターンしたい場合は、どちらが良いのですかね?
特にメモリリークを起こしたくない(今現在起きてるので改善したい)ので、もし何か重大な違いがあるなら知りたいです
void hoge(cv::Mat x, cv::Mat ret){
ret = x + cv::Scalar(100);
}
cv::Mat hoge(cv::Mat x){
return x + cv::Scalar(100);
}
256はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 13:28:43.07ID:IzfX8EX20 >>254
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。
多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。
呼出し側の状況によっても変わりうるから呼出しの状況を含めるってのがそんなにおかしな話かね。
あと、あくまでもこれは C++ という言語を中心にした一般原則としてどうコンパイルされることも「有りうる」ということを述べているのであって、
特定のアーキテクチャやコンパイラや ABI を想定したものではないよ。
多くの (あるいは主要な) 処理系であなたが言うような結果になるというなら、
それはそうかもしれないが、そこには単に私の関心がないのも確か。
257はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 13:34:38.93ID:IzfX8EX20 >>255
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?
前者のコードの cv::Mat ret は cv::Mat& ret の間違い?
258デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 13:53:20.00ID:c/F3wcvdM >>256
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ
それはお前の間違った理解であって一般とは言わない
だいたい呼び出し側も含めて反論されてんのになにぼけたレスしてんだよ
お前の理屈だとレジスタの返しが無用となるじゃないか
x64ならraxでaarch64ならx0で返り値を返す
32bitのレガシーならいざしらず64bitでもabiはそう決められてるわけ
お前の興味のない低いレイヤーではそういうのを最大限活用して効率的にcpu回してんだよ
259はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:06:16.01ID:IzfX8EX20260デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 14:09:29.47ID:c/F3wcvdM262はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:27:25.26ID:IzfX8EX20 >>255
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。
ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。
一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。
ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?
前者については & の脱字だと仮定して答えるけど、
その脱字が無ければ、前者でも後者でも最終的な結果に差はないと思う。
特にメモリリークにつながりそうな要素もない。
ただ、単純に、局所的に考えるならば後者の方が効率的と言えると思う。
前者だと呼出し側では結果を受け取るための cv::Mat 型の変数を用意しなければならないが、
そのときにデフォルトコンストラクタが走ってから結果は operator= で格納するという形になる。
後者だとコピーコンストラクタ一発で済むので簡単。 場合によっては RVO が適用されるかもしれない。
一度作った変数を何度も結果格納用に使いまわすのならば、
前者の方がメモリアロケーションの回数を抑制できる (効率的になる) 可能性も有るけど、
Mat の実装次第ではそうならないかもしれないし、
そこらへんは実際にやってみないとわからない。
ところでメモリリークが起きていると判断したのは何かツールを使って検証したの?
263はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 14:31:00.99ID:IzfX8EX20264デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 18:25:26.14ID:c/F3wcvdM >>263
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし
ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ
関数内の最適化のみで考えればいいだけなんだからきりはあるだろ
つまりインライン展開なし、LOTなし
ABIを意識するのは全然特殊じゃない
言語間のよびだしはざらだし、
クラッシュダンプにスタックトレース残すためにあえてインライン抑制したりする
お前が経験不足なだけだよ
265はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 966f-7GfT)
2018/09/06(木) 18:41:01.02ID:IzfX8EX20 >>264
そっちの脳内でどんな前提を置いてるかなんて知らんがな。
そっちの脳内でどんな前提を置いてるかなんて知らんがな。
266デフォルトの名無しさん (ブーイモ MM97-M35H)
2018/09/06(木) 19:48:52.61ID:c/F3wcvdM >>265
コテハンの割に薄いやつだ
もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない
それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ
このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ
コテハンの割に薄いやつだ
もとの質問は関数から値の返し方についてどちらが速いかという質問なんだから、
関数のインライン展開がないと仮定すれば、定性的に答えられる問いだ
かつその仮定は別に現実ばなれしてるわけでもない
それをお前はその知識が有用であることも知らずに考えるだけ無駄とかぶったぎってるわけだ
このスレは相談室
無駄なのはそういうお前の存在ではとおれは思うわけ
267デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/06(木) 20:12:24.70ID:64ZwjQvb0 malloc()したヒープはfree()解放するのは当然
ウンコしたあと水で流さないぐらい行儀が悪い
ウンコしたあと水で流さないぐらい行儀が悪い
268デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 20:23:27.14ID:itCyrIVk0 メモリーリークは基本的に自分でNEWすることで起こる。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。
そういう作法でやると、ユーザーコードでnewすることはほぼない。
最近のC++では基本的に自分でNEWすることはほとんどない。
動的なメモリが欲しければvectorを使う。
後は、ポインタにインスタンスを確保しないで関数に投げるとかもやってはいけない。メモリを破壊することになる。
あと、どうしてもnewが必要だったりGCが必要な時はスマポを使う。
そういう作法でやると、ユーザーコードでnewすることはほぼない。
269デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 20:47:20.81ID:itCyrIVk0 えーっと、関数にポインタを投げる時はその関数の仕様を精査して扱わないとほんとやばい。
270デフォルトの名無しさん (ワッチョイ ba34-uOrU)
2018/09/06(木) 21:04:04.33ID:bw6Oo6uj0 newとdeleteを使いこなせない補助輪付C++グラマってのも問題だけど
271デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:10:02.71ID:iyjSCMca0 スマポはGCじゃねえよ ぼけ
272デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:14:09.31ID:itCyrIVk0 shared_pointerは参照カウントっていうGC機構ですよ?
273デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:17:21.85ID:itCyrIVk0274デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:18:00.66ID:itCyrIVk0275デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:18:22.90ID:iyjSCMca0 CGってそもそも何だ?
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ
アプリが「今、解放しろ」というタイミングで動くのをGCというならfreeもGCだぞ
276デフォルトの名無しさん (ワッチョイ 8b80-f65Y)
2018/09/06(木) 21:20:24.16ID:64ZwjQvb0 いつ解放されるか分からないとか
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ
そもそもオブジェクトの外部でポインタの生存期間を制御できてないコードがヤバイわ
277デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:24:58.09ID:itCyrIVk0 >>275
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?
そういう、広義解釈は話題が滅茶苦茶になるのでやめましょう。
GCはガベージコレクションだよ。freeは解放関数だよ。
シェアードポインターの解放タイミングは普通コントールしないのでGCだと思ってます。
というか、開放タイミングが未定だからシェアードポインタ使うんじゃないですか?
278デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:27:59.96ID:itCyrIVk0 それは全能でないとバグが出ちゃうのでこういう機構が発明されました。
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?
書くときは大まかには寿命は把握しているとは思うのですが、細部までは精査しないことが多いんじゃないでしょうか。
自分のクローンに共有オブジェクトを持たせるときとか普通に書くと滅茶苦茶大変ですよ?
279デフォルトの名無しさん (ワッチョイ 9a22-7GfT)
2018/09/06(木) 21:37:24.49ID:iyjSCMca0280デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:38:17.39ID:itCyrIVk0281デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:41:02.92ID:itCyrIVk0 >>279
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?
複数の共有がある場合、一個のデストラクタが走った程度では解放されませんよ?
freeは別にデストラクタに仕込む必要ないじゃないですか。
それと、複数の共有がある場合適切にfreeできますか?
282デフォルトの名無しさん (ブーイモ MM97-A2Qj)
2018/09/06(木) 21:42:45.15ID:JT+LXegNM コレクションしてないのになんでgcなんだよ。アホすぎる
283デフォルトの名無しさん (ワッチョイ ba34-uOrU)
2018/09/06(木) 21:43:23.10ID:bw6Oo6uj0 シェアードはマルチタスクには不向きだし
284デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:49:40.12ID:itCyrIVk0 コレクションサイズが1のコンテナはないのですね。まぁ、冗談は置いといて。
物事を知ってるなら後は任せました。無知でごめんなさい。
物事を知ってるなら後は任せました。無知でごめんなさい。
285デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 21:51:04.10ID:itCyrIVk0 >>272
参照カウンタは普通GCに含めないのでは?
参照カウンタは普通GCに含めないのでは?
287デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:02:22.60ID:itCyrIVk0 https://ja.wikipedia.org/wiki/参照カウント
こういう記事を見つけました。
こういう記事を見つけました。
288デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:04:19.65ID:itCyrIVk0 ホントお前ら人殺すことばっか考えてるよな。
そういうのは良いから初心者殺すのマジやめて。
そういうのは良いから初心者殺すのマジやめて。
289デフォルトの名無しさん (ワッチョイ 27bd-A2Qj)
2018/09/06(木) 22:04:41.28ID:vgkXomJH0 gcの一実装として参照カウンタ方式があるだけで、スマポはgcじゃない。
290デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 22:06:33.66ID:itCyrIVk0 それならそれでいいです。
291デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/06(木) 23:18:28.17ID:8cSq8zHP0292デフォルトの名無しさん (オイコラミネオ MM53-EsDf)
2018/09/06(木) 23:34:23.61ID:3bNAvGWPM293デフォルトの名無しさん (ワッチョイ 5304-eMuy)
2018/09/06(木) 23:34:43.07ID:itCyrIVk0 >>289
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
@参照カウンタが GC、故に、std::shared_ptr も GC
A参照カウンタが GC でない、故に、std::shared_ptr は GC でない
@Aのどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?
私は「参照カウンタは GC じゃない」と思う
スマートポインターのうち std::shared_ptr は参照カウンタを内蔵しているのだから
@参照カウンタが GC、故に、std::shared_ptr も GC
A参照カウンタが GC でない、故に、std::shared_ptr は GC でない
@Aのどちらかしかない
参照カウンタが GC なのにスマートポインタが GC でない、というのは矛盾しているのでは?
私は「参照カウンタは GC じゃない」と思う
295デフォルトの名無しさん (ワッチョイ 13b3-7GfT)
2018/09/06(木) 23:48:27.91ID:8cSq8zHP0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 外務局長「中国さんごめんなさぁ...」小野田「中国なんかどうでもいいっ!」高市「首脳会談したい」マスコミ「立憲が悪いっ!!」 [237216734]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【悲報】日本人「日本が中国と戦争になったら世界中の国が応援してくれるぞ!」 [616817505]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
