Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具

还空?
EN

Stack Overflow用户
提问于 2013-12-09 10:45:20
回答 3查看 1.1K关注 0票数 26

我不明白为什么这段代码编译时没有错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>

template <class T>
struct Test
{
    static constexpr T f() {return T();} 
};

int main()
{
    Test<void> test;
    test.f(); // Why not an error?
    return 0;
}

按照标准是可以的,还是编译器的容忍度?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-09 11:15:53

这在起草C++11标准看来是有效的,如果我们看一看5.2.3显式类型转换(函数表示法)第2段说(强调我的):

表达式T(),其中T是非数组完整对象类型或(可能为cv限定的)空类型的简单类型说明符或类型名称说明符,该表达式创建指定类型的prvalue,其值为T类型的值初始化(8.5)产生的值;对void()情况不进行初始化.

预C++11的措辞也非常相似。

这一点在一个警察中是可以的,尽管7.1.53说:

常设委员会职能的定义应满足下列限制:

包括这颗子弹:

其返回类型应为文字类型;

在C++11中,3.9第10段并不是字面意思,但如果我们再看看第6段,就会发现一个符合这种情况的例外,它说:

如果类模板的constexpr函数模板或成员函数的实例化模板专门化将无法满足对constexpr函数或constexpr构造函数的要求,则该专门化不是constexpr函数或constexpr构造函数。注意:如果函数是成员函数,那么它仍然是const函数,如下所述。-end注意到如果模板没有专门化就会产生constexpr函数或constexpr构造函数,程序的格式是错误的;不需要诊断

正如Casey 注意到C++14标准草案空白中是一个字面意思一样,这是3.9类型第10段中的内容:

如果类型是文字类型,那么它就是文字类型:

包括:

-无效;或

票数 25
EN

Stack Overflow用户

发布于 2013-12-09 10:56:14

详情见@的答案。

以下一段禁止使用非模板(7.1.5(3)):

constexpr函数的定义应满足以下约束:

  • ..。
  • 其返回类型应为文字类型或对文字类型的引用。

为了详细说明,3.9(10)中将文字类型定义为数组或结构中的标量类型或文字类型对象的组合。void不是3.9(9)的标量类型。

票数 6
EN

Stack Overflow用户

发布于 2013-12-09 10:58:55

您的函数返回void()的值,而不是从空函数本身返回。您正在返回一个NULL值。你所做的就相当于这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void f() { return void(); }

这将返回一个空值,这是唯一的空值。您不能从一个void函数返回任何其他内容,因为它将是另一种类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20478193

复制
相关文章
空与非空:浅谈非空约束的影响
黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 非空约束是字段的一个重要属性。但是,很多时候,数据库表的设计人员似乎并不十分在意这个属性。最常见的现象就是,除了主键字段外,所有字段都不指定该属性。而在Oracle中,默认是允许为空。 而实际上,优化器在选择执行计划时,非空约束是一个重要的影响因素。为了说明问题,我们建立以下测试表,然后分别说明非空约束在各种情况下对执行计划和性能的影响。 谓词评
数据和云
2018/03/06
3.2K0
空与非空:浅谈非空约束的影响
空对象和空的对象
空对象:表面内部不包含任何属性和方法的对象,比如var obj={}就是一个空对象
十月梦想
2018/08/29
1.3K0
【Kotlin】空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )
Kotlin 中的 可空类型 变量 , 在运行时 可以选择 不启用 安全调用 操作 ,
韩曙亮
2023/03/30
2K0
【Kotlin】空安全 ③ ( 手动空安全管理 | 非空断言操作符 !! | 使用 if 语句判空 )
sizeof(空类或空结构体)
A、 0           B、 1            C、 4           D、8
阳光岛主
2019/02/19
1.6K0
浅谈Kotlin(八):空安全、空类型
这样要比传统写法 if(name==null) -1 else name.length 要简介
听着music睡
2022/01/04
9490
浅谈Kotlin(八):空安全、空类型
JavaScript 判断空对象、空数组的方法
从表格中,我们可以看出想要判断是不是null, undefined , "", 0,都比较容易, 非操作 和 比较操作 都能实现。就是{}, []比较顽固,两种方法都无效。
celineWong7
2020/11/05
29.9K0
【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
在 Java 语言 编写的程序中 , 出现最多的崩溃就是 NullPointerException 空指针异常 ,
韩曙亮
2023/03/30
1.8K0
【Kotlin】空安全总结 ( 变量可空性 | 手动空安全管理 | 空安全调用操作符 | 非空断言操作符 | 空合并操作符 | 空指针异常处理 | 先决条件函数判空 )
优雅判空
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/18
1.3K0
【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ;
韩曙亮
2023/03/30
8790
【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
【Kotlin】空安全 ① ( Kotlin 的空安全机制 | 变量可空性 | 默认变量不可赋空值 | 声明可空类型变量 )
在 Java 语言 编写的程序中 , 出现最多的崩溃就是 NullPointerException 空指针异常 ,
韩曙亮
2023/03/30
1.9K0
【Kotlin】空安全 ① ( Kotlin 的空安全机制 | 变量可空性 | 默认变量不可赋空值 | 声明可空类型变量 )
【Kotlin】空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )
文章目录 一、手动空安全管理 二、空安全调用操作符 ? 三、let 函数结合空安全调用操作符使用 一、手动空安全管理 Kotlin 语言中 , 变量类型 分为 可空类型 和 非空类型 , 默认状态 下
韩曙亮
2023/03/30
6140
【Kotlin】空安全 ② ( 手动空安全管理 | 空安全调用操作符 ? | let 函数结合空安全调用操作符使用 )
java判断空对象为空_Java判断对象是否为空(包括null ,””)的方法[通俗易懂]
public static boolean isEmpty(Object obj)
全栈程序员站长
2022/06/25
7K0
jdbctemplate查询为空报错_java空指针异常举例
Dao类是不能直接new出来的必须是通过 ApplicationContext applicationContext= new
全栈程序员站长
2022/11/17
3.1K0
页面跳转,重定向,空控制器,空操作
TP5\thinkphp\library\traits\controller\Jump.php
PM吃瓜
2019/08/12
1K0
页面跳转,重定向,空控制器,空操作
使用“空”对象替代引用是否为空判断
使用Null对象替代引用是否为空判断 编程语言中最常见运行时异常非NullPointerException莫属,只要程序依赖于外部的输入数据,比如说http请求传递的查询字符串参数、关系数据库连接、磁盘文件读取,空引用异常就无法避免。通常,程序需要满足某些条件才能正常的往下执行,假如这些条件依赖外部输入数据,而这些外部输入的数据肯定无法保证百分百不出错,比如说网络连接失败、数据库用户名密码错误等,当程序被这些节外生枝的障碍打断时,空引用异常就极有可能被引发。 比如说,原本我们调用一个方法,这个方法会执行连接
用户1608022
2018/04/11
7.6K0
空类型指针
malloc 查看底层源码中发现是空类型的指针,空类型的指针可以接收任意类型的指针,但是不能取出指针里的内容,如果要取出内容必须要强转。
潇洒
2019/07/02
8050
jq 判断是否为空,为空隐藏指定 div
<style>.mydiv{ width:300px; height:300px; background:red;}</style> <div class="mydiv">     <div class="content">          这是一句话,删除的话会让 mydiv display:none;          </div> </div> <script src="https://lib.baomitu.com/jquery/3.4.1/jquery.min.js"></script> <sc
Savalone
2020/02/11
7.1K0
空与非空 EMPTY_LOB和NULL的区别
编辑手记: EMPTY_LOB与NULL在字面意思上看起来差不多,但实际上,它们却有天壤之别。 前不久写过一篇文章,描述如果表包含了触发器,在通过IMP导入数据的时候,原本的EMPTY_LOB将被转化为NULL。有朋友在文章的回复中问,EMPTY_LOB和NULL的区别,这里就简单描述一下。 包含触发器的LOB表执行IMP导致EMPTY_LOB变为空: http://yangtingkun.itpub.net/post/468/495024 说实话,二者其实差别还是相当大的。 一个表示的未知,另一个表示的空
数据和云
2018/03/07
1.5K0
空与非空 EMPTY_LOB和NULL的区别
Collectors.toMap 当value为空时,报空指针
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors;
botkenni
2022/11/12
3.1K0
Collectors.toMap 当value为空时,报空指针
js判断空对象
如果它返回一个空数组,这意味着该对象没有任何可枚举的属性,这反过来意味着它是空的。
IT工作者
2022/01/04
18.5K0

相似问题

还空承诺

20

果冻还空片

113

美汤还空套装

10

猫鼬种群还空

11

美汤还空值

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文