Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

int* to Constant Array

I asked this question: Array Equivalent of Bare-String

To which the answer was C++ doesn't provide this functionality for const int*s. Which is disappointing. So my question then is: In practice how do I get around this limitation?

I want to write a struct like this:

struct foo{
    const char* letters = "abc";
    const int* numbers = ???
};

I cannot:

  1. &{1, 2, 3} cause I can't take the address of an r-value
  2. array<int, 3>{{1, 2, 3}}.data() cause the memory is cleaned up immediately after initialization
  3. const int* bar(){ return new int[3]{1, 2, 3}; } cause nothing will delete this pointer

I know that I can use an auto pointer to get around this. I am not suggesting that struct foo is good code, I am trying to illustrate that the compiler makes a provision to store the const array "abc" in memory and clean it up on program exit, I want there to be a way to do that for ints as well.

Is there a way to accomplish this?

like image 900
Jonathan Mee Avatar asked Nov 29 '25 12:11

Jonathan Mee


2 Answers

How about a static which you point to - I think this what the compiler pretty much does internally for "strings literals" anyway?

static const int Numbers[] = {1, 2, 3};

struct foo{
    const char* letters = "abc";
    const int* numbers = Numbers;
};
like image 125
Mike Vine Avatar answered Dec 02 '25 00:12

Mike Vine


String literals are all you get. However, they are also enough to cover most integral data. In your case you can use

L"\1\2\3"

to get a compiler-managed array of wide characters. C++11 and later also support u8, u16, and u32 strings.

like image 42
Ben Voigt Avatar answered Dec 02 '25 00:12

Ben Voigt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!