[表示 : 全て 最新50 1-99 101- 201- 2chのread.cgiへ]
Update time : 11/29 08:20 / Filesize : 51 KB / Number-of Response : 241
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++14/C++1y



1 名前:デフォルトの名無しさん mailto:sage [2013/10/28(月) 01:00:22.34 ]
The C++ Standards Committee
www.open-std.org/JTC1/SC22/WG21/

Wikipedia
https://en.wikipedia.org/wiki/C%2B%2B14

C++11/C++1y 18
toro.2ch.net/test/read.cgi/tech/1365073520/

45 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 00:50:55.31 ]
>>41
gcc4.8.1ですがエラーになります

>>42
エラーにならないコードを書くと>>38になりました
でも実行結果がおかしいですよね

>>44
違います

moveコンストラクタがいつ動くのかしっかりと把握しないとunique_ptrは怖いですね
楽をするならshared_ptr一本です

46 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 01:10:27.94 ]
エラーになるコードをideoneに貼れば一発でここの住人が直してくれるって言ってるんだよ。
>でも実行結果がおかしいですよね
きちんとソートされているように見えますけれど。
>moveコンストラクタがいつ動くのかしっかりと把握しないとunique_ptrは怖いですね
ちょっと言ってる意味が分からないですね。

47 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 01:27:35.47 ]
>>46
低脳はちょっと黙ってて

48 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 01:37:20.87 ]
gcc4.6.4だと動くな

49 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 01:38:22.51 ]
4.7.3と4.8.2も動くな

50 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 01:39:33.95 ]
必死ww

動かないソースコードも貼ってないのに

51 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 06:34:35.12 ]
意地でもエラーを書かないあたりは釣りなんだろう

52 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 10:47:57.30 ]
お前が書いたコードが糞でFA

53 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 10:50:49.09 ]
遅れましたすみません
私の偽物が現れて荒らしているようで申し訳ありません

これでちゃんと通り、正常に動きました
ありがとうございました

for (int i = 0; i < N; i++)
v.push_back(std::unique_ptr<int>(new int(distribution(twister))));

for (auto& a : v)
std::cout << *a.get() << ' ';
std::cout << std::endl;

std::sort(std::begin(v), std::end(v), [](const std::unique_ptr<int>& u, const std::unique_ptr<int>& v) { return *u.get() < *v.get(); });

for (auto&a : v)
std::cout << *a.get() << ' ';
std::cout << std::endl;



54 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 13:54:32.08 ]
>v.push_back(std::unique_ptr<int>(new int(distribution(twister))));

氏ね

55 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 14:42:05.87 ]
これはひどい

56 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 14:55:03.47 ]
>>54
どこが死ぬに値するのか全然理解できませんが

57 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 18:24:50.74 ]
>>54
何がまずいんだっけ?

58 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 18:55:08.12 ]
デバッグしづらい

59 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 19:28:11.61 ]
複数の実引数の評価順で問題がでる場合と勘違いしてるか
右辺値をとってムーブするpush_backがあることを知らないかだろ

60 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 19:37:32.08 ]
emplace_back使うとか?

61 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 20:16:45.13 ]
敢えて言うならoperator newの後に
distributionが例外をスローすると困る?

62 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 21:00:41.95 ]
その場合は大丈夫でしょ

63 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 22:32:27.25 ]
正解は?



64 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 22:33:23.35 ]
問題ない

65 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:13:12.62 ]
変更に弱い(変更で問題を起こしやすい)コードではあるよな。

66 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:38:13.41 ]
emplace_back()を使うと実行結果がおかしくなるな
なんで?

67 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:42:03.50 ]
まず66のレスが馬鹿っぽいことから
原因は66のおつむにあるとみていいだろう

68 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:43:36.95 ]
>>66
std::cout << std::boolalpha << std::is_sorted(std::begin(v), std::end(v), [](const std::unique_ptr<int>& u, const std::unique_ptr<int>& v) { return *u.get() < *v.get(); }) << std::endl;

これでも付けてみろや

69 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:59:18.15 ]
そもそもintなんかvectorに直接突っ込めばいいだろ
わざわざunique_ptrなんか持ち出すまでもない

70 名前:デフォルトの名無しさん mailto:sage [2013/11/04(月) 23:59:58.20 ]
大丈夫、みんなそう思ったけど敢えて突っ込んでない

71 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 00:35:30.93 ]
いやそこは突っ込みどころじゃないから
>>38
>中に入れるクラスはintとは限りません(簡単のためにintにしてあります)

72 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 00:54:20.47 ]
>>69
>>38

>中に入れるクラスはintとは限りません(簡単のためにintにしてあります)

73 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 01:21:16.39 ]
emplace_backの使い方は合ってるのか?
何書いてるのか知らんけど



74 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 08:20:00.66 ]
emlace_backはクラスにmoveコンストラクタが書いてないとコンパイル時にエラーになるな

75 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 09:00:38.12 ]
普通のコンストラクタだけで大丈夫だろ

76 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 15:51:03.57 ]
stackoverflow.com/questions/4303513/push-back-vs-emplace-back

右辺値参照してるのに通るんかい

77 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 19:50:58.39 ]
emplace_backの&&はテンプレートパラメータに対しての指定だから右辺値参照と確定するわけじゃない
universal referenceでぐぐれ

78 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:11:06.59 ]
右辺値参照、時々なんとなく分かった気になるけど、暫くしてよく考え直してみると
分かった気がしただけでやっぱりイマイチよく分かってないことに気付く。死にたいorz

79 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:29:50.06 ]
詰まるところpush_back()とemplace_back()の違いは何よ

いや

d.hatena.ne.jp/faith_and_brave/20080930/1222768173

こういう所に答えは書いてあるけどさ
いまいちピンと来ない

80 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:33:10.05 ]
思い切り重いクラスでもvectorに入れて速度比較してメリットを実感するしか方法はなさそうだ

universal reference 初めて聞いたわ
というかプログラミング言語C++11の日本語訳まだ出ないのか
英語版は持ってるけど目がチカチカする
ISO/IECもあるけど

81 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:37:36.95 ]
日本語が欲しいなら江添さん()のオナニー書がオヌヌメ。

82 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:37:39.89 ]
参照の縮約?

83 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:39:16.27 ]
>>81
C++11本書くから寄付くれって言ってた人?
有耶無耶にして逃げるのかと思ってたら、無事完成したのかw



84 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:41:17.44 ]
>>83
書きかけで公開したようだ

85 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 20:52:53.78 ]
>>84
なるほど、事実だけを端的に表現すると「完成はしなかった」ということかw

86 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 22:01:44.75 ]
ラストスパート中。まもなく一応の完成となる、と本人は言ってる。

87 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 22:14:37.21 ]
途中まで読んだんだけど、ひたすら規格書の仕様を
呪文のごとく垂れ流ししてるようなつまらなさ。
規格を読んでれば知ってることばかりだし
Exceptional C++とか禿本のように
読んでwktkするものではない。

88 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 22:24:20.04 ]
>>86
コア言語だけは完成、な
ライブラリは執筆の目途すら経ってないらしい

89 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 22:27:01.58 ]
そんだけのものでも、これページ数にしたら結構なもんやで

90 名前:デフォルトの名無しさん mailto:sage [2013/11/05(火) 22:51:11.87 ]
>>87
いやそれでいいんだ
画面で見るのと本で読むのとではなぜか全然違う

91 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 00:16:50.51 ]
もともと日本語で読める標準C++(11)の規格の解説を書くというテーマだからそういうもの

92 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 01:46:49.72 ]
JISの事か
ゴニョ・・・・

93 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 07:17:36.23 ]
universal referenceてスコットメイヤーズの造語だった気がするけど
禿の本にも出てるんだっけ?
規格的にはreference collpasingだとか言ったと思う



94 名前:デフォルトの名無しさん [2013/11/06(水) 10:06:47.95 ]
>>93
collapsing

95 名前:デフォルトの名無しさん mailto:sage [2013/11/06(水) 16:20:04.94 ]
Varidec Templatesの使い所がいまいち分からないんだけど
うまくまとめてあるページない?

96 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 19:03:11.05 ]
型安全なprintfが作れます

97 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 22:00:17.76 ]
iostreamと同じで、真似してはいけない悪い見本ですね

98 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 22:07:37.37 ]
stream << 4 << "番目の素数は" << prime(4) << "です。" << 3.1415926 << "は円周率の近似値です。";

99 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 22:33:00.72 ]
>>95
本質的には引数の数が違うだけのテンプレートを手で書かなくても自動生成してくれるってだけだから

template<class T1> void f(T1 t)
template<class T1, class T2> void f(T1 t1, T2 t2)
template<class T1, class T2, class T3> void f(T1 t1, T2 t2, T3 t3)
...

みたいなコードを書いてたり書きたかったりした場面で使うだけ

100 名前:デフォルトの名無しさん mailto:sage [2013/11/07(木) 23:27:04.00 ]
そんな説明じゃ わからんだろ
正しい使い方の例はstd::threadのコンストラクター

101 名前:デフォルトの名無しさん mailto:sage [2013/11/08(金) 00:21:50.94 ]
03までで型の数の制限無し・・・は無理だから制限のゆるいtupleをどう実装するか考えれば
variadic templateのありがたみと使い所の一つは理解できるでしょ

102 名前:デフォルトの名無しさん mailto:sage [2013/11/08(金) 07:00:33.48 ]
>>100
いやemplace_pushの方だろう

103 名前:デフォルトの名無しさん mailto:sage [2013/11/09(土) 04:59:13.42 ]
このアニメで久しぶりに萌え豚の感覚が蘇った気がする



104 名前:デフォルトの名無しさん mailto:sage [2013/11/09(土) 05:00:13.92 ]
ごめんまちがえた

105 名前:デフォルトの名無しさん mailto:sage [2013/11/09(土) 11:40:28.99 ]
>>104
どこ?紅以外にあるのか?

106 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 15:35:37.68 ]
>>95
std::functionの仕様とかみてみ

107 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 15:52:03.54 ]
14になってもまだ自動委譲搭載されないのかよ
何とかしろよハゲ、残った両サイドの毛も全部引き抜くぞ

108 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 15:58:11.26 ]
>>107
そんな提案あったっけ?

109 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 16:00:02.53 ]
Java使いは身の程知らん癖にC++をJava化しようとするから嫌いだ

110 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 16:01:10.48 ]
>>108
www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1363.htm

111 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 16:05:06.13 ]
>>110
きもいな

112 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 16:14:09.94 ]
>>111
C++がきもいのは今に始まった事じゃないだろ

ともかく、ポインターに対する委譲のために
ひたすら、関数の引数を同じ名前の関数に引き渡すとかやってらんない。
コンセプトマップさんが生きてりゃ似たようなコト出来たんだがな。
惜しい人をなくしたもんだ。

113 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 16:33:28.81 ]
C++のスレ…だよね?



114 名前:デフォルトの名無しさん [2013/11/10(日) 17:33:24.95 ]
「まだ C++ ではないもの」のスレだ

115 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 20:12:45.88 ]
助けてびよーねすっぽすっぽ先生

116 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 20:19:08.29 ]
びょーんすぽすっぽだろ。

117 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 20:24:40.51 ]
自慢じゃねーが英語は分かんねーぞ!
誰か>>110を日本語で説明してくれろ

118 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 20:35:00.09 ]
プログラマのほとんどが英語を理解できない現状では
日本語の参考書は必要

119 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 21:01:05.25 ]
VC++2010のratio_equalとratio_lessがバグってることに気付いた。
2012では直ってる?

120 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 21:01:39.68 ]
std::ratio_equalとstd::ratio_less ね。
念のため

121 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 21:31:43.45 ]
>>117
英語読まんでも
this is new stuff
ってとこから後のコード例だけ見れば何となく分かる

委譲する関数一個ずつ書かされるくらいなら今のままでいいよな
最後の方に提案外だけどpublicメンバーを一括委譲する案も出てるけど
個人的にはたぶんそっちしか使わないと思う
書き方は
inline m_pimpl;
とかの方がいいな、inline namespaceとなんか似てるし

122 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 21:35:07.14 ]
usingはきもいよね = もそうだけど

123 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:06:33.22 ]
>>121
委譲する関数名を書くのはIDEのコード補完が助けてくれそうな気がする。
ただ、usingだと後に続くのがネームスペースなのが委譲関数なのか特定できない気がする。
using以外の新しいキーワード導入してほしい。



124 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:13:59.05 ]
C++は機能が少なすぎる

125 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:14:15.98 ]
>>119
関係ないけどratioはここが美しいなw

typedef ratio<1, (_LONGLONG)1000000000 * 1000000000> atto;
typedef ratio<1, (_LONGLONG)1000000 * 1000000000> femto;
typedef ratio<1, (_LONGLONG)1000 * 1000000000> pico;
typedef ratio<1, 1000000000> nano;
typedef ratio<1, 1000000> micro;
typedef ratio<1, 1000> milli;
typedef ratio<1, 100> centi;
typedef ratio<1, 10> deci;
typedef ratio<10, 1> deca;
typedef ratio<100, 1> hecto;
typedef ratio<1000, 1> kilo;
typedef ratio<1000000, 1> mega;
typedef ratio<1000000000, 1> giga;
typedef ratio<(_LONGLONG)1000 * 1000000000, 1> tera;
typedef ratio<(_LONGLONG)1000000 * 1000000000, 1> peta;
typedef ratio<(_LONGLONG)1000000000 * 1000000000, 1> exa;

126 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:18:57.79 ]
>>125
ソースが巨大AAというのも探せばありそうだなw

127 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:24:55.62 ]
ラムダ式の型を取得できないのは知ってたけど以下のコードの2)もダメなんだな。

 auto lamda1 = [](int a) { return (a * 2) << 2; };
 auto lamda2 = [](int a) { return (a * 2) << 2; };
 lamda1 = lamda1; // 1)
 lamda1 = lamda2; // 2)

1)はOK

128 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:26:43.93 ]
型が違うんだからそりゃそうだろ

129 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:31:09.54 ]
>>125
#if で囲まれてるところも余さず引用しなきゃw

typedef ratio<1, (_LONGLONG)1000000 * 1000000000 * 1000000000> yocto;
typedef ratio<1, (_LONGLONG)1000 * 1000000000 * 1000000000> zepto;
typedef ratio<1, (_LONGLONG)1000000000 * 1000000000> atto;
typedef ratio<1, (_LONGLONG)1000000 * 1000000000> femto;
typedef ratio<1, (_LONGLONG)1000 * 1000000000> pico;
typedef ratio<1, 1000000000> nano;
typedef ratio<1, 1000000> micro;
typedef ratio<1, 1000> milli;
typedef ratio<1, 100> centi;
typedef ratio<1, 10> deci;
typedef ratio<10, 1> deca;
typedef ratio<100, 1> hecto;
typedef ratio<1000, 1> kilo;
typedef ratio<1000000, 1> mega;
typedef ratio<1000000000, 1> giga;
typedef ratio<(_LONGLONG)1000 * 1000000000, 1> tera;
typedef ratio<(_LONGLONG)1000000 * 1000000000, 1> peta;
typedef ratio<(_LONGLONG)1000000000 * 1000000000, 1> exa;
typedef ratio<(_LONGLONG)1000 * 1000000000 * 1000000000, 1> zetta;
typedef ratio<(_LONGLONG)1000000 * 1000000000 * 1000000000, 1> yotta;

130 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:39:01.24 ]
>>128
メンバにラムダを持つクラスが作れないってことか

131 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:40:55.44 ]
>>130
つ function

132 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:46:06.47 ]
EffectiveC++14はよ

133 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:49:47.26 ]
>>132
おっと、それはVC++がC++11対応を終えるまで待っていただこう



134 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:51:10.60 ]
一生でないな

135 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 22:58:58.72 ]
>>131
重いよー

136 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:25:06.08 ]
C++のどこを指して機能が少なすぎると言ってるのか全く理解出来ないが
(OSのエントリポイントをコードできないという意味か?)
C++は最高の柔軟性を持っている。アセンブラを除けば他の言語に出来て
C++に出来ない事は存在しない

137 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:29:29.85 ]
標準ライブラリが少ないというのには同意する

138 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:37:58.19 ]
他の言語がありすぎな気も

139 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:43:02.49 ]
boostさんがいれば大概のことはなんとかなる

140 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:56:02.18 ]
>>136
>>127

141 名前:デフォルトの名無しさん mailto:sage [2013/11/10(日) 23:57:21.87 ]
>>140
記述方式と言語の能力をごっちゃにしてる当たり「高級」言語しか使えないの丸見え

142 名前:デフォルトの名無しさん [2013/11/11(月) 00:11:14.72 ]
127 は型が「違う」のではなく「同じである保証がない」
つまりは「同じであることに依存してはならない」ということだ

C++ の元来のポリシーからして複数の typedef や typename が
たまたま同じなら通るわけで、127 が NG なのは唐突な印象だが

143 名前:デフォルトの名無しさん mailto:sage [2013/11/11(月) 00:12:16.57 ]
委譲の話、データメンバーのinline指定で委譲になって
usingで選択、とかならいいな
んでusing指定はdecrarator-idだけ指定すればOKで
必要ならdeclarator全体書けば特定のoverloadが指定できるとか
class A {
void f();
void f(int);
void g();
void g() const;
};
class B {
inline A impl using { f(int), g };
};
とか

まあ、そんな大きくコア言語いじるほど欲しい機能じゃないけど…

>>123
IDEに任せるなら今でもやろうと思えば可能なような
あとn1363のはusing identifier { }だけど、名前空間でそんなのあるっけ?

>>122
n1363の別名定義は=の左右の向きが受け入れがたいよね



144 名前:デフォルトの名無しさん mailto:sage [2013/11/11(月) 00:16:18.11 ]
VLAISとかgccが独自拡張してるのを追ってったらなんぼでもあるだろ
古い言語でもPascalの関数内関数と同じ機械語パターンはC++のラムダじゃ吐けないが

145 名前:デフォルトの名無しさん [2013/11/11(月) 00:17:40.35 ]
gccはデファクトスタンダードなのでgccの拡張を取り込んでいない
標準規格のほうが規格違反。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<51KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef