簡體   English   中英

在對臨時函數對象的調用中解析歧義

[英]Parsing ambiguity in a call to a temporary function object

我懷疑在下面的代碼中,由於最令人煩惱的解析問題,使用構造函數參數和函數調用操作符參數調用臨時函數對象在某種程度上是模糊的。

#include <iostream>

class Fun
{
public:
        explicit Fun(int i): v_(i) {}

        void operator()(int j) const 
        { 
                std::cout << (v_ + j) << "\n"; 
        }

private:
        int v_; 
};

int main()
{
        int a = 1;
        int b = 2;

        Fun(a)(b);   // ERROR: conflicting declaration 'Fun a'
        (Fun(a))(b); // OK: prints 3
        return 0;
}

Ideone上的輸出。

添加像(Fun(a))(b)這樣的括號可以解決問題,但我不太明白Fun(a)(b)如何被解析為一個聲明Fun a

不幸的是Fun(a)(b); 可以解析為Fun a(b); 這是一個聲明,而不是一個臨時對象。

看到最煩惱的解析

理解函數聲明語法的簡單示例:

#include <iostream>

void (foo)(int a) {
   std::cout << a << std::endl;
}

int main() {
   foo(5);
}

所以在你的情況下你必須使用這個:

Fun(a).operator()(b); 
(Fun(a))(b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM