簡體   English   中英

C++ 返回一個 const unsigned char

[英]C++ Returning a const unsigned char

所以,我一直在努力解決這個問題。 我有一個簡單的 function,定義如下:

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]'

我應該將數組轉換為指向數組的指針,我應該返回嗎? 如果我這樣做,難道我不會冒着在“超出范圍”之后將其刪除的風險——也就是超出 function 的風險嗎?

任何有助於理解這個問題的幫助將不勝感激:)

編輯:最終目標是擁有一個 function,它可以在給定 x 和 y 值的情況下在像素位置返回顏色。 這意味着顏色會根據 x- 和 y 的值發生變化。 上面的例子是一個簡化。

它應該返回一個大小為 3 的 const unsigned char 數組,每個數組都有一個值。

你想返回一個數字數組。 您是對的,嘗試將某種引用傳遞給局部變量會導致 scope 出現問題(技術上稱為懸空指針/懸空引用),盡管原因與所示不同。 (編譯器只是抱怨單個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; } struct { unsigned char a, b, c; } 或者你可以制作自己的類型來做類似的事情。

在上面,您可以想象編譯器以某種方式隱式聲明的“返回變量”,就好像它的 scope 是您調用function 的語句。 return語句寫入這個變量,而不是這個 function 的本地數組。

顯然,您需要更改調用代碼,使其期望std::array<unsigned char, 3>而不是unsigned char[3] ,但是a)以前的版本無論如何都無法正常工作,所以我們在說新代碼而不是嘗試更改現有代碼庫,並且 b) std::array通常在新代碼中優於 C 風格的 arrays 並且值得學習使用它們。

當然,總是有不安全的方式,例如:

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

但是,一旦不再需要它,您就不能忘記delete[]返回的指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM