“最令人烦恼的解析”歧义:解开统一初始化器
在 C 领域,可能会出现“最令人烦恼的解析”歧义当遇到统一初始值设定项时,如以下代码所示:
<code class="cpp">class Timer { public: Timer() {} }; int main() { auto dv = Timer(); // What is Timer() ? And what type is dv? int time_keeper(Timer()); // This is a function right? And why isn't the argument "Timer (*) ()"? return 0; }</code>
解释 dv
auto dv = Timer(); 行中,dv 的类型取决于 Timer() 的解释。这可以是:
在这种情况下,它表示构造函数调用,导致 dv 成为 Timer 类型的对象。 auto 关键字根据初始值设定项推断类型。
理解 time_keeper
在 int time_keeper(Timer()); 行中,声明了一个名为 time_keeper 的函数。正如人们所期望的那样,该参数不是 Timer (*) () 类型的函数指针。相反,它表示一个指向返回 Timer 且不带参数的函数的指针。这是因为:
结论
“最令人烦恼的解析”歧义凸显了混淆的可能性在解释 C 中的某些结构时。理解统一初始化和函数衰减的概念对于正确理解此类场景至关重要。
以上是`Timer()` 是构造函数调用还是函数调用? C 语言中'最令人烦恼的解析”歧义的详细内容。更多信息请关注PHP中文网其他相关文章!