基本类型的std ::向量的默认值
Default value of std::vector for base types
我正在尝试找出如何用固定尺寸杀死std::vector<Object *>
,因为之后我不再需要更改它。因此,我正在使用此代码(矢量是空的):
mControllerItem.resize(nLines, nullptr);
根据文档,第二个元素可用于指定将复制到新元素中的默认值,但这是可选的。如果没有给出第二个参数,则使用默认构造函数。
如果基本类型,例如指针,int等。在链接中,它没有说什么。它们会被初始化为0,是否保持不确定,或者是否有其他机制可以确定它们将获得什么值?在链接上的示例中,输出为0,所以我认为它是对此毫无意义的,但是此guaruanteed是定义的,还是该实现(或联合国)定义?
标准规定 resize
将 value-initialize 任何需要插入的项目,因此这里的行为非常定义。
简单的术语,价值定性的意思是:
- 对于类类型,默认构造函数被称为;如果没有提供构造函数,则每个成员都是值initialial的(递归)
- 对于任何类型T的标量,它们都会获得值
(T)0
(这可以保证,如果T是指针,则所使用的值将被置于null)
)
该行为的定义在C 03和C 11之间略有不同。在前者中,创建了一个价值定位的对象,并且向量中的新元素是从中构建的。在新版本中,新元素被直接化。
对于诸如指针之类的内置类型,价值限制等于零初始化,因此,您的元素在事实上保证为标准的两个版本都为零。
请注意,您的假设实际上并不完全正确。是,但仅适用于自定义类型。碰巧的是,用于价值定义的语法调用自定义类型的默认构造函数,而内置类型的零命名化。
是的,如果指示它们将被初始化为bu nulls。所有基本类型都有默认构造函数。唯一的区别是遵循
- int a;//默认构造函数不会被调用,因此值为未定义
-
class C {int a; C(): a()};
//默认构造函数将被调用,值将为0 -
void f(int a = int())
//默认构造函数将被调用,值将为0
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- 将向量作为类>(值)<向量启动和向量<类>[值]有什么区别
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 创建一个包含 c++ 默认值的环境文件
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 使用默认值初始化unique_ptr向量(nullptr?
- C++用一个新类初始化二维向量;默认值更改
- 将指针指向函数的函数和将默认值作为参数的向量会导致编译错误
- 基本类型的std ::向量的默认值
- 为向量成员和更新元素指定默认值
- 向量数组的默认值是什么
- 如何在方法中为向量设置默认值
- 为什么空向量调用值类型的默认构造函数?
- 如何初始化 std::向量 std:固定长度对与默认值