decltype相关内容

如何将dectype与成员函数一起使用

我正在尝试对Visual Studio 2012中的成员函数使用dectype。我偶然发现了一个特性,我想知道这是故意的还是一个编译器错误。考虑(只是一个代码片段,并不是要说明我的观点): struct Test { int f() {return 0;} } T; std::integral_constant; std::integral_const ..
发布时间:2022-04-01 13:32:30 C/C++开发

C++模板-完整指南:关于decltype和return类型的脚注措辞

C++模板-完整指南第2版第436页有以下脚注(我的粗体): 不同的是,与其他上下文中的调用表达式不同,decltype(call-expression)不要求非引用、非void返回类型是完整的。而使用decltype(std::declval().begin(), 0)确实增加了调用的返回类型必须完整的要求,因为返回值不再是decltype操作数的结果。 脚注是指使用declt ..
发布时间:2022-02-25 20:16:48 C/C++开发

使用 decltype 将其强制转换为 const

我正在尝试解决一个问题,其中 decltype 将大大简化事情,但我在 *thisdecltype 时遇到了问题/code> 并添加 const 限定符.下面的示例代码演示了这个问题. #include 结构 Foo{空栏(){static_cast(*this).bar();}无效栏()常量{std::cout ..
发布时间:2022-01-24 00:03:01 C/C++开发

decltype 的行为

假设我有一些 stl 容器类 obj 的对象.我可以通过这种方式定义其他相同类型的对象: decltype(obj) obj2; 但我不能以这种方式为容器声明迭代器: decltype(obj)::iterator it = obj.begin(); 为什么?我做错了什么吗? 解决方案 根据最终的 C++0x 草案 (FDIS),您的代码格式良好.这是 Visual Studio ..
发布时间:2021-12-22 18:50:35 C/C++开发

遮蔽外部名称的 decltype 和类成员名称之间的交互

此代码 int 冲突;结构 Foo {声明类型(冲突)冲突;}; 在 clang 上静默编译,但在 gcc 上编译失败并出现错误 错误:'int Foo::clash'的声明[-fpermissive] 错误:将 'clash' 的含义从 'int crash' [-fpermissive] 更改为 似乎需要 2 个因素才能出现错误: 阴影必须由类成员完成(如果是函数的 ..
发布时间:2021-12-18 23:17:08 C/C++开发

编译器不能推导出返回类型?

我正在尝试在自动函数上使用 decltype 关键字: struct Thing {静态自动 foo() {返回 12;}使用 type_t =声明类型(foo());}; 我收到以下错误(gcc 7.4): :6:25: 错误:在扣除“auto"之前使用“static auto Thing::foo()"声明类型(foo());^:6:25: 错误:在扣除“auto"之前使 ..
发布时间:2021-11-30 18:18:38 C/C++开发

为什么 decltype(auto) 在这里返回一个引用?

我想(认为)我理解auto.decltype 也一样.但是,在 C++14 中,可以将诸如 decltype(auto) 之类的东西作为函数的返回类型.考虑以下几点: decltype(auto) foo(){整数 m = 1;返回 m;} 返回类型是int,一切都有意义. 然而, decltype(auto) foo(){整数 m = 1;返回(米);} 返回 int&(即对 in ..
发布时间:2021-11-30 18:14:40 C/C++开发

auto和decltype的关系

是 auto x = 初始值设定项; 相当于 decltype(initializer) x = initializer; 或 decltype((initializer)) x = initializer; 还是两者都没有? 解决方案 decltype 还要考虑表达式是 rvalue 还是 lvalue . 维基百科说, decltype 表示的类型可以与 aut ..
发布时间:2021-11-30 18:14:33 C/C++开发

SFINAE 和 decltype(自动)

如果函数模板返回 decltype(auto)(或使用 auto 的其他类型说明符)但返回语句格式错误,SFINAE 会产生结果吗?return 语句是否被认为是函数签名的直接上下文? N3690 草案中似乎没有任何要求.默认情况下,我猜 SFINAE 不适用. 这看起来很不幸,因为您可以编写一个函数来转发到另一个函数,但是您不能像手写那样以委托为条件使其存在.此外,如果没有 decl ..
发布时间:2021-11-30 18:14:10 C/C++开发

函数标题中的箭头运算符 (->)

我遇到了以下代码: template 自动组合(T a,T1 b)->声明类型(a + b){返回 a+b;} 有一件事我无法理解: 在哪里可以找到函数标题中箭头运算符 (->) 的含义? 我猜纯粹从逻辑上讲,-> 运算符确定了一种类型,auto 将被推导出来,但我想弄清楚这一点.我找不到任何信息. 解决方案 在C++11中,函数声明有两种语法: 返回类型 标识 ..
发布时间:2021-11-30 18:09:52 C/C++开发

decltype(auto) 有哪些用途?

在 c++14 中引入了 decltype(auto) 习惯用法. 通常它的用途是允许 auto 声明在给定的表达式上使用 decltype 规则. 搜索成语的“好"用法示例,我只能想到以下内容(来自 Scott Meyers),即用于函数的返回类型推导: template//C++14decltype(auto) 抓取(ContainerType&& container, Inde ..
发布时间:2021-11-30 18:08:51 C/C++开发

为什么字符串文字上的 decltype 不会产生数组类型?

标准在 §2.13.5/8 中定义了字符串文字的类型,如下所示: 普通字符串文字和 UTF-8 字符串文字也称为窄字符串文字.窄字符串文字的类型为“n const char 数组",其中 n 是如下定义的字符串大小,并且具有静态存储持续时间 (3.7). 因此,例如,"sss" 应该有一个 char const[4] 类型(除非我读错了). 但是这个简单的片段: std::co ..
发布时间:2021-11-18 04:16:53 C/C++开发

decltype 的错误参数

两天前我问过关于创建线程以使用 Win32 API 运行非静态类方法的问题,我几乎得到了解决方案,但有一些让我感到困惑的东西,所以我在发布之前的答案之前问了这个问题问题. 我正在尝试使用此代码来线程化返回类型未知的函数: 模板 无符号整数通常函数(){功能();返回 1;}模板int Start(R(*func)()) {typed ..
发布时间:2021-09-25 19:18:26 C/C++开发