问题标签 [decltype]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
895 浏览

c++ - 在模板函数中使用 auto 和 decltype

我一直在尝试使用自动返回类型模板并且遇到了麻烦。我想创建一个接受 STL 映射并返回对映射中索引的引用的函数。我从这段代码中遗漏了什么以使其正确编译?

(注意:我假设地图可以用 0 的整数赋值来初始化。我可能会在稍后添加一个 boost 概念检查以确保它被正确使用。)

调用此函数的代码示例如下:

0 投票
3 回答
833 浏览

c++ - decltype 与条件运算符一起使用时表现不一致

在研究一些新的 C++11 特性时,我观察到一些与新的 decltype 关键字及其与条件运算符的交互相关的奇怪之处。

看到以下程序的输出,我感到非常惊讶:

这导致了令人惊讶的输出:

我本来希望看到以下输出(注意最后一行):

有谁知道为什么会发生这种情况?我正在使用 GNU g++。

0 投票
1 回答
2384 浏览

c++ - 类成员变量的decltype,是否被禁止?为什么?

我可以写

但我的编译器(Microsoft Visual Studio 2010,cl版本 16.00.40219.01)禁止我

用于 ONLINE_EVALUATION_BETA2 的 Comeau C/C++ 4.3.10.1 (Oct 6 2008 11:28:09) 也给出了类似的错误。

这种行为的基本原理是什么?

0 投票
4 回答
1239 浏览

c++ - C++11 - 模板、朋友、decltype 和访问修饰符

小伙伴们怎么了

我正在尝试为我的数学向量类重载加法运算符。我的(看似逻辑正确)简化代码是:

然而,GCC 4.6.1 给了我这个:

如果我将第二个向量更改为一个 int 向量,它会给我更多(类似的)错误。

我最接近解决这个问题的是找到这个有趣的页面:http ://gcc.gnu.org/bugzilla/show_bug.cgi?id=48884

但遗憾的是,我不能用它来解决我自己的问题。我尝试了 GCC 4.6.2 和 4.7.0,但我的代码也没有编译。

将“private”更改为“public”确实解决了我的问题,但显然我的意图不是公开 m_data;

我只想定义一个加法运算符,它的返回类型由模板参数确定,据我了解,这是编译时的事情-对于模板函数的每个实例化,编译器都会根据 decltype 自动计算出返回类型() 那里。我的意思是,main() 以哪种方式尝试访问这些向量之一的 m_data 的内容?

这整件事让我感到困惑,任何帮助将不胜感激。

好,谢谢

0 投票
1 回答
530 浏览

c++ - 递归尾随返回类型?

可能重复:
使用带有可变参数模板函数的 decltype 的尾随返回类型

我想创建一个汇总多个值的函数。如果我不使用尾随返回类型count(),则使用第一个参数的类型作为返回类型。但是,当使用尾随返回类型时,我无法编译代码:

错误(GCC)是:

我怎样才能让它工作?

0 投票
3 回答
3960 浏览

c++ - 获得正确的 value_type

在我的班上,我有一个成员:

现在我想要一个 fnc 返回内存的第一个元素中的内容,但我不想指定std::string为返回类型,以防以后我决定为此目的使用不同的类型,所以我尝试了这个,但它没有工作:

任何想法如何以最通用的方式指定返回类型?

0 投票
5 回答
1308 浏览

c++ - 为什么这个 cpp-next 的“最小”模板有问题?

我正在阅读cpp-next,该min模板作为一个示例展示了如何将冗长的 C++ 代码与 python 代码进行比较

起初这看起来很无辜,但 Daveed Vandevoorde 说了这句话

在其返回类型规范中使用 decltype 的 min 模板不起作用:它返回一个引用(因为参数是左值),该引用最终在最常见的用途中引用了一个局部变量。

我想每个人可能都不清楚问题是如何表现出来的。你能给出详细的解释和可能的修复吗?

0 投票
1 回答
853 浏览

c++ - 将 C++ decltype 与重载的 operator++ 一起使用(预增量)

对于某些模板类型名,我想创建一个 typedef,它是 T::operator++() (又名 T 的预增量运算符)的声明返回类型。

我没有在网上找到任何明确的东西,尽管肯定有一些关于 decltype 的提法。所以我尝试了一些东西,唯一真正有效的似乎是一个肮脏的黑客。你觉得这怎么样?

我正在使用 GCC 4.6.2。我短暂地尝试了 Clang,但并没有更好。

0 投票
3 回答
326 浏览

c++ - 为什么 CLS() 在 C++11 中有不同的含义

VS2010 已经部分支持 C++11。我在 VS2010 RTM 中编译下面的代码。我很困惑为什么将代码 CLS() 分析为不同的含义。在“decltype(CLS()) obj1;”这一行中,CLS() 表示一个类对象实体。但是在“CLS obj2(CLS());”这一行中,CLS() 表示一个函数指针,它返回一个不带参数的 CLS 对象。行为是否符合预期?标准中有描述吗?

2011 年 12 月 8 日更新

根据 C++11 7.1.6.2/1,括号中的预期字符串是一个表达式。编译器只需要检查字符串是否可以被解析为有效的表达式。如果是,则代码格式正确。因此对于代码“decltype(CLS()) obj1;”,“CLS()”被视为表示对象定义的有效表达式。

2012 年 1 月 3 日更新

Potatoswatter 解释了为什么“CLS obj2(CLS());” 是对象定义以外的声明。

任何可能被解释为表达式或声明的东西都是声明,无论它多么不寻常。CLS obj2(CLS()); 声明一个函数,其参数类型 CLS() 是一个没有返回 CLS 的参数的函数,其返回类型是 CLS。

0 投票
1 回答
1192 浏览

visual-c++ - 获取模板 lambda 参数的返回值,如何简化代码?

这是我的把戏:

使用示例:

如果 F 是 lambda:

我认为函数 get_return_value 看起来很难看......如何简化它?