cppreference web site引入了declval:
请注意,因为declval不存在定义,所以它只能在未评估的上下文中使用
我检查了ISO C ++ 11标准,没有"未评估的上下文"的短语。这是编译原则中的概念还是别的什么?
感谢。
答案 0 :(得分:1)
从标准[第5节,第7节]
在某些情况下,出现未评估的操作数(5.2.8,5.3.3,5.3.7, 7.1.6.2)。未评估未评估的操作数。 [注意:在未评估的操作数中,非静态类成员可以命名为(5.1)和 命名对象或函数本身并不需要a 提供定义(3.2)。 - 结束说明]
使用它的上下文:
decltype(declval<T>())
[第7.1.6.2节] 所以,在外行术语中(据我所知),它不能用作a + b;
之类的独立表达式。
根据马萨的评论如下:
在上面提到的上下文中,表达的表达式 未评估的操作数展开,以便其结果的类型(和, 在sizeof的情况下,可以确定该类型的大小) 表达的评价从未被纳入最终 程序。
示例:
typeof(std::cout << "1\n") &x = std::cout;
永远不会 生成代码以将“1 \ n”打印到标准输出。