相关疑难解决方法(0)

什么是C++仿函数及其用途?

我一直在听C++中的仿函数.有人可以给我一个关于它们是什么的概述以及在什么情况下它们会有用吗?

c++ functor function-object function-call-operator

822
推荐指数
8
解决办法
44万
查看次数

"匿名结构"标准吗?而且,真的,他们是什么?

MSDN 认为匿名结构在C++中是非标准的:

Microsoft C扩展允许您在另一个结构中声明结构变量而不为其指定名称.这些嵌套结构称为匿名结构.C++不允许匿名结构.

您可以访问匿名结构的成员,就好像它们是包含结构中的成员一样.

@ K-ballo同意.

我被告知这个功能不一定只是创建一个未命名的结构,但我不能看到标准措辞的区别.

C++ 11说:

[C++11: 9/1]:[..]一个类说明符,类头省略了class-head-name,定义了一个未命名的类.

并为缺少名称的类型定义提供完整的语法结构.

C++ 03缺少这种明确的措辞,但同样表明identifier类型定义中的类型是可选的,并在9.4.2/5和中引用了"未命名的类" 3.5/4.

  • 那么MSDN是错的,这些东西都是完全标准的吗?
  • 或者在"未命名的结构/类"之间是否存在一些微妙之处,并且当用作成员时它们会被这个C++ 03/C++ 11功能覆盖?
  • 我错过了"unnamed struct"和"anonymous struct"之间的一些根本区别吗?它们看起来像我的同义词.

c++

55
推荐指数
3
解决办法
3万
查看次数

转换运算符如何在C++中工作?

考虑这个简单的例子:

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++中工作?(即)编译器何时尝试替换转换运算符后定义的类型?

c++ conversion-operator

38
推荐指数
4
解决办法
4万
查看次数