相关疑难解决方法(0)

要求参考折叠规则的简要说明:(1)A && - > A&,(2)A &&& - > A&,(3)A &&& - > A&,和(4)A && && - > A &&

以下链接提供了4种形式的引用折叠(如果我是正确的,这些是唯一的4种形式):http://thbecker.net/articles/rvalue_references/section_08.html.

从链接:

  1. A &&成为A&
  2. A &&&成为A&
  3. A &&&成为A&
  4. A && &&成为A &&

虽然我可以做出有根据的猜测,但我想简要解释这些参考折叠规则背后的基本原理.

一个相关的问题,如果可能的话:在典型的实际用例中,这些STL实用程序(例如,等)在C++ 11内部使用这些引用折叠规则吗?(注意:我特别询问C++ 11中是否使用了引用折叠规则,而不是C++ 03或更早版本.)std::move()std::forward()

我问这个相关的问题,因为我知道这样的C++ 11实用程序std::remove_reference,但我不知道是否与std::remove_referenceC++ 11中常规使用的引用相关的实用程序,以避免需要引用 - 折叠规则,或者它们是否参考折叠规则一起使用.

c++ stl

39
推荐指数
2
解决办法
1万
查看次数

C++ 98/03引用折叠和cv限定符

下面的代码编译(gcc 4.7.2或icc 13)并产生"1 2"输出.这意味着const限定符被删除,即f<int&>具有参数类型int&.

为什么会这样?据我了解,根据§14.3.1.4:

如果一个模板参数的模板参数T名称的类型"参考CV1 S ",企图制造型"参考CV2 T "创造型"参考CV12 S ",其中CV12是CV-合格网络ERS的联合CV1cv2.冗余的cv-quali firs被忽略.

const不应该被丢弃.这是代码:

#include <iostream>
using namespace std;

template <typename T>
void f(const T& t)
{
    t++;
}

int main()
{
    int a = 1;

    cout << a;
    f<int&>(a);
    cout << ' ' << a << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ reference qualifiers c++03 c++98

6
推荐指数
2
解决办法
531
查看次数

标签 统计

c++ ×2

c++03 ×1

c++98 ×1

qualifiers ×1

reference ×1

stl ×1