gpt4 book ai didi

c++ - 从 std::size_t* 到 long unsigned int* 的无效转换

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:32 27 4
gpt4 key购买 nike

在 raspberry pi - arv7l 上,我正在编译以下 C++ 程序

#include <iostream>

void fun(unsigned long int* i)
{
std::cout << *i << std::endl;
}


int main()
{
std::size_t i = 1;
fun(&i);
return 0;
}

对于上面的代码,我收到以下错误:

a.cpp: In function 'int main()':
a.cpp:12:9: error: invalid conversion from 'std::size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
fun(&i);
^~
a.cpp:3:6: note: initializing argument 1 of 'void fun(long unsigned int*)'
void fun(unsigned long int* i)
^~~

我知道在 32 位系统上 size_t 是 32 位并且可能与 unsigned long 不同,但这仍然应该编译吗?

关于各种类型的尺寸:

sizeof(size_t): 4
sizeof(unsigned int): 4
sizeof(unsigned long int): 4

sizeof(size_t*): 4
sizeof(unsigned int*): 4
sizeof(unsigned long int*): 4

系统:Linux turtlebot 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux

编译器:gcc-6.3

最佳答案

I understand that on 32-bit systems size_t is 32 bit and may be different than unsigned long but still this should compile?

这是不正确的。类型具有相同的大小是正确的,但大小并不是使类型成为类型的原因。例如,我们有 signed charunsigned charchar。这三个的大小都是 1,但是这三个都是由标准命名的不同类型。

在你的情况下 size_t* 是一个 unsigned int* 并且因为它是一个不同于 long unsigned int* 的类型,你不能隐式地将其转换为一个。

关于c++ - 从 std::size_t* 到 long unsigned int* 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56060272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com