字符串"companion types"
String "companion types"
一本书讨论了string::size_type
(这是std::string
类的string.size()
函数的返回类型)。
我不明白这些"伴侣类型"是什么。有人可以给我一个详细的解释一下它们是什么吗?我们如何访问它们?我们如何在类中创建它们?我听说它们是某种类型别名,怎么样?我在网上找不到任何这些信息。
std::string
类型(以及其他序列容器)具有一堆关联的类型。例如,有 string::iterator
,一种可以迭代字符串中的字符的类型。
string::size_type
类型是能够容纳字符串大小的某种类型。你可以通过编写这样的东西来使用它:
string::size_type size = myString.size(); // Or something else
很少看到人们在日常编程实践中实际使用这种类型。大多数人只是在这里使用size_t
或auto
。
string::size_type
类型存在的原因是,处理序列容器的模板函数可以接受模板参数,然后从中提取有用的信息,如下所示:
template <typename Sequence> void doSomething(const Sequence& seq) {
typename Sequence::size_type size = seq.size();
...
}
不过,您可能不会很快做这样的事情,因此请随意使用size_t
或类似的东西。
Companion types
可能只是提及member types
的比喻方式,即在另一种类型中声明的类型
例如,字符串有一堆以及size_type
你是对的,它们是使用 typedef
或 using
创建的类型别名(自 c++11 以来)
例如,foo
有两种companion
类型,但由于可见性,用户只能访问一种
class foo
{
public:
using bar = int;
private:
struct internal { /* impl */};
...
typedef internal baz;
}
现在,任何人都可以实例化foo::bar
类型的变量,并且它还允许foo
(或std::string
)的作者稍后更改成员类型,而无需重写代码,只要您始终如一地使用它们。
相关文章:
- 使用 cmake 的 LLVM 构建在 tsan_libdispatch_mac.cc 期间失败; "Error: conflicting types for ..."
- 构建 TensorFlow r1.14 C++文件时缺少文件"tensorflow/core/framework/types.pb.h"
- 为什么"types may not be defined in parameter types"
- 如何在Arduino程序中解决"invalid operands of types"?
- 错误"invalid types ... for array subscript"是什么意思?
- 无法打开源文件"sys/types.h"、"sys/stat.h"
- 传递自定义函数类型时的'incompatible types in assignment'
- SWIG INOUT types (C++ to Python)
- 尝试实施 PIMPL idom 时如何避免"redefinition; different basic types"
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- 当foo是接受单个模板参数的结构时,'foo<Type1, Types...>'是否合法?
- 为什么编译器显示错误"no match for 'operator[]' (operand types are 'carti' and 'int')"
- " invalid operands of types 'int' and 'int* const'" 来自功能的错误,来自书
- 字符串"companion types"
- 使用 getline() 时编译错误: 'mismatched types'
- Typedef redefinition with different types (Emscripten SDL2+O
- 错误消息"deduced conflicting types for parameter 'const T'"
- 获取错误:"error: conflicting types for ‘call_celsius’ "和"note: previous implicit declaration of ‘call_ce
- char16_t and char32_t types in C++11
- "Typedef redefinition with different types" Clang中关于工作MSVC代码的错误