perfect-forwarding 相关问题

完美转发描述了C ++ 11函数模板的一个属性,它允许正确地将参数推导为左值或右值,并将它们以相同的形式转发给其他函数。

std::move 和 static_cast<&&>

我理解正确吗,如果我使用临时对象调用 std::move() ,例如 std::move(A()) 或 std::move(int) ,它会返回对可用内存的引用? 据我所知,如果 T&& 或 const T& 赋值...

回答 3 投票 0

完美转发中的模板参数推导

我正在学习完美转发,并运行示例代码(如下所示) 模板 无效show_type(T t){ std::cout << typeid(t).name() << std::endl; } template<

回答 1 投票 0

为什么编译器无法为我的运算符推断出 std::endl 的类型<<(T&&)?

我正在使用完美转发将类型通过管道传输到关联的 JsonRecord 对象。但是,当我想将 std::endl 作为令牌转发到时,编译器无法推断出 std::endl 的类型...

回答 1 投票 0

完善的转发和无类型模板参数

“arg”是通用/转发引用还是右值引用? 模板 结构测试{};

回答 1 投票 0

std::forward_like 错误与 clang 并推导出这个

我正在尝试推导这一点以简化代码库。我通过简单的测试遇到了问题: #包括 #包括 #包括 我正在尝试推导 this 以简化代码库。我通过简单的测试遇到了问题: #include <iostream> #include <type_traits> #include <utility> class S { public: auto Get(this auto&& self) -> auto&& { return std::forward_like<decltype(self)>(self.val); } private: int val{0}; }; int main() { S const s; std::cout << std::is_rvalue_reference_v<decltype(s.Get())> << '\n'; std::cout << std::is_const_v< std::remove_reference_t<decltype(s.Get())>> << '\n'; std::cout << std::is_rvalue_reference_v<decltype(std::move(s).Get())> << '\n'; std::cout << std::is_const_v< std::remove_reference_t<decltype(std::move(s).Get())>> << '\n'; } 直播 msvc 和 gcc 给出了预期的结果,但没有 clang,这给出了: error: function 'forward_like<const S &, const int &>' with deduced return type cannot be used before it is defined note: in instantiation of function template specialization 'S::Get<const S &>' requested here std::cout << std::is_rvalue_reference_v<decltype(s.Get())> << '\n'; 和 error: no matching member function for call to 'Get' std::remove_reference_t<decltype(s.Get())>> << '\n'; ~~^~~ note: candidate template ignored: substitution failure [with self:auto = const S &] auto Get(this auto&& self) -> auto&& { 加上下一行中的其他类似错误。 出了什么问题? 这是 clang 中的一个错误: clang 16 -> 17 回归:“推导的返回类型在定义之前不能使用” 解决方法是编译时使用-fno-builtin-std-forward_like。 上帝螺栓示例 或者使用 clang trunk,它已经包含修复程序: 上帝螺栓示例

回答 1 投票 0

为 const 引用和右值引用编写重载

最近我发现自己经常遇到这样的情况:只有一个函数接受某个对象作为参数。该函数必须复制该对象。 然而该函数的参数...

回答 3 投票 0

通用引用:为什么推导这个没有std::forward?

我观看了 Scott Meyers 关于通用引用的视频,他告诉我,任何时候当你使用通用引用时,你都必须像这样转发它: 模板 自动功能(T &...

回答 1 投票 0

函数结果的通用完美转发

我在尝试以通用方式完美转发函数结果时遇到了问题。 这里有两个提供结果的函数: Foo 提供FooAsTemporary() { 返回 Foo{}; } 富&

回答 1 投票 0

模板类型推导包含const吗?

我有: 模板 班级持有人 { T&举行; 民众: 支架(T&h) :举行(小时) {} 朋友 std::ostream& 运算符<<(std::

回答 1 投票 0

结构化绑定,将它们传递给其他函数和值类别

我的主要问题是: 如何正确编写应用结构化绑定并将结果变量传递给函数的函数,同时正确保留引用、const-n...

回答 1 投票 0

C++ 中有执行移动或复制的标准函数吗?

我有一个接受右值引用的函数: 无效 foo(int&& x); 我想创建另一个函数,它提供与原始函数的通用接口: 模板<...

回答 1 投票 0

实现偏应用时如何保证类型正确性

作为一个不太熟悉模板元编程细节的人,我想尝试实现一个(天真的)基本部分应用程序帮助器,将参数绑定到

回答 1 投票 0

C++ 将字符串传递给类 setter 函数

我看到StackOverflow中讨论了这个主题,但我找不到正确的答案。 我已经使用 C++ 多年了,但我仍然对如何为......编写一个简单的 setter 方法存有疑问

回答 1 投票 0

使用 std::forward 与 RefRefCast 进行完美转发

我非常感谢您帮助理解 std::forward 实现。 std::forward 和模板函数中标准转换为 T&& 之间有什么区别? 至少在这个例子中,t...

回答 1 投票 0

显式声明模板参数时如何进行完美转发

考虑这个简单的函数 模板 自动 mkVector(U&& x0) { 返回 std::vector>{std::forward(x0)}; } 以及 4 个可能的用例...

回答 1 投票 0

特定类型完美转发

在编写线程安全的 std::stack 包装器时,我为推送做了以下两个重载: 无效推送(const value_type&value) { 自动防护= std::scoped_lock{_mutex}; _stack.push(值);...

回答 2 投票 0

std::forward 的第二次重载(cppreference.com 上的示例)

我知道 std::forward 的第二次重载: 模板< class T > constexpr T&& 向前( std::remove_reference_t&& t ) noexcept; 用于右值(如

回答 1 投票 0

是否有使用 std::forward,其中参数不是变量名?

在大多数情况下,std::forward 的参数类型是转发引用: 模板 void CallF(T&& 值) { F(std::forward(值)); } 在极少数情况下,类型...

回答 1 投票 0

C++ 如何允许复制列表初始化以实现完美的转发功能?

假设我有一个完善的转发功能: 模板 void f(T&& t) { /* 做某事 */ } 我有特定类型 T,我想允许对其进行复制列表初始化,s...

回答 1 投票 0

为什么一个完美的转发功能一定要模板化?

为什么下面的代码有效: 模板 void foo(T1 &&arg) { bar(std::forward(arg)); } std::string str = "你好世界"; foo(str); // 即使如此也有效...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.