在哪个C++编译器中,我可以为结构变量赋值

In which C++ Compilers I can assign values to struct variables?

本文关键字:我可以 结构 变量 赋值 C++ 编译器      更新时间:2023-10-16

我不确定我应该如何命名这个问题。这可能是一个菜鸟问题,但无论如何...
我现在真的不知道为什么在 C++ 中以 struct 分配值在 Linux(Ubuntu) 中不起作用,但在 Windows 中不起作用(我在 Windows 中编译同一程序时出错)
这取决于编译器,是吗?或者还有别的事情我应该知道?

#include <iostream>
#include <fstream>
const char data[] = "data.txt";
const char result[] = "data_result.txt";
const int Cn = 10;
struct Players{
    /*Assigning values in struct does not work in windows */
    int Health = 100;
    int Mana = 120;
    int Experience = 0;
};
struct Players Player[Cn];
int main(){

    return 0;
}

"默认"值分配给C++中的结构或类是一项仅在 C++11 中才成为一项功能的功能。因此,可以公平地说,您的 Windows 编译器要么不支持 C++11,要么没有收到正确的编译参数来使用 C++11 进行编译。

您的问题是"我可以在哪个C++编译器中为结构变量赋值"。

我的答案是"从所有编译的c ++编译器,符合c ++ 98向前"。 都允许初始化结构数据属性。

即使我设置了编译器选项 std=c++98,以下内容也有效

它的作用是避免C++11功能,并将数据属性初始化移动到用户定义的默认ctor中。

struct Players
{
   int Health;
   int Mana;
   int Experience;
   Players() : Health(100), Mana(120), Experience(0)
      {
      }   
   // an array of Cn Players will build Cn copies, 
   // all initialized to these same 3 values of the default ctor.
};

是的,您的代码结构确实提供了编译器 ctor(以及其他一些方法属性)。

是的,我想你真的不想使用 c++98。


更新

以下是另一个默认 ctor,尽管它可能看起来不像。

struct Players
{
   int Health;
   int Mana;
   int Experience;
   Players(int aHealth=100, int aMana=120, int anExperiance=0) : 
           Health(aHealth), Mana(aMana), Experience(anExperience)
      {
      }   
};

这是默认的 ctor,因为您可以将其调用为"玩家玩家();",并且所有方法默认值都将适用。


您可以使用"= delete."语句控制编译器为结构/类提供的内容。

您可以命令编译器不提供的方法

  //  coding standard: disallow when not used
  T(void)                  = delete; // default ctor    (1)
  ~T(void)                 = delete; // default dtor    (2)
  T(const T&)              = delete; // copy ctor       (3)
  T& operator= (const T&)  = delete; // copy assignment (4)
  T(const T&&)             = delete; // move ctor       (5)
  T& operator= (const T&&) = delete; // move assignment (6)

只需替换 T 您的类名(即玩家)

请记住,当您不想使用这些方法之一时,您不允许这样做。 如果提供了编译器 offer 方法的替代方法,请不要禁止。

相关文章: