类名()是否等效于类对象
Is the classname() equivalent to a class object?
我知道这可能是一个愚蠢的问题,但我不知道如何正确描述它。例如,当我尝试调用std::transform
函数时,
template < class InputIterator, class OutputIterator, class UnaryOperator >
OutputIterator transform ( InputIterator first1, InputIterator last1,
OutputIterator result, UnaryOperator op )
可以写入CCD_ 2然后调用CCD_ 3
然而,我也看到人们只写transform(..,..,..,UnaryOperator());
我的问题是:classname()
等价于类对象,这是真的吗?
我不知道你所说的classname()
到底是什么意思,但当你这样写时:
UnaryOperator op;
transform(..,..,.., op);
创建UnaryOperator
类的op
对象并将其传递给transform
。它的生存期取决于定义它的范围。也就是说,您可以在呼叫transform
之后访问它。
当你这样写的时候:
transform(..,..,.., UnaryOperator());
您实际上创建了一个UnaryOperator
类的临时对象,并将其传递给transform
函数,它的生存期与表达式绑定。此外,在这种情况下,它将是一个常量引用或"右值"。而在第一种情况下,它要么是非常数参考,要么是常数参考。
对于给定的类型T
,在适当的情况下,表达式T()
计算为临时的、默认构造的T
类型的对象。以下是一些可以使用的情况:
// Ex 1:
T x; x = T(); // overwrite `x` with a copy of a default-T
// Ex 2:
T x = T(); // copy-initialize from default-T (probably elided)
// Ex 3 (note that temporaries bind to const&):
void foo(int n = 10, T const & t = T()); // default argument
// Ex 4:
std::string format_me(int a)
{
return static_cast<std::ostringstream&>(std::ostringstream() << a).str();
// temporary ^^^^^^^^^^^^^^^^^^^^
}
小心T()
意味着其他东西的情况:
{
T t(T()); // `t` is _not_ an object of type T!
}
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 在c++中访问int到类对象的映射时出错
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 从父类方法返回子类对象
- 试图理解类对象的行为
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 将父类对象强制转换为子类的问题
- 类对象数组的问题会导致崩溃
- 对具有动态分配的内存和析构函数的类对象的引用
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 使用循环创建类对象
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 仅将方法应用于类的一个对象
- 请澄清术语类静态对象(相对于类静态成员)
- 类名()是否等效于类对象
- 新的新类对象的函数;错误:非静态成员引用必须相对于特定对象
- 如何使 set:: find() 适用于自定义类对象
- C++类方法,可以使用虚拟调度或类似于没有对象上下文的静态函数来调用
- 在另一个类内部构造一个类(非静态成员引用必须相对于特定对象)
- 哪个子类对象存在于某个索引