我一直在听C++中的仿函数.有人可以给我一个关于它们是什么的概述以及在什么情况下它们会有用吗?
MSDN 认为匿名结构在C++中是非标准的:
Microsoft C扩展允许您在另一个结构中声明结构变量而不为其指定名称.这些嵌套结构称为匿名结构.C++不允许匿名结构.
您可以访问匿名结构的成员,就好像它们是包含结构中的成员一样.
我被告知这个功能不一定只是创建一个未命名的结构,但我不能看到标准措辞的区别.
C++ 11说:
[C++11: 9/1]:[..]一个类说明符,其类头省略了class-head-name,定义了一个未命名的类.
并为缺少名称的类型定义提供完整的语法结构.
C++ 03缺少这种明确的措辞,但同样表明identifier类型定义中的类型是可选的,并在9.4.2/5和中引用了"未命名的类" 3.5/4.
考虑这个简单的例子:
template <class Type>
class smartref {
public:
smartref() : data(new Type) { }
operator Type&(){ return *data; }
private:
Type* data;
};
class person {
public:
void think() { std::cout << "I am thinking"; }
};
int main() {
smartref<person> p;
p.think(); // why does not the compiler try substituting Type&?
}
Run Code Online (Sandbox Code Playgroud)
转换运算符如何在C++中工作?(即)编译器何时尝试替换转换运算符后定义的类型?