需要类语法解释[重复]

Posted

技术标签:

【中文标题】需要类语法解释[重复]【英文标题】:Class syntax explanation required [duplicate] 【发布时间】:2013-08-08 22:11:24 【问题描述】:

我正在 Qt 环境中学习 C++,并且正在在线浏览其中的示例代码。 谁能给我解释一下这个语法?

const TicTacToe * GetTicTacToe() const  return m_tictactoe.get(); 

为什么函数的左括号前有const?是指针还是乘法?

完整的类如下,但是上面提到的指令的语法我不清楚

class QtTicTacToeWidget : public QWidget
 
   Q_OBJECT
   public:
      explicit QtTicTacToeWidget(QWidget *parent = 0);
      const TicTacToe * GetTicTacToe() const  return m_tictactoe.get(); 
      void Restart();

【问题讨论】:

你问的是哪个常量? 【参考方案1】:

第一个 const 表示变量指针TicTacToe 不能更改。函数声明后的第二个常量表示该函数内部发生的任何事情都不会改变类内部的任何成员变量。因为它实际上不会更改类上的内存数据,所以当您使用该类的任何常量对象时都可以使用它。例如:

const QtTicTacToeWidget myConstObject;
// Since myConstObject is a constant, I am not allowed to change anything inside
// the class or call any functions that may change its data.  A constant function
// is a function that does not change its own data which means I can do this:
myConstObject.GetTicTacToe();

// But I can not do the next statement because the function is not constant
// and therefore may potentially change its own data:
myConstObject.Restart();

【讨论】:

非常感谢您的详细回复...它确实清除了有关此处使用的“const”的所有内容...您能否在同一粗体行中解释星号“*”的使用?在这里,我们是否将完整的函数设为 TicTacToe 类型的指针? 这只是函数的返回值,它返回一个指向井字游戏对象的指针。【参考方案2】:

左括号前的 const 表示该函数是一个 const 成员函数。它本质上说它保证不修改类,因此可以在声明为 const 的对象上调用。

嗯,它还允许函数修改 const 类中的可变变量。

【讨论】:

非常感谢您的回复......我不确定可变变量,但后来我用谷歌搜索并学到了一些新东西......所以,据我所知,在一个常量函数中,我们如果我们声明它们是可变的,则可以修改选定的变量 是的,但不要以此为借口突然将所有内容标记为可变。当一个类在逻辑上是 const 时很有用,但仍需要修改一些数据以实现功能,例如引用计数。

以上是关于需要类语法解释[重复]的主要内容,如果未能解决你的问题,请参考以下文章

这是啥语法,含义明确[重复]

为啥java的一些概念需要使用包装类而不是原始数据类型[重复]

=> 语法的用法和解释[重复]

未捕获的语法错误:在严格模式之外尚不支持块范围的声明(let、const、函数、类)[重复]

(设计模式)解释器

sql搜索错误,需要语法解释