簡體   English   中英

重載函數運算符是否允許創建在語法上類似於C ++中的函數的對象?

[英]Does overloading the function operator allows to create objects that syntactically work like functions in C++?

我遇到以下問題:

重載函數運算符

一種。 需要一個帶有重載運算符的類。

需要一個帶有重載()運算符的類。

C。 允許您創建在語法上類似於函數的對象。

d。 通常使用帶有參數的構造函數。

答案為(a),而據我所知,正確答案應為(c)。 我的邏輯是,運算符()可以在類以及結構中重載。 因此,這排除了選項(a)和(b)。 此外,當operator()重載時,創建的對象基本上將像函數一樣起作用。

例如,如果我們考慮以下因素:

struct A {
      void operator()(char c) { }
};

int main() {
        A a;
        a('z'); // operator() is invoked, hence  works like function
}

請讓我知道我在哪里錯了。 這個問題困擾了我一段時間。 謝謝

structclass都創建C ++類的類型。 這樣邏輯就失敗了。

像大多數選擇題一樣,這是垃圾。

“函數運算符”-模棱兩可。 也許是指“函數調用”運算符。 或強制轉換為指針的運算符。 http://eel.is/c%2B%2Bdraft/over.call作為猜測。 所以我會去。

C。 允許您創建在語法上類似於函數的對象。

什么是“像”? 任何對象在語法上都不能與函數名稱相同。 函數名稱在C ++中確實是很奇怪的野獸。 任何程度的相似性或差異性都可以證明或反駁這個答案。 胡說八道。

一種。 需要一個帶有重載運算符的類。

好吧,是的; 我不知道一種重載函數調用而不重載類上的運算符的方法(或者使用lambda,這對我來說就是做到這一點)。

需要一個帶有重載()運算符的類。

大多是真的。 換句話說,就是錯誤的。

template<auto x>
using k=std::integral_constant<std::decay_t<dexltype(x)>,x>;

然后

void foo(){}

k<foo> not_foo;

not_foo沒有重載的operator()not_foo()可以被認為是函數調用的重載。

但是,它確實具有重載的隱式強制轉換為函數指針。 在執行函數調用時可以選擇哪個。

所以b是錯誤的,也許。

這個問題本身並不十分精確。 消防教練,請更好的一名。

暫無
暫無

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

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