10

テンプレートのコンテキストでは、次の「参照の折りたたみ」ルールが適用されます。

template <typename T>
void foo(T && t)
{
    //T&  &   -> T&
    //T&  &&  -> T&
    //T&& &   -> T&
    //T&& &&  -> T&&
}

なぜ言語は「ユニバーサル参照」がconst修飾子を持つことを禁止するのですか?

template <typename T>
void foo(T const && t)

型が参照に解決された場合 (4 つのケースのうち 3 つ) は意味があるように思われます。

このアイデアは、言語の他の設計面と相容れないと確信していますが、全体像を完全に把握することはできません。

4

4 に答える 4

0

言語が const r-value 参照を許可しないのはなぜだと思いますか?

次のコードでは、何が印刷されますか?

#include <iostream>

struct Foo 
{
  void bar() const & 
  {
    std::cout << "&\n";
  }

  void bar() const &&
  {
    std::cout << "&&\n";
  }
};

const Foo make() { 
  return Foo{}; 
}

int main()
{
  make().bar();
}

答え:

&&

なぜ?make() は const オブジェクトを返し、このコンテキストでは一時的なものであるためです。したがって、const への右辺値参照。

于 2016-09-03T06:35:10.997 に答える