【问题标题】:How to print every member of a structure如何打印结构的每个成员
【发布时间】:2014-02-26 05:57:01
【问题描述】:

假设我有一个包含 50 个整数的结构。有没有办法打印出每个整数的值而无需手动输入?

例子:

struct foo
{
  int one; //= 1
  int two; //= 2
  int three; //= 3
  ...
  int fifty; //= 50
};
int main()
{
    foo bar;
    int dream;
    cout << someThing(bar) //prints 12345...50
}

编辑: 我意识到这样的数据应该存储在一个数组中,这只是一个假设的问题。 我只是好奇这样的事情是否存在。

【问题讨论】:

  • 你可能不应该有这样的结构。这就是数组的用途。
  • 一个包含 50 个整数的结构?立即重新考虑您的设计
  • 如何分配 int one = 1;直接构造成员的值?
  • 为了示例,我只是快速输入了 one = 1 的内容。它只是想让你知道我在问什么。
  • 您可以在 C# 等高级语言中执行此操作。这叫做反射。

标签: c++ struct


【解决方案1】:

嗯,你可能一开始就应该使用数组来做这样的事情,因为那样会让这项任务变得容易得多:-)

但是,您可以尝试将结构转换为数组并打印出来。不能保证它在每个实现中都有效,因为结构可能会以不同的方式填充到数组中,尽管我无法想象 为什么, 但你可能会很幸运:

int *base = (int*)(&bar.one);
for (int i = 0; i < 50; i++)
    std::cout << "Item #" << (i + 1) << " = " << base[i] << '\n';

例如,以下程序:

#include <iostream>

struct foo {
  int one, two, three, four;
};

int main() {
    foo bar;
    bar.one = 42;
    bar.two = 314159;
    bar.three = 271828;
    bar.four = 1414;

    int *base = (int*)(&bar.one);
    for (int i = 0; i < 4; i++)
        std::cout << "Item #" << (i + 1) << " = " << base[i] << '\n';
    return 0;
}

输出这个:

Item #1 = 42
Item #2 = 314159
Item #3 = 271828
Item #4 = 1414

在我的环境中(Debian 7,g++ 4.7.2):

但是,如果你想把它们当作一个数组来对待,它们真的应该是一个数组。

【讨论】:

  • 在其定义中初始化结构的成员不是错误吗?问题中的代码 sn-p 完全错误,应该更正。
  • @ajay 这从 C++11 开始工作,是一种无需编写自己的构造函数即可为简单结构提供预定义初始化的好方法。
  • 我会改变它,我的意思是整个事情都是 sudo 代码。
  • 看起来它在 C++11 中有效,但在早期的 C++ 标准中也不是 C。编译器在没有开关 -std=c++11 的情况下发出以下警告:warning: non-static data member initializers only available with -std=c++11
  • 而且上面的大部分 cmets 似乎都应该是针对 question. 在这个答案中我没有做 C++11 init 的事情。
猜你喜欢
  • 2012-08-30
  • 2011-12-19
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 2020-05-06
  • 1970-01-01
相关资源
最近更新 更多