Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个C++语法意味着什么?内联常量颜色(&EnumValuesColor())[3]{…}`_C++ - Fatal编程技术网

这个C++语法意味着什么?内联常量颜色(&EnumValuesColor())[3]{…}`

这个C++语法意味着什么?内联常量颜色(&EnumValuesColor())[3]{…}`,c++,C++,内联常量颜色和枚举值颜色[3]{…} 它是一个函数吗?我不懂语法 它与通常的语法类型nameparams{…}非常不同 它由flatbuffers生成 它在里面: enum Color { Color_Red = 0, Color_Green = 1, Color_Blue = 2, Color_MIN = Color_Red, Color_MAX = Color_Blue }; inline const Color (&EnumValuesColor())[3]

内联常量颜色和枚举值颜色[3]{…}

它是一个函数吗?我不懂语法

它与通常的语法类型nameparams{…}非常不同

它由flatbuffers生成

它在里面:

enum Color {
  Color_Red = 0,
  Color_Green = 1,
  Color_Blue = 2,
  Color_MIN = Color_Red,
  Color_MAX = Color_Blue
};

inline const Color (&EnumValuesColor())[3] { //<< here
  static const Color values[] = {
    Color_Red,
    Color_Green,
    Color_Blue
  };
  return values;
}

inline const char * const *EnumNamesColor() {
  static const char * const names[4] = {
    "Red",
    "Green",
    "Blue",
    nullptr
  };
  return names;
}

inline const char *EnumNameColor(Color e) {
  if (flatbuffers::IsOutRange(e, Color_Red, Color_Blue)) return "";
  const size_t index = static_cast<size_t>(e);
  return EnumNamesColor()[index];
}
//more codes... 
这只是一个基本的例子

它是一个函数吗

数组在C++继承的C语法中有点语法错误。方括号放在声明的最后。以下是一个可变示例:

element_type variable_name [array_size];
指针和引用也有不可靠的语法,尤其是与数组组合时。以下内容很简单:

// array of pointers
element_type * variable_name [array_size];
// array of references - this is not allowed
element_type & variable_name [array_size];
但是如果我们想要一个数组的引用或指针呢?我们在名称和标点符号周围添加括号,表示它应用于变量而不是数组元素:

// pointer to array
element_type (* variable_name) [array_size];
// reference to array
element_type (& variable_name) [array_size];
现在来谈谈函数。无法返回数组,但可以返回指向数组的指针或引用。就像在变量的情况下一样,方括号放在声明的末尾,一直放在参数列表之后。括号不仅环绕标点符号和名称,还环绕参数列表:

// function that returns pointer to array
element_type (* function_name (parameter_list)) [array_size];
// function that returns reference to array
element_type (& function_name (parameter_list)) [array_size];
我建议不要编写这样的函数,而是利用类型别名使其更易于阅读:

using Color3 = Color[3];
inline const Color3 & EnumValuesColor();
或者使用std::数组模板:

inline const std::array<Color, 3> & EnumValuesColor();
要真正理解任何类似C的声明是如何工作的,您可以自学。坦白说,除非你打算写一个C或C++分析器,否则我不会费心的。不理解不必要的复杂声明会更容易防止自己编写不可读的声明

如果您遇到不理解的内容,请让程序为您解析:

它是一个函数吗

数组在C++继承的C语法中有点语法错误。方括号放在声明的最后。以下是一个可变示例:

element_type variable_name [array_size];
指针和引用也有不可靠的语法,尤其是与数组组合时。以下内容很简单:

// array of pointers
element_type * variable_name [array_size];
// array of references - this is not allowed
element_type & variable_name [array_size];
但是如果我们想要一个数组的引用或指针呢?我们在名称和标点符号周围添加括号,表示它应用于变量而不是数组元素:

// pointer to array
element_type (* variable_name) [array_size];
// reference to array
element_type (& variable_name) [array_size];
现在来谈谈函数。无法返回数组,但可以返回指向数组的指针或引用。就像在变量的情况下一样,方括号放在声明的末尾,一直放在参数列表之后。括号不仅环绕标点符号和名称,还环绕参数列表:

// function that returns pointer to array
element_type (* function_name (parameter_list)) [array_size];
// function that returns reference to array
element_type (& function_name (parameter_list)) [array_size];
我建议不要编写这样的函数,而是利用类型别名使其更易于阅读:

using Color3 = Color[3];
inline const Color3 & EnumValuesColor();
或者使用std::数组模板:

inline const std::array<Color, 3> & EnumValuesColor();
要真正理解任何类似C的声明是如何工作的,您可以自学。坦白说,除非你打算写一个C或C++分析器,否则我不会费心的。不理解不必要的复杂声明会更容易防止自己编写不可读的声明


如果您遇到一些您不理解的问题,让程序为您解析:

特别是-您困惑了什么?@DanielA.White这是一个函数吗?我不理解你必须从里到外、从右到左阅读的语法,所以从内部的副题开始:&EnumValuesColor内部是EnumValuesColor,然后向右查找,向左查找&。因此EnumValuesColor是一个返回引用的函数。然后看看其余部分:const Color和EnumValuesColor[3]。里面是一个函数,返回一个引用,右边是[3],三个数组,左边是颜色,所以我们有一个函数,返回一个对三色数组的引用,但是中A::foo的语法看起来有点类似……相关:具体地说,您有什么疑惑?@DanielA.White它是函数吗?我不理解你必须从里到外、从右到左阅读的语法,所以从内部的副题开始:&EnumValuesColor内部是EnumValuesColor,然后向右查找,向左查找&。因此EnumValuesColor是一个返回引用的函数。然后看看其余部分:const Color和EnumValuesColor[3]。里面是一个函数,返回一个引用,右边是[3],三个数组,左边是颜色,所以我们有一个函数,返回一个对三色对象数组的引用。我对重复对象的搜索失败了,但是中a::foo的语法看起来有点类似……相关: