发射和发射之间的区别()

时间:2014-04-12 21:56:37

标签: c++ qt qtcore qt-signals moc

在Qt中,它们都是有效的,行为相同:

emit someSignal(value);

VS

emit(someSignal(value));

有什么不同吗?

3 个答案:

答案 0 :(得分:9)

  

有什么不同吗?

除了外部括号之外没有其他区别,因此程序员会更喜欢它,而且它也更常用于Qt项目。

无差异的原因是由于:

# define emit

您可以看到此in the source code的定义。

因此,它基本上只是声明为"空"字符串和预处理器会将您的变体替换为:

someSignal(value);

(someSignal(value));

如果为了快速测试,您可以在运行预处理器后停止执行编译器,例如,在gcc的情况下-E选项。

更多信息:评论中有人对emit关键字有疑问,因为它污染了全局宏命名空间。这是事实,但这是一种确保有一些共同的方式来做这件事的好方法。

另一方面,这不是强制性的,所以任何人都可以重新定义,取消定义,甚至将其关闭by telling Qt,不要使用如下关键字:

CONFIG += no_keywords

这样,仍然可以将Qt信号槽机制与Q_SIGNALQ_SIGNALSQ_SLOTQ_SLOTSQ_EMIT一起使用,这一切。

您可以在此处找到关于Q_EMIT的{​​{3}},例如:

  

Q_EMIT

     

如果要将Qt信号和插槽与第三方信号/插槽机制一起使用,请使用此宏替换emit关键字以发出信号。

     

当使用.pro文件中的CONFIG变量指定no_keywords时,通常会使用该宏,但即使未指定no_keywords也可以使用它。

答案 1 :(得分:5)

没有区别。实际上,emit被定义为空宏,所以只需

someSignal(value);

也是等同的。 emit只会让您更明显地触发Qt信号。

答案 2 :(得分:1)

绝对没有区别。它是一个空的预处理器定义,因此在编译器看到代码之前就被删除了。就编译器而言,它甚至不存在。

它纯粹是为了程序员的利益而存在,让他/她知道在这一点上,可能会处理一个信号并且可能有助于调试代码。