相关疑难解决方法(0)

是否对const的rvalue引用有用吗?

我猜不是,但我想证实一下.是否有用const Foo&&,Foo哪种类型?

c++ const rvalue-reference c++11

72
推荐指数
4
解决办法
9033
查看次数

什么是通用参考的标准/官方名称?

我知道如果声明变量或参数具有T&&某种推导类型的类型T,那么该变量或参数通常被称为通用引用.

Scott Meyers在其最初的演讲"C++ 11中的通用参考"中引入了 通用参考这一术语.但是,我想知道普遍参考的官方/标准术语是什么.

c++ c++11 universal-reference c++14 forwarding-reference

23
推荐指数
1
解决办法
1432
查看次数

为什么T const &&不是转发参考?

在模板的上下文中,应用以下"引用折叠"规则:

template <typename T>
void foo(T && t)
{
    //T&  &   -> T&
    //T&  &&  -> T&
    //T&& &   -> T&
    //T&& &&  -> T&&
}
Run Code Online (Sandbox Code Playgroud)

为什么语言禁止使用const限定符的"通用引用" ?

template <typename T>
void foo(T const && t)
Run Code Online (Sandbox Code Playgroud)

如果类型已经解决了参考(4个案例中的3个),那似乎是有意义的.

我确信这个想法与语言的其他一些设计方面不相容,但我看不出全貌.

c++ templates const move-semantics forwarding-reference

10
推荐指数
1
解决办法
241
查看次数

const转发参考给出错误C2440:“正在初始化”:无法从“ const std :: string”转换为“ const std :: string &amp;&amp;”

以下给出了编译器错误:

  #include <string>

  const std::string& get_name();

  int main(){
    auto&& name1 = get_name();//should bind to whatever
    const auto& name2 = get_name();//also ok
    const auto&& name3 = get_name();//<-not ok, why ?
    return 0;
  }
Run Code Online (Sandbox Code Playgroud)

链接到Godbolt:https://godbolt.org/z/l6IQQ7

如果我使用const auto&它可以编译-但这不会绑定到值。 auto&&将绑定到任何东西,以便自然也可以工作。但是,const auto&&在这种情况下不绑定背后的逻辑是什么?我知道auto&&会保留constness-但是有没有办法使之const明确,同时又与引用/值无关

动机:

对于函数等内部的“正常编程工作”,可以说类似这样的东西很棒:“我不在乎它是值还是引用-但我不会在其余函数中更改它”

给定当前语言,这应该是可能的。

相关问题: 为什么添加const会使通用引用成为右值

c++ forward-reference c++17

6
推荐指数
1
解决办法
86
查看次数

C++:通用(转发)引用中不允许使用 const

我正在阅读这个 stackoverflow 答案const T&&,其中给出了不是通用(转发)参考的一个原因:

允许 const T&& 充当转发引用,将无法重载仅采用右值引用作为参数的模板函数。

我不知道这是什么意思。我想这意味着同一个函数(模板)有两个重载,其中一个重载作为参数const T&&。我还假设这些重载之一将始终被调用,而另一个永远不会被调用。

如果我的假设是正确的,那么这两个重载函数是什么?或者如果我错了,引用的段落实际上是什么意思?

谢谢。

c++ forwarding-reference

5
推荐指数
1
解决办法
241
查看次数