【问题标题】:C++ - Parentheses after variable name in declarationC++ - 声明中变量名后的括号
【发布时间】:2018-09-26 10:35:47
【问题描述】:

我正在查看some Arduino code 并遇到了我以前从未见过的构造:

CRGBPalette16 currentPalette( CRGB::Black );

CRGB::Black 是一个常数,正如一些人指出的那样,它是一个数字。

在后面的代码中,作者似乎直接写给currentPalette(或其他类似变量),如下所示:currentPalette[12] = CRGB::Black;

currentPalette 是一个对象实例吗?如果是这样,你怎么能像访问数组一样访问它?

【问题讨论】:

  • 它不是有效的 C。但它可能是 C++。
  • 它也可能是 C 中的宏。编辑:不,它不能。但是,看了其余的代码,我相信它确实是 C++。
  • 你确定CRGB::Black 实际上是一个结构体而不是一个枚举常量吗?
  • @wildplasser:它是 Arduino 语言,它是 C++ 的未指定、未记录(基本上是“无论 Arduino IDE 接受什么”)的近亲。实际的编译器是 GCC 的一个分支,但 IDE 对代码进行了一些预处理和包装(例如生成合适的main 方法)。
  • CRGB::Black 是一个数字,而不是一个结构。 CRGBPalette16 有许多构造函数,具有不同数量的参数。相关:FastLED reference.

标签: c++ arduino variable-declaration


【解决方案1】:

看过the rest of the file,我相信您正在查看一些C++ 代码。

CRGBPalette16 currentPalette( CRGB::Black );

这一行用枚举参数CRGB::Black初始化一个CRGBPalette16类型的对象

您可以看到该对象作为引用传递给其他函数,例如第 72 行:

leds[i] = ColorFromPalette( currentPalette, colorIndex + sin8(i*16), brightness);

【讨论】:

  • 谢谢。所以 CRGBPalette16 是一个对象,我们在这里调用它的构造函数?这很奇怪,因为您可以像这样直接分配给它:currentPalette[12] = 0xffcc88;
  • 一点也不奇怪,因为您可以为对象定义重载运算符。看看learncpp.com/cpp-tutorial/98-overloading-the-subscript-operator
  • 编辑:刚刚在我上一条评论中意识到我的错误。它应该说“您可以为对象的下标运算符定义重载”。
猜你喜欢
  • 1970-01-01
  • 2015-06-22
  • 2010-09-19
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-21
相关资源
最近更新 更多