【问题标题】:If statement inside Struct Declaration C++结构声明 C++ 中的 If 语句
【发布时间】:2019-12-06 06:27:55
【问题描述】:

我对 C++ 中的结构和 if 语句有疑问

为了简单起见,我创建了一个示例代码来解释我的意图

int var = 10

struct example{
    int a;
    int b;
    if(var > 8){
        int c;
    }
};

我有一个代码库,它使用与上面类似的代码。注释掉 if 部分不会给出任何错误。 我的问题是

  • 是否可以将 if 语句放入结构声明中?
  • 如果不是,有什么可能的补救措施,因为如果声明是强制性的。

注意:我无法使用#if、#else 指令、std::optional 或其他标准库来缓解这种情况,所以请帮我找到另一个解决方案。

【问题讨论】:

  • C 和 C++ 是不同的语言。仅使用适合您使用的语言的标签。 (因为标题提到了 C++ 而不是 C,所以我更喜欢 C++。)
  • “一个使用与上面类似的代码的代码库” - 它有多“相似”,更重要的是它是否符合您的要求?如果是这样,有什么理由遵循这种模式吗?
  • 那应该怎么做?它甚至不编译,所以是的,它给出了“错误”。即使这有任何意义,int c 显然也在if 的范围内,然后就消失了。
  • “我不能使用该语言提供的技术来做到这一点”......不确定你期待什么样的答案

标签: c++ if-statement struct preprocessor-directive


【解决方案1】:

不,您不能在结构或类定义中使用 if 语句。相反,对于条件声明,您可以使用#if 指令。

#define var 10
struct example {
    int a;
    int b;
    #if var > 8
        int c;
    #endif
}

这会起作用。

'#if' 是编译器指令(预处理器指令)。另一方面,if 语句是运行时语句。

除此之外别无他法!

【讨论】:

  • 很好,除了整个 "注意:我不能使用 #if,#else 指令来缓解这种情况"
  • @WhozCraig 他可以使用它们,他只是选择不使用,原因不明
  • 这是解决 OP可能想要做的唯一明智的解决方案。目前还不清楚它的意图是什么,因为在结构定义中使用像 if 这样的控制流语句是零意义的。
  • 您缺少#endif
  • @M.M 不知何故,我不敢相信 OP 实际上在这件事上有选择;从那个描述来看,他们肯定会使用预处理器,并且理解它会起作用,但在某些限制下不能(例如:学术练习)。
【解决方案2】:
int main()
{
    int var = 10;
     if(var>10){
                struct example{
                int a;
                int b;
                int c;

             };
            }else {
                    struct example{
                    int a;
                    int b;

                  };

                }
      cout<<"Hello World";

       return 0;
}

有多种方法可以解决您的问题,其中显示了一种实现方法。

我们不能在结构中添加 if 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2018-07-01
    • 1970-01-01
    • 2021-03-04
    • 2021-10-22
    相关资源
    最近更新 更多