C++相談室 part134

■ このスレッドは過去ログ倉庫に格納されています
2018/01/20(土) 09:05:42.21ID:mJKRg6iz0
次スレを立てる時は本文の1行目に以下を追加して下さい。
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part133
http://mevius.5ch.net/test/read.cgi/tech/1511509970/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.102【環境依存OK】
http://mevius.5ch.net/test/read.cgi/tech/1509780815/

■長いソースを貼るときはここへ。■
 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
2018/03/06(火) 23:43:09.96ID:ey0B6I8l0
>>452
範囲の数学的な書き方、半開区間とかなんとか
それだとfirst以上last未満の範囲、ということ
2018/03/06(火) 23:47:04.41ID:MSLc23us0
https://ttsuki.github.io/styleguide/cppguide.ja.html#Forward_Declarations
前方宣言ってしたほうがいいのか、しないほうがいいのかどっちなんですかね
456デフォルトの名無しさん (アウアウウー Sa2b-wl/W)
垢版 |
2018/03/06(火) 23:50:38.84ID:pZOZvbRza
>>453,454 数学でしたか!勉強になります。
2018/03/07(水) 00:29:35.52ID:+JS1hm360
mutex g_Mtx;

int g_Val = 0;

int Func( int A, int B )
{
  int Val = A * B;

  lock_guard<mutex> Lock( g_Mtx );

  return g_Val = Val;
}

void ThreadFunc0()
{
  int Val = Func( 2, 3 );

  // Valを参照する処理
}

void ThreadFunc1()
{
  lock_guard<mutex> Lock( g_Mtx );

  // g_Valを参照する処理
}

上記のようなスレッド関数が非同期に実行されるとき、
Func()はスレッドセーフ(g_Val書き換え中に参照されない)でしょうか?

(1)lock_guard<mutex>によるミューテックスロック
(2)g_Valの書き換え
(3)戻り値を呼び出し元スレッドにコピー(あるいはムーブ)
(4)lock_guard<mutex>がスコープから外れアンロック

というシーケンスを期待しています。
2018/03/07(水) 00:29:47.60ID:6+ILModc0
endならともかくlastは区間内の最後の要素なんじゃ…
459デフォルトの名無しさん (アウアウウー Sa2b-m1UI)
垢版 |
2018/03/07(水) 10:09:55.97ID:ukyKg6LAa
基本的な質問なのですが、以下のプログラムがエラーになるのはなぜでしょうか?


char* pc = "abc";
pc[0] = 'z';
cout << pc << endl;

以下のプログラムでは意図通りに動きます。

char ac[] = { 'a', 'b', 'c', '\0' };
cout << ac << endl;
ac[0] = 'z';
cout << ac << endl;
2018/03/07(水) 10:14:51.80ID:TWOfgg7C0
>>459
上は変数 pc はリテラル文字列の先頭を指すポインタ。
下の変数 ac は配列で、それを文字列 "abc" で初期化するって意味。

リテラルの破壊は未定義。
破壊しないことをあてにして破壊不可能なセクション (メモリ領域) に配置されたりすることもあるので、アクセスエラーが生じる。
あくまで未定義だから出来ちゃうこともあるし、コンパイラオプションで制御できたりもするけど、基本的にはあかんやつ。
2018/03/07(水) 10:30:06.22ID:ylRgY7un0
>>458
仮引数名をendにすると関数名のendと紛らわしいからだよ
説明の文中にendが出てくる度毎にいちいち仮引数か関数か断るハメになる
2018/03/07(水) 10:35:31.71ID:ukyKg6LAa
>>460

ありがとうございました。

Pythonでimmutableとかいうのがありますが、それでしょうか?
2018/03/07(水) 11:10:02.03ID:ukyKg6LAa
すみません、また、ベーシックな質問です。

char* pc1 = 1; → エラー
char* pc2 = NULL; → OK
char* pc3 = 0; → OK

なぜ、2番目と3番目はOKなのでしょうか?

char* pc1 = 1;

がエラーになるのは、 int 型の値で char* 型の変数を初期化できないからだとすれば、

char* pc3 = 0;

もエラーになると考えることもできると思います。
2018/03/07(水) 11:10:26.68ID:TWOfgg7C0
>>462
Python なんか知らんがな。
Python の immutable は Python の immutable であって、それが C++ の何物かであったりはしないよ。
C++ のリテラルを破壊した結果は未定義というのは C++ のリテラルを破壊した結果は未定義という規則であるだけ。
似て感じられたとしても一対一に対応付くような単純なものではないので、
背景にあるメカニズムを理解せずに翻訳して理解しようとするような方法はお勧めできない。
2018/03/07(水) 11:14:31.86ID:ukyKg6LAa
>>464

なるほど、そういう規則だからリテラルを破壊しようとするとコンパイルエラーにするわけですね。

ありがとうございました。
2018/03/07(水) 11:22:08.82ID:TWOfgg7C0
>>465
書き忘れてたけど、 C++ の文字列リテラルの型は const char[] なので、
const 付きでないポインタに渡すと単純に型が合わなくてエラーになるはず。
C だと型に const が付いてないのに破壊するのは未定義ってことになっててあまりにもクソだったから改められた。
2018/03/07(水) 11:32:07.41ID:TWOfgg7C0
>>463
0 はポインタに型変換可能で、型変換した結果が空ポインタと等しいことが保証されてる特別な存在。
(ビットパターンが等しいとは限らないことには注意が必要。)

互換であることが保証されているので、処理系によっては
#define NULL 0
として定義していることもある。

余談だが、これはオーバーロードされた関数でうっかりしやすいので気を付けた方がいい。
たとえば関数 foo が以下のような型でオーバーロードされている場合、

void foo(int);
void foo(int*);

これを

foo(NULL)

と呼び出すと void foo(int) が呼び出されたりする。
今ではヌルポインタを表すキーワード nullptr が用意されたので、
NULL はあまり使わない方が良い。
2018/03/07(水) 12:03:25.28ID:ukyKg6LAa
>>466-467

ありがとうございました。

>>466

Visual Stuidoを使っていますが、以下でエラーは発生しませんでした。

char* pc = "abc";
cout << pc << endl;
2018/03/07(水) 12:29:38.25ID:ylRgY7un0
>>468
それはISO/IEC14882:1998の4.2で許されていたことに由来する
その後ISO/IEC14882:2011のC.1.1で廃止されたが
古いソースを通すために故意に違反状態のままにしている
2018/03/07(水) 16:15:14.65ID:nnB4Kxzea
c++の規約に違反にしないためには一度変数に代入する必要があるという事?
2018/03/07(水) 16:24:01.54ID:TWOfgg7C0
オプションで指定できるんじゃね?
俺は GCC を使ってるから知らんけど。
2018/03/07(水) 16:29:51.37ID:ylRgY7un0
違う

char const* cc;
cc = "abc"; //完全に合法

char* pc;
pc = cc; //不適格
pc = "abc"; //CとC++98では非推奨、C++11以後では不適格

pc = &"abc"[0]; //左辺値変形でこう解釈されていて
非constへのポインタに、constへのポインタを代入することになり、
暗黙のconst外しにあたるので、C++11が正論

pc = const_cast<char*>("abc"); //C++11以後ではこう書く
473デフォルトの名無しさん
垢版 |
2018/03/07(水) 17:54:06.02
>>472
それもだめじゃね?
const領域に非constでアクセスするなんて罪深いことなんだから、ちゃんと別領域にコピーしてから扱わないと。
2018/03/07(水) 18:18:25.20ID:TnxtYBSc0
>>459
>char* pc = "abc";
文字列リテラルは不変だから、const を付けないといけない

古いライブラリで、const を付けていないものを動作させるために(互換性)、
例外的に使う場合だけに許される

>>463
>char* pc3 = 0; → OK
この0 は、数値型の0じゃない。
予約語を増やすのが嫌だから、= 0 と書いたら、特別な意味に解釈する。
分かりにくい、クソ仕様

virtual func( ) = 0;
これも、そう。
純粋仮想関数という特別な意味を表す
2018/03/07(水) 18:49:53.33ID:TWOfgg7C0
>>473
書き込まなければ問題は無い。
が、 const 外しが必要な状態ってのが良くないことは確か。
2018/03/07(水) 20:52:49.95ID:ylRgY7un0
>>474
いいや数値型の0だ
翻訳時に0と確定できる汎整数型の定数に限り
ポインタに暗黙変換できるという特例になっている
純粋仮想関数と関連付ける条項はない
2018/03/07(水) 22:07:54.67ID:eXkgxxlqd
純粋仮想関数と関連付けてはいないだろう
それはともかくとして

char * p = 7-7; // no error

class T {
virtual void f() = 7-7; // error
};

となる気がするので言ってることは合ってるか
2018/03/07(水) 22:10:57.06ID:NKcGF/Sn0
C言語でNULLが0をdefineしたものだったというだけだろ
2018/03/07(水) 22:12:59.22ID:eXkgxxlqd
C言語では ((void*)0) だった気がする
2018/03/07(水) 22:34:03.79ID:ylRgY7un0
>>477
7-7は定数式なので0と完全に等価
純粋仮想関数の = 0 はA.8のpure-specifierで=0という特定のスペルと規定されているので7-7がエラーになるのは当然
2018/03/07(水) 22:41:42.97ID:eXkgxxlqd
いや疑問も呈していないし否定しているわけでもないのに当然と言われてもな…
2018/03/07(水) 22:52:11.20ID:ylRgY7un0
じゃあ何のために、7-7とか言い出したんだ?
2018/03/07(水) 23:02:40.75ID:TWOfgg7C0
>>479
それはあかん。
ひょっとしたら古い処理系でやってるのはあるかもしれんが、
規格違反のはず。
2018/03/07(水) 23:12:03.15ID:TWOfgg7C0
>>483
と、思って調べてたんだけど、 C++ だと確実にあかんようだけど C だとアリなのかもしれない。
2018/03/07(水) 23:58:27.20ID:/Jrz1mw60
offsetof()がどう実装されているかやね
2018/03/08(木) 02:18:11.16ID:BQ11IIJi0
>>476-477
C++14 からリテラルだけに限定されてるよ。
http://d.hatena.ne.jp/yohhoy/20140305/p1
2018/03/08(木) 03:31:21.90ID:+04GXVK30
おっ、こんな基本的なことで変更が入ってたのか。
でも当然といえば当然の処置よな。
2018/03/08(木) 06:41:46.04ID:DSeYC6Qd0
Cの無意味な汚いゴミが掃除されるのは良いことだ
2018/03/08(木) 07:33:41.79ID:dmEui5aT0
>>484
しっかりして
流石にこの件では C と C++ 混同されたら対話が成り立たないよ
2018/03/08(木) 18:35:02.35ID:uuOHCrug0
C++の勉強+機械学習も勉強しようとVisual Studio 2017でtiny-dnnを用いたいのですが、tiny-dnn内でコンパイルエラーが発生します。
具体的にはxcontainer.hpp内でC3203というエラーが頻発したり、feedfoward_layer.hppではC2760というエラーが発生したりしています。

環境はWindows 7でVisual Studio 2017 communityです。
プロジェクトはwindowsデスクトップアプリケーションを用いています。
tiny-dnnのインクルードはプロパティのインクルードディレクトリに追加しています。

どなたか心当たりのある方がいらっしゃれば教えていただけると嬉しいです。
2018/03/08(木) 19:27:19.96ID:i2S5Knpdd
linux windows両対応のコードを考えている最中の質問です
unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
y[0]から順にxの先頭ビットに入れたいのだけど
そういう時はどのようなコードになるのでしょうか
符号の問題で単純に24bitシフト+16bitシフト...みたいなことをすると期待の値にならないときが存在してます
2018/03/08(木) 19:50:56.79ID:2k5PL6f/a
unionでどう?
2018/03/08(木) 20:26:39.82ID:FhiFltVyd
>>491
シフトする前にunsigned charにキャストする
2018/03/08(木) 20:29:17.36ID:FhiFltVyd
参考
https://stackoverflow.com/questions/2437283/c-c-packing-signed-char-into-int
2018/03/08(木) 22:47:08.29ID:+04GXVK30
>>489
スマソ
2018/03/09(金) 11:50:12.37ID:XHk1xHdH0
ヘッダーファイルの関数定義から関数ポインタをtypedefする事は可能ですか?
C++98辺りのコンパイラです。
2018/03/09(金) 12:25:38.00ID:nl8HCt1x0
>>496
昔の C++ には decltype が無いもんな。
出来ないと思うよ。
2018/03/09(金) 12:57:58.47ID:zqzgOSq4d
テンプレート使えないかな?
2018/03/09(金) 13:06:17.52ID:XHk1xHdH0
出来ませんか。ありがとう。
再定義が面倒だったので楽したいだけだったんですけどね。
2018/03/09(金) 13:35:32.12ID:nl8HCt1x0
>>498
その手があったか。
でも C++98 で自動で推論させようとするとヘルパー関数を使う必要があるじゃろ。
意味のないオブジェクト生成 (最適化で消えるかもしれんけど) がださい感じはするよね。
2018/03/09(金) 19:06:34.98ID:CekgNpjOM
>>496
たくさんあるなら

> ヘッダーファイルの関数定義から関数ポインタをtypedefする

コードを生成するツールを作るとか
502デフォルトの名無しさん
垢版 |
2018/03/09(金) 22:17:46.30
>>496
マクロ駆使すれば

TYPEDEF_FUNC_DECL(なんちゃら);
FUNC_DEF(かんちゃら)
{
return;
}

みたいな書き方できないのかな?

なんちゃらは識別名と戻り値と引数
かんちゃらは識別名を指定するイメージ
503デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)
垢版 |
2018/03/09(金) 23:46:50.00ID:yn7GHiyb0
>>491
unsigned int x;
char y[4];

.
.
.

memcpy(&x, y, 4);
2018/03/09(金) 23:57:54.33ID:5+PoAx/E0
>>491
xの先頭ビットとはMSBなのかLSBなのか
2018/03/10(土) 00:45:01.61ID:8ENKFfsbd
メモリ上でのレイアウトとかもあるのでuint8_t経由でのシフトがいい
クロックが(メモリアクセスが問題にならない程)低くてシフトが遅いマイクロプロセッサは別
506デフォルトの名無しさん
垢版 |
2018/03/10(土) 04:49:25.72
>>503
x = ntohl(x);
も忘れずに
2018/03/10(土) 06:32:30.15ID:Tg3hDFxK0
>>491
先頭ビットって32ビット目のことか?
508デフォルトの名無しさん (ワッチョイ 0b9f-RK0z)
垢版 |
2018/03/10(土) 17:21:32.19ID:a2p+alti0
>>506
それが必要になるかどうかは場合による。
2018/03/10(土) 17:42:35.32ID:+Ww908Qw0
ネットワークバイトオーダーがここで関係あるのだろうか?
510デフォルトの名無しさん
垢版 |
2018/03/10(土) 19:22:25.29
>unsigned int型の変数xの32bitに、char型の配列y[4]の8bit×4を当て込みたいです
>y[0]から順に

っていう要件だから、ホストバイトオーダーがビッグエンディアンかリトルエンディアンか分からない以上は常にntohlを付けるべき
511デフォルトの名無しさん
垢版 |
2018/03/10(土) 19:24:15.74
char y[4] = { 0x12, 0x34, 0x56, 0x78 };
unsignd in x = 0x12345678;
これを等価にしたいという意味だろうから。
2018/03/10(土) 21:52:35.38ID:My21AM/A0
独習c++終わりそうなんだが次によむべき本とかある?
2018/03/10(土) 22:03:20.54ID:+Ww908Qw0
>>512
https://mevius.5ch.net/test/read.cgi/tech/1493844476/312
あと STL の教科書、これもC++11以前のもの
https://www.amazon.co.jp/dp/4881357786/
2018/03/10(土) 22:09:22.02ID:Tk41qGXE0
本ばかり読まず実践しよう
2018/03/10(土) 22:09:43.95ID:lWictyCS0
>>512
cpprefjp
2018/03/10(土) 22:28:49.18ID:tBgkA+tH0
プログラミング言語C++とかどうやろ
2018/03/10(土) 22:50:35.99ID:My21AM/A0
ありがとうございます
ひとまず>>513の本にしてみます
2018/03/11(日) 00:41:56.08ID:6KlfnVLZ0
そういえば最新版のEffective STLみたいな本って無いのか?
2018/03/11(日) 00:53:03.16ID:Bd/2u4u/0
あると思うが訳者がへたくそで右辺値左辺値あたり意味ワカランかったぞ
2018/03/11(日) 00:57:27.74ID:Bd/2u4u/0
その辺りの参考にするなら下手な日本語文献探るよりか英文そのまま読んだ方がいい希ガス
なんでもかんでも日本語訳してあるとほんと意味ワカランから
2018/03/11(日) 01:11:03.65ID:n48SUKtd0
cpprefjpのstd::min_elementとstd::max_elementの例文が間違ってるので誰か直してください。
自分はGitHubのアカウント持ってないので編集できません。

https://cpprefjp.github.io/reference/algorithm/min_element.html
https://cpprefjp.github.io/reference/algorithm/max_element.html

誤:return a > b;
正:return a < b;
522デフォルトの名無しさん (ワッチョイ 0b9f-uQtz)
垢版 |
2018/03/11(日) 01:22:57.30ID:ry5KQfC80
unsigned int x;
char y[4];

.
.
.

x = ((y[0] & 0xff) << 24) | ((y[1] & 0xff) << 16) | ((y[2] & 0xff) << 8) | (y[3] & 0xff);
2018/03/11(日) 01:34:50.04ID:P1lOCLpn0
Scott Meyers

Effective C++ 第3版 (ADDISON-WESLEY PROFESSIONAL COMPUTI)、2014
Effective Modern C++ ―C++11/14プログラムを進化させる42項目、2015

Effective C++ は、昔の本のリバイバルかな?
内容が新しいかどうかまでは、分からないけど
2018/03/11(日) 08:34:37.66ID:XWEx9Mlwd
テンプレートを使ったメタプログラムの有用性が分からん。コンパイル時処理で定数の階乗を計算してるけど実行時に値を変えれないなら、答えをベタ書きすればいいだけでは?
2018/03/11(日) 08:43:14.65ID:zMqNV6vza
その値をベタ書きする手間をコンパイラにまかせることが出来るのが利点だと思うよ。
2018/03/11(日) 08:48:18.87ID:XWEx9Mlwd
3の階乗を、tmpするより6とタイプした方が早いだろ
2018/03/11(日) 09:03:15.99ID:6KlfnVLZ0
>>526
3ならいいけど10の階乗は?15の階乗は?21の階乗は?
それは整数型で表現できるか?
それは何桁になるのか?
適切な型をどうやって選ぶのか?
その値を静的な配列のサイズにしたいが数値を変えるたびに電卓で計算はしたくない
ならばfactorial<N>::valueと表現できれば便利ではないか
ということ
528デフォルトの名無しさん (ワッチョイ fb7f-uQtz)
垢版 |
2018/03/11(日) 09:03:17.33ID:0BygLdlM0
その3という数値が別のファイルの特定の値に依存してる場合もあるし
2018/03/11(日) 09:08:13.99ID:6KlfnVLZ0
意地悪するのはこの辺にしておいて
それはメタプログラミングでこいういうこともできるよ程度のものにすぎない
テンプレートメタプログラミングとはテンプレートを使ってソースコードを生成することだ
ソースコードを作るためのプログラミングだと思ってくれてかまわない
一般的な目的としてはジェネリックプログラミングを実現するために使われる
標準ライブラリではvectorからchoronoやtupleまでテンプレートメタプログラミングありきの設計になっている
2018/03/11(日) 09:08:56.54ID:zMqNV6vza
値が小さいうちはそうかもしれんが16の階乗とか値が大きくなってもベタ書きが良い?

ちなみにconstexprが使えるc++11以降の話と考えてOK?
2018/03/11(日) 10:19:34.71ID:i1Cv6XBY0
階乗の例はいい例とは言えんな
TMPで操作したいのはメインは型の方だからな
値も出来るよって例が階乗なだけで
2018/03/11(日) 10:40:47.13ID:z1FVyjSJ0
>>529
> ソースコードを作るためのプログラミングだと思ってくれてかまわない
そこまでやるならPL/Iみたいに%FOR %SELECTみたいな普通の制御構文で書ける方がいいわ
2018/03/11(日) 10:50:57.85ID:zMqNV6vza
そんな貴方にtemplate+constexpr(c++14以降)
2018/03/11(日) 10:58:38.38ID:6KlfnVLZ0
>>532
頑張って古代人用のコンパイラ作ってくれ
2018/03/11(日) 11:03:02.47ID:z1FVyjSJ0
>>534
お前アホだろ w
方向性がおかしいって話だぞ
2018/03/11(日) 11:13:25.26ID:6KlfnVLZ0
>>535
現代の言語でジェネリクスをサポートするのは一般的
テンプレートをこねくり回して整数演算をするのはおかしいという意味なら、普通の構文で書けるconstexprが追加されたからそっちを使うように
2018/03/11(日) 11:58:27.43ID:TvwI/h8S0
テンプレートで再帰ができたらナア…('A`)
2018/03/11(日) 12:00:06.04ID:TvwI/h8S0
とわいいつつ、実はC++のテンプレートはチューリング完全になってしまっていた(らしい
ttps://cpplover.blogspot.jp/2013/10/blog-post_20.html
2018/03/11(日) 12:05:49.26ID:93lmuZEGM
>>536
costexprで階乗書いてみてから言えよ
2018/03/11(日) 16:36:05.55ID:i1Cv6XBY0
constexpr unsigned long long factorial(int n){
 unsigned long long r=1;
 for(int i=1;i<=n;++i){r*=i;}
 return r;
}

うん、簡単だね!
2018/03/11(日) 16:41:07.00ID:Bd/2u4u/0
毎回毎回コンパイラが計算するのか
2018/03/11(日) 17:05:53.05ID:6zDmjp+70
たまにソースコードを見て、あ、この数字なんだっけって考えるよりも
10000回コンパイルさせるほうが早いと思うよ
2018/03/11(日) 17:18:40.81ID:Dtt3qpb50
マジックナンバーの本質
2018/03/11(日) 17:51:32.86ID:4ez4tjCrd
>>540
オーバーフローのチェックがないからやり直し。
2018/03/11(日) 18:36:06.03ID:i1Cv6XBY0
はーい

constexpr unsigned long long unsafe_factorial(int n){
 unsigned long long r=1;
 for(int i=1;i<=n;++i){r*=i;}
 return r;
}

constexpr int min_factorialable(){
 for(int i=1;;++i){
  if(unsafe_factorial(i) > unsafe_factorial(i+1)){ return i; }
 }
}

constexpr unsigned long long factorial(int n){
 if (n < 0 || n > min_factorialable()) { return 0; }
 return unsafe_factorial(n);
}
2018/03/11(日) 18:40:21.07ID:i3q5YI3y0
コンパイルエラーになるほうがいいなぁ
2018/03/11(日) 19:45:19.23ID:4ez4tjCrd
static_assert使え。
2018/03/11(日) 20:16:22.23ID:XWEx9Mlwd
>>529
実行時計算で答え算出してそれを貼った方が楽じゃね?
2018/03/11(日) 21:15:39.44ID:ezoYy+fr0
>>548
それで事足りるケースならそれでいいよ
550デフォルトの名無しさん (ワッチョイ fb7f-uQtz)
垢版 |
2018/03/11(日) 21:19:50.46ID:0BygLdlM0
>>548
なんでそんなめんどくさくてミスしそうな方法をチョイスするんだよ
551デフォルトの名無しさん
垢版 |
2018/03/12(月) 01:21:50.18
>>548
計算&書き換え手順をマニュアル化して、何十種類の仕向け別にバージョンアップの度に人海戦術で計算&書き換え&コードレビュー&テストするんですね、わかります
2018/03/12(月) 05:00:24.40ID:kBVT8YZa0
min_factorialable() は、階乗を正しく計算できる最大の値を返す
constexprな関数(コンパイル時にint定数に置き換えられることを期待)、
と読み取ったんだけど、なぜにmin_なの?
553デフォルトの名無しさん
垢版 |
2018/03/12(月) 05:41:37.75
上限を求めるときに使うのはminだから、かな

知らんけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。