- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
为了测量流的位置/偏移量/大小,标准指定了 std::streampos
、std::streamoff
和 std::streamsize
,但它们是实现定义的。
如何以安全且可移植的方式将这些类型转换为long long int
? (例如测量文件大小并将其注入(inject)以 long long int 作为参数的函数中)
最佳答案
嗯,就 C++98/03 而言,没有 long long int
。所以我假设你问的是 C++11。
streamsize
和 streamoff
必须是整数类型的 typedef(streampos
不是整数,因此您不会将其传递给任何需要一个long long
)。由于整数类型是基本类型,它们只能由 C++ 定义或作为特定于编译器的定义。
因此,唯一的问题是:这些类型定义是否大于 long long
?所有整数类型都可以转换为更大或相等大小的类型(尽管有符号/无符号,但这里的所有类型都是有符号的,所以没问题)。但如果它更大……你打算怎么办?
假设你不能改变你正在“注入(inject)”它的函数的签名(因为如果你可以,就没有理由不把 streamsize
作为参数类型,从而避免问题),你没有任何选择。您的数据值大于函数采用的值。这里没有办法绕过它。
您可以对 long long
执行 static_cast 以关闭编译器,但如果实际大小不能适合 long long
,这将无济于事.
归根结底,这是一个棘手的问题。您有一个函数接受一个参数,该参数对于您传递的内容来说可能太小了。您最多可以通过 static_assert
检测何时可能出现问题。像这样:
static_assert(sizeof(std::streamsize) <= sizeof(long long), "Oops.");
老实说,我不担心。 long long
很有可能成为您的编译器 native 支持的最大整数大小。
关于c++ - std::streampos、std::streamoff 和 std::streamsize 到 long long int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12774038/
当我想找出streamsize的实际数据类型时,cpp引用说 Type to represent sizes and character counts in streams. It is a type
我有这行来获取文件大小 std::streamoff _responseLength = _responseIn.tellg(); 我正在为一个 wchar_t 指针分配内存, wchar_t* _r
streampos 之间有什么区别?和 pos_type , streamoff和 off_type , 除了它们的定义不同。我应该将 basic_stream<>::seek 与什么一起使用?的功能
我想使用 std::streamoff和 std::streamsize类型而无需拉动 iostream 库的很大一部分。现在,我包括 header 。有没有更好的方法进行? 最佳答案 它们在 he
为了测量流的位置/偏移量/大小,标准指定了 std::streampos、std::streamoff 和 std::streamsize,但它们是实现定义的。 如何以安全且可移植的方式将这些类型转换
如果我们查看 istream 和 ostream 的文档,我们有以下功能: istream& seekg ( streampos pos ); istream& seekg ( streamoff o
我是一名优秀的程序员,十分优秀!