オーバーテクノロジー:How to know which functhion is actually called among Overloaded Function set at the Compilation Time?

真夜中に、闇のC++erはおそろしいサバトを開催していたようです…
5
前へ 1 ・・ 5 6
Norihisa Fujita, ぽん @fjnli

std::tuple<int,int>の返り型の関数でreturn {1,2};って書くのは駄目なの…?

2010-06-05 02:06:03
Akso de la Malbono @Cryolite

関数のパラメタや関数の戻り値を braced-init-list で初期化するのは copy-list-initialization で,自分の理解が間違っていなければこれらは直接相手先のコンストラクタを呼ぶので初期化対象が Copyable/Movable でなくて良いはず.

2010-06-05 02:10:04
Norihisa Fujita, ぽん @fjnli

@SubaruG @Cryolite g++ 4.5.0だとエラーになるんです…

2010-06-05 02:10:25
隅須正昭 @nagoya313

なんたらinitializationについてはVC++が対応してから考えることにする。

2010-06-05 02:11:54
隅須正昭 @nagoya313

なんですと!? RT @SubaruG あぁ、そういえば explicit な多引数コンストラクタって意味を持つようになったんだっけか。

2010-06-05 02:12:16
Norihisa Fujita, ぽん @fjnli

struct {int x; int y;}; のような型に対しては {1,2} で初期化できるんだけど。

2010-06-05 02:12:57
Norihisa Fujita, ぽん @fjnli

闇の書を読むか。8.5 Initializersあたり?

2010-06-05 02:13:19
Yak! @yak_ex

C++ 奥が深い。っていうか C++0x 全然分かって NEEEEEeeeeee.........

2010-06-05 02:16:48
隅須正昭 @nagoya313

ん~、となると多引数の場合でもexplicitを付けるのがデフォな流れになるのか?

2010-06-05 02:17:59
Norihisa Fujita, ぽん @fjnli

@SubaruG しかしstd::tupleはついてますね。std::make_tupleを使えということですか

2010-06-05 02:19:16
隅須正昭 @nagoya313

1変数の時は暗黙型変換を阻止したいことが多いからexplicit付けることになると思うけどそうすると1変数のときだけ{}で初期化できないという体系が出来てしまうような・・・。

2010-06-05 02:20:12
Norihisa Fujita, ぽん @fjnli

@SubaruG tuple<int> x = 1 が許されるとまずいという事ですか?

2010-06-05 02:21:58
Yak! @yak_ex

@nagoya313 今 n3092 見ただけですが、explit 無しのコンストラクタが抑止されるのは copy-list-initialization の時だけで direct-list-initialization の時は呼べる見たいです。

2010-06-05 02:25:12
Akso de la Malbono @Cryolite

std::tuple<int> t = { 1 }; も弾かれるのは納得できんな.

2010-06-05 02:28:44
隅須正昭 @nagoya313

@yak_ex どうもです。あとで確認してみます。

2010-06-05 02:30:48
Yak! @yak_ex

@Cryolite std::tuple<int> t{1} だと通ると。

2010-06-05 02:32:41
Norihisa Fujita, ぽん @fjnli

やっぱtupleリテラルが必要だったのでは、と思う。const教的にも。 > C++0x

2010-06-05 02:34:15
Yak! @yak_ex

いわゆる「C++ で最も奇妙な解析」(一時オブジェクトを伴う関数呼び出しのつもりが関数宣言として解釈される奴)も () じゃなくて {} で書けば回避可能ってことかな?

2010-06-05 02:35:44
Yak! @yak_ex

関数呼び出しつかコンストラクタ呼び出しですね。ごめんなさい。

2010-06-05 02:38:12
前へ 1 ・・ 5 6