gpt4 book ai didi

c++ - 我怎样才能声明一个常量数据成员但稍后才初始化它?

转载 作者:太空狗 更新时间:2023-10-29 21:25:04 24 4
gpt4 key购买 nike

假设在我的 main 方法中,我声明了一个指向在堆上创建的数组的 const int 数组指针。然后我想在构造函数 TryInitialize() 中初始化它的值(使用内存地址),然后将它们打印出来。这不起作用,我想知道我做错了什么?谢谢!

#include "stdafx.h"
#include "part_one.h"
#include <string>
#include <iostream>

using namespace std;

string createTable(unsigned int* acc, double* bal, int n) {
string s;
char buf[50];

for (int i = 0; i < n; i++) {
sprintf_s(buf,"%7u\t%10.2f\n",acc[i], bal[i]);
s += string(buf);
}

return s;
}



int _tmain(int argc, _TCHAR* argv[])
{

const int *tempInt = new const int[4];
TryInitialize(tempInt);
std::cout << tempInt[1] << endl;

system("pause");

return 0;
}

这是我的构造函数代码:

#include "part_one.h"


TryInitialize::TryInitialize(void) {

}

TryInitialize::TryInitialize(int constInt[]) {
constInt[0] = 8;
constInt[1] = 0;
constInt[2] = 0;
constInt[3] = 8;
}

最佳答案

您不应更改 const 值。

对于你想要完成的事情,我建议声明一个非常量指针和一个常量指针,并在初始化后将非常量指针分配给常量指针:

int _tmain(int argc, _TCHAR* argv[])
{
const int *tempTempInt = new int[4];
TryInitialize(tempInt);
const int* const tempInt = tempTempInt;
std::cout << tempInt[1] << endl; //this is now constant.

system("pause");

return 0;
}

还要注意在指针声明中放置 const 的位置:

const int* const tempInt = tempTempInt;

在上面的声明中,第二个const 表示您不能更改指针;第一个 const 表示您不能更改指向的值。

关于c++ - 我怎样才能声明一个常量数据成员但稍后才初始化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14638134/

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