草庐IT

function-call-operator

全部标签

c++ - operator()() 定义了什么?

如果这个问题被举报,我很抱歉,但我似乎无法轻松地在线找到解决方案。如果我覆盖operator()()这定义了什么行为? 最佳答案 operator()是函数调用操作符,即可以使用对应类型的对象作为函数对象。第二组括号包含空的参数列表(和往常一样)。例如:structfoo{intoperator()(){return17;};};intmain(){foof;returnf();//useobjectlikeafunction}上面的例子只是展示了运算符是如何声明和调用的。实际使用可能会访问运算符中的成员变量。函数对象在标准C++库

c++ - std::functions 是否由 C++11 编译器内联?

我正在使用C++11开发一个小型数学优化框架,我想知道用户提供特定领域逻辑的最佳方式是什么。我可以强制她用框架可以调用的钩子(Hook)方法定义类,但我想保持精简并尽可能利用新的C++11工具。所以我正在考虑接受可能从lambda表达式实例化的std::function对象作为参数,并在需要时调用它们。我唯一想知道的是编译器(在我的例子中是gcc,但我也想了解Xcode和VisualC++)是否能够获取std::function对象并内联函数定义,以便它们与其余代码一起优化。PS:从评论来看,我的问题的第一次修改对大多数用户来说似乎是晦涩难懂的,这可能是我使用了不正确的语言的错。所以我

c++ - 为什么 std::vector 需要 operator =

我有一个关于我们可以存储在vector中的类的问题。可以存储在vector中的要求是什么?似乎这样的类必须有赋值运算符。但我不确定是否仅此而已。让我举个例子。A类有constint成员。如果我不写operator=,它就不会编译。但是在这个例子中,这个操作符什么都不做。该程序正确显示10和20。看起来operator=是必需的,但实际上并没有使用。#include#includeclassA{public:A(inta):a_(a){}A&operator=(constA&a2){return*this;}//Withoutthis,compilefails.voidprint()co

c++ - __FUNCTION__ 上的 PSTR()

使用avr-gcc可以将数据存储在程序内存中以节省RAM。这是使用PROGMEMattribute完成的.AVR-libc还提供了一个宏,PSTR(),可用于文字字符串。现在我正在尝试将PSTR()与__func__,__FUNCTION__or__PRETTY_FUNCTION__.一起使用以下代码按预期工作,display.message(__func__,2);display.message(__FUNCTION__,2);display.message(__PRETTY_FUNCTION__,2);,当任何这些行的编译失败时,display.messageP(PSTR(__fu

c++ - 传入 A::operator new() 的大小是否总是等于 sizeof(A)?

structAfinal{inta;void*operatornew(size_tsize){////Issizealwaysequaltosizeof(A)here?//return::operatornew(size);}voidoperatordelete(void*ptr){::operatordelete(ptr);}};intmain(){for(autoi=0;i我的问题也嵌入了代码中。C++标准是否保证传入A::operatornew()的大小始终相同?更新:在这里,只考虑A是最终类。 最佳答案 引自C++11标准,

c++ - 在 C++ 的三规则中,为什么 operator= 不调用复制构造函数?

以下“最小”示例应显示ruleof3(andahalf)的用法.#include#includeclassC{std::string*str;public:C():str(newstd::string("defaultconstructed")){std::cout像这样编译它(g++版本:4.7.1):g++-Walltest.cpp-otest现在,应该发生什么?我假设行a=b.get_new();会制作一个硬拷贝,即分配一个新字符串。原因:operator=()按照此设计模式中的典型情况采用其参数,每个值调用一个复制构造函数,该构造函数将进行深层复制。究竟发生了什么?stdcto

c++ - 为什么 std::function 的初始化器必须是 CopyConstructible?

根据http://en.cppreference.com/w/cpp/utility/functional/function/function,初始化器的类型,即形式(5)中的F,应该满足CopyConstructible的要求。我不太明白这个。为什么F不能只是MoveConstructible? 最佳答案 std::function在内部使用类型删除,因此F必须是CopyConstructible,即使您正在使用的特定std::function对象从未被复制。类型删除工作原理的简化:classFunction{structConc

c++ - 错误 : invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator<<'

我想获取z_Data的第48个字符的第6位{charc=pPkt->z_Data[47];//thisz_Dataisacharbufferstd::cout>3)&1>4)&1>5)&1 最佳答案 优先级高于&,所以你需要:std::cout>3)&1)>4)&1)>5)&1) 关于c++-错误:invalidoperandsoftypes'int'and''tobinary'operator https://stackoverflow.com/questions/246

c++ - 为什么fstream不利用operator>>的istream原型(prototype)?

我有一个使用友元函数重载运算符的类>>。重载运算符方法在标准cin使用上测试得很好。但是,当我尝试将代码升级为使用ifstream对象而不是istream对象时,原型(prototype)未被识别为有效方法。我的理解是ifstream继承自istream,因此,多态性应该允许ifstream对象与istream重载函数一起操作。我的理解有什么问题吗?是否有必要为每种输入流类型复制函数?类:#include#include#includeusingnamespacestd;classHospital{public:Hospital(std::stringname);std::string

c++ - 为什么 vector::operator[] 的实现方式与 map::operator[] 不同?

std::vector的operator[]是否有任何理由只返回一个引用而不是插入一个新元素?vector::operator的cppreference.com页面显示hereUnlikestd::map::operator[],thisoperatorneverinsertsanewelementintothecontainer.map::operator[]的页面says"Returnsareferencetothevaluethatismappedtoakeyequivalenttokey,performinganinsertionifsuchkeydoesnotalreadye