向量对象声明后的括号是什么意思
What do the brackets after a declaration of a vector object mean?
我来自Python背景,但我正在阅读C++标准库中可用的对象和数据结构的类型,我看到了例如字符串的vector
的声明:
vector<string> names(10);
将指示一个vector
对象被初始化为容纳10个类型为string
的对象。我的问题是:
- 声明的
<string>
部分是否具有C++类系统的抽象,即它是向量对象的内置语法,还是类系统的某些功能的一部分,可以用于用户定义的类定义 - 我假设名称后面的括号是传递给构造函数的参数,这是对的吗
string
是像int
一样的内置类型,还是由标准库定义的对象。因此,内置类型和其他对象之间有区别吗(例如,所有"类型"都是Python中的对象)
std::vector
对象有两种参数:
- 模板参数用于
std::vector
值类型和分配器类型,后者为默认类型。也就是说,std::vector<std::string>
实际上恰好是std::vector<std::string, std::allocator<std::string> >
- 有一些运行时参数作为构造函数参数传递,
std::vector<...>
采用了相当多的这些参数的组合。在上面引用的使用中,10
是给定给向量的初始元素的数量
因此,要回答您的具体问题:
string
恰好是std::string
,并没有什么特别之处。您可以使用任何用户定义的类型来建模某些概念(例如,类型需要是CopyConstructible
)- 括号中的参数是构造函数参数(在C++上下文中,括号通常是
[
和]
,但术语不明确) string
,实际上std::string
并没有被定义为内置类型,但它是标准C++库中的一个类型。然而,标准C++库类型的实现方式在很大程度上取决于C++实现,即,一个实现可以选择将其内置(只要它仍然可以像类类型一样使用)
在C++中,内置类型和类类型之间有一些区别,但在C++2011中,它几乎可以创建行为类似于内置类型的类类型。主要区别在于,可以获取类类型的某些成员的地址,而内置类型无法访问相同的"成员"。另一个区别是,内置类型不需要声明(实际上,它们不能声明),而类类型需要声明和/或定义(取决于它们的使用方式)。
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- "friend"关键字在C++中是什么意思?
- 减法中的"0"是什么意思?
- 字符数组前面的加号是什么意思?
- 这里的字符串函数是什么意思