相关疑难解决方法(0)

谁决定任何数据类型或结构的大小(取决于32位还是64位)?

谁决定任何数据类型或结构的大小(取决于32位还是64位)?编译器还是处理器?例如,sizeof(int)32位系统是4个字节,而64位系统是8个字节.

我还读到sizeof(int)使用32位和64位编译器编译时的4个字节.

假设我的CPU能为64位应用程序,谁在决定数据的大小起到主要作用同时运行32位和编译器或处理器

c c++ linux compiler-construction operating-system

44
推荐指数
4
解决办法
4542
查看次数

OpenCV Mat元素类型及其大小

我对OpenCV Mat元素类型感到困惑.这是来自文档:

There is a limited fixed set of primitive data types the library can operate on.
That is, array elements should have one of the following types:

8-bit unsigned integer (uchar) 
8-bit signed integer (schar)
16-bit unsigned integer (ushort)
16-bit signed integer (short)
32-bit signed integer (int)
32-bit floating-point number (float)
64-bit floating-point number (double)
...

For these basic types, the following enumeration is applied:
enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 };
Run Code Online (Sandbox Code Playgroud)

众所周知,C++标准没有以字节为单位定义基本类型的大小,那么他们如何使用这些假设呢?我应该期待什么类型,比方说CV_32S,是int32_t还是int?

opencv

34
推荐指数
2
解决办法
5万
查看次数

用于表示ANSI(C89/90)C中的字节的类型?

是否有标准投诉方法来表示ANSI(C89/90)C中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,这不能保证是这种情况.另外,在C99标准中有stdint.h,但在C99之前使用了什么?

我特别想知道8位和"字节"(sizeof(x)== 1).

c types c89

33
推荐指数
2
解决办法
2万
查看次数

为什么int在64位编译器上通常是32位?

为什么int64位编译器通常是32位?当我开始编程时,我被教过int通常与底层架构的宽度相同.我同意这也是有道理的,我发现未指定的宽度整数与底层平台一样宽是合乎逻辑的(除非我们说的是8或16位机器,这样的小范围int几乎不适用).

后来我int在大多数64位平台上学到的通常是32位.所以我想知道这是什么原因.对于存储数据,我更喜欢明确指定数据类型的宽度,因此这留下了通用用法int,这不会提供任何性能优势,至少在我的系统上我对32位和64位整数具有相同的性能.这样就留下了二进制内存占用空间,虽然不是很多,但会略有减少.

c++ compiler-construction int platform sizeof

31
推荐指数
4
解决办法
2万
查看次数

C++:将指针转换为int并稍后再返回指针是否安全?

将指针转换为int并稍后再返回指针是否安全?

如果我们知道指针是否为32位长且int是32位长怎么样?

long* juggle(long* p) {
    static_assert(sizeof(long*) == sizeof(int));
    int v = reinterpret_cast<int>(p); // or if sizeof(*)==8 choose long here
    do_some_math(v); // prevent compiler from optimizing
    return reinterpret_cast<long*>(v);
}

int main() {
    long* stuff = new long(42);
    long* ffuts = juggle(stuff); 
    std::cout << "Is this always 42? " << *ffuts << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这是否包含在标准中?

c++ pointers

24
推荐指数
4
解决办法
1万
查看次数

是否可以避免在实现文件中重复类名?

有没有办法避免Graph::实现文件中的重复,但仍然将类拆分为头+实现?如:

头文件:

#ifndef Graph_H
#define Graph_H

class Graph {
public:
    Graph(int n);
    void printGraph();
    void addEdge();
    void removeEdge();
};

#endif
Run Code Online (Sandbox Code Playgroud)

实施档案:

Graph::Graph(int n){}
void Graph::printGraph(){}
void Graph::addEdge(){}
void Graph::removeEdge(){}
Run Code Online (Sandbox Code Playgroud)

c++ syntax class

19
推荐指数
4
解决办法
5398
查看次数

为什么std :: cout没有为我的int8_t数字打印正确的值?

我有类似的东西:

int8_t value;
value = -27;

std::cout << value << std::endl;
Run Code Online (Sandbox Code Playgroud)

当我运行我的程序时,我得到一个错误的随机值<E5>输出到屏幕,但当我在gdb中运行该程序并使用p value它打印出-27,这是正确的值.有没有人有任何想法?

c++ gdb cout

12
推荐指数
1
解决办法
1万
查看次数

是什么决定了原始数据类型的大小?

对于我的一个C++编程分配,我必须在设计程序时考虑整数变量的大小.我在互联网上阅读,大多数地方都说"整数的大小取决于平台." 我不清楚这意味着什么,所以我在这里问.

  1. 是什么决定了原始数据类型的大小?

    • 处理器架构(可以是指令集大小).
    • 操作系统
    • 编译器
    • 以上的组合.
  2. 2 byte在某些系统中选择一个整数大小为s 的原因是什么,4 byte在其他系统中选择s 的原因是什么?有什么理由不能继续2字节吗?

c c++ memory types

12
推荐指数
2
解决办法
1268
查看次数

原始数据类型的大小

原始数据类型的大小究竟int取决于什么?

  • 编译器
  • 处理器
  • 发展环境

或者它是这些或其他因素的组合?
对其原因的解释将非常有帮助.

编辑:对不起混淆..我想询问关于原始数据类型如int而不是关于POD,我确实理解POD可以包括结构和结构它是一个完全不同的球游戏与填充进入图片.我已经更正了Q,这里的编辑说明应该确保关于POD的答案看起来不相关.

c c++ sizeof

11
推荐指数
2
解决办法
9508
查看次数

通过FFI将C99`bool`返回Rust的正确类型是什么?

一位同事和我一直在讨论如何通过FFI bool<stdbool.h>(又名_Bool)返回Rust.

我们想要在Rust中使用我们的C99代码:

bool
myfunc(void) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

我们让Rust了解myfunc使用extern C块:

extern "C" {
    fn myfunc() -> T;
}
Run Code Online (Sandbox Code Playgroud)

具体类型应该T是什么?

锈没有c_boollibc箱子的,如果你在网上搜索,你会发现各种GitHub的问题和RFC中,人们讨论这个问题,但真的不来,什么是正确和便携式任何共识:

据我所知:

  • boolC99中的a的大小是未定义的,除了它必须至少足够大以存储true(1)和false(0)的事实.换句话说,至少一位长.
  • 它甚至可能有点宽.
  • 它的大小可能是ABI定义的.

这一评论表明,如果一个C99 bool被传递给函数的参数或出功能的返回值,bool比C的情况下int则提升到相同大小作为int.在这种情况下,我们可以告诉Rust Tu32.

好吧,但如果(由于某种原因)C99 bool是64位宽怎么办?是否u32还安全吗?也许在这种情况下,我们会截断4个最重要的字节,这很好,因为4个最低有效字节足以表示truefalse.

我的推理是否正确?在Rust得到之前libc::c_bool,你将使用什么? …

boolean ffi type-conversion rust

11
推荐指数
1
解决办法
671
查看次数