gpt4 book ai didi

C++ 返回一个 const unsigned char

转载 作者:行者123 更新时间:2023-11-30 00:42:47 24 4
gpt4 key购买 nike

所以,我一直在努力解决这个问题。我有一个简单的函数,定义如下:

const unsigned char GetColor(unsigned int x, unsigned int y)
{
const unsigned char color[3] = {0, 1, 0};
return color;
}

然而,我不允许这样做,编译器返回以下错误:

Error: cannot initialize return object of type 'const unsigned char' with an lvalue of type 'const unsigned char [3]'

我是否应该将数组转换为指向数组的指针,我应该返回它?如果我这样做,难道我不会冒它可能在“超出范围”(也就是超出功能范围)后被删除的风险吗?

任何有助于理解这个问题的帮助将不胜感激:)

编辑:最终目标是拥有一个函数,它可以在给定 x 和 y 值的情况下返回像素位置的颜色。这意味着颜色会根据 x 和 y 的值发生变化。上面的例子是一个简化。

它应该返回一个大小为 3 的 const unsigned char 数组,每个数组都有一个值。

最佳答案

您想返回一个数字数组。你是对的,试图传递某种对局部变量的引用会产生范围问题(技术上称为悬垂指针/悬垂引用),尽管原因与所指出的不同。 (编译器只是提示单个 charchar 数组之间的类型不一致。)

C++ 为您提供了几种安全 的方法。例如,您可以返回 array输入:

#include <array>

std::array<unsigned char, 3> GetColor(unsigned int x, unsigned int y)
{
return {0, 1, 0};
}

这使得“三个字符”成为一个包含三个字符的特殊类型的单个变量,就像 struct { unsigned char a, b, c; } .或者您可以创建自己的类型来执行类似的操作。

在上面,您可以想象“返回变量”是编译器以一种不可见的方式声明的,就好像它的范围是您调用函数的语句。 return语句写入此变量,而不是此函数的本地数组。

显然,您需要更改调用代码,使其期望 std::array<unsigned char, 3>而不是 unsigned char[3] , 但是 a) 以前的版本无论如何都不能工作,所以我们说的是新代码而不是试图改变现有的代码库,和 b) std::array在新代码中,s 通常比 C 风格的数组更受欢迎,值得学习使用它们。

当然,总有不安全的方式,例如:

unsigned char* GetColor(unsigned int x, unsigned int y)
{
unsigned char* ret = new unsigned char[3] { 0, 1, 0 };
return ret;
}

但是你一定不能忘记delete[]一旦您不再需要它,返回的指针。

关于C++ 返回一个 const unsigned char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58270167/

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