我可以强制执行标量类型通过 int{} 初始化为零吗?
Can I enforce scalar types to be initialized to zero by int{}?
请考虑以下代码:
template<class T>
void someFun() {
T t;
// stuff with t
}
在这里我可以确定,如果T
是默认可构造的struct
或class
那么t
应该初始化为其默认值。
但是,如果T
是,例如,int
,那么它将在此处取消初始化。好吧,int
直观的"默认初始化"应该意味着它应该初始化为零。
我正在寻找的是一种在T
是类类型的情况下调用默认构造函数的方法T
如果它是标量类型,则将其初始化为零。
这行得通吗?
template<class T>
void someFun() {
T t{};
// stuff with t
}
AFAIK 在上面的示例中,如果它是类类型,则将调用 T
的默认构造器,但如果它是 int
或其他标量类型,我能确定它将为零吗?
对于标量类型{}
初始化器会触发所谓的值初始化。并且,对于标量类型,值初始化会导致零初始化。所以,是的,它将零初始化标量类型的对象。
类型,它还会触发值初始化,这会导致默认初始化(具有用户提供的默认构造函数的类)或零初始化(没有用户提供或删除的默认构造函数的类)。
因此,在您提到的所有情况下,它似乎都可以执行您希望它执行的操作。
Justin 已经在注释中挖掘了正确的引用(称为零初始化),所以是的,这适用于所有类和非类类型。不仅是整数类型,还有布尔值、浮点类型和指针。
虽然它对someFun<void>()
不起作用,但我想说该功能缺乏乐趣。
相关文章:
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- 在MSDOS编译器上,用大于最大值的值初始化int时输出混乱
- 使用 double 在 C++ 中初始化 int 之间的差异
- 如何在构造函数中初始化int const * const
- 使用memset初始化int数组
- 通过 fstream 函数初始化 int 向量??C++
- 在 c++ 中使用输入字符串的长度初始化 int 数组
- 为什么我不能用 const int 的地址初始化 int*
- 如何使用字符串(字符数组)初始化字符指针,而不是使用整数数组初始化 int 指针
- 如何初始化 int *const *const.
- C++ - 声明和初始化 int 时出现分段错误
- C - 使用类型为 'int 的表达式初始化'int *'的不兼容指针类型
- 错误无法初始化 'int *' 类型的参数,其 rvalue 类型为 'int'
- C++:正在初始化“int Agent::tun_alloc(char*,int)”的参数1[-fpermission]
- C++ 动态数组:不能使用 "void" 类型的值来初始化 "int" 类型的实体
- 无法使用类型 'int (*)[20]' 的右值初始化 'int *' 类型的参数
- 为什么我不能使用 '0x80000000' 来初始化 int 数组?
- 使用 memset 而不是 for 循环初始化 int** 时出现分段错误
- 如何初始化int的向量中的向量
- 初始化"int strcmpi(const char*, const char*)"错误的参数 1