【发布时间】:2012-09-17 05:37:17
【问题描述】:
我正在编写一些代码,其中包含大量相当简单的对象,我希望在编译时创建它们。我认为编译器能够做到这一点,但我无法弄清楚如何。
在 C 中,我可以执行以下操作:
#include <stdio.h>
typedef struct data_s {
int a;
int b;
char *c;
} info;
info list[] = {
1, 2, "a",
3, 4, "b",
};
main()
{
int i;
for (i = 0; i < sizeof(list)/sizeof(*list); i++) {
printf("%d %s\n", i, list[i].c);
}
}
使用#C++* 每个对象都有它的构造函数被调用,而不是仅仅被放置在内存中。
#include <iostream>
using std::cout;
using std::endl;
class Info {
const int a;
const int b;
const char *c;
public:
Info(const int, const int, const char *);
const int get_a() { return a; };
const int get_b() { return b; };
const char *get_c() const { return c; };
};
Info::Info(const int a, const int b, const char *c) : a(a), b(b), c(c) {};
Info list[] = {
Info(1, 2, "a"),
Info(3, 4, "b"),
};
main()
{
for (int i = 0; i < sizeof(list)/sizeof(*list); i++) {
cout << i << " " << list[i].get_c() << endl;
}
}
我只是看不到编译器无法在编译时完全实例化这些对象的信息,所以我认为我遗漏了一些东西。
【问题讨论】:
-
看看静态类或单例 idom。也许这就是你在 c++ 中寻找的东西
-
the same question on Programmers 的答案有什么问题?
-
@Najzero C++ 没有静态类。
-
@DCoder:我对你的问题的回答是:“没有提到 C++ 的方法”。当然,这假设作者打错了标题,这很可能是因为实际问题显然使用的是 C++ 而不是 C。
标签: c++ optimization gcc