我不知道他们使用什么方法,因为代码库巨大。
它定义了一个这样的类:
class ABC {
member_func(string c);
};
main() {
ABC("").member_func("this random string");
}
哪些代码可以让我们拨打ABC("");
?
我没有在任何地方看到该类的任何对象。
答案 0 :(得分:4)
它只构造一个ABC
类型的对象,但不会初始化该对象的任何永久内存位置。即,对ABC
构造函数的调用创建的初始化对象是临时的,并且在调用之后丢失,因为它不是在调用之后可以访问的内存位置中构造的,例如堆栈上的自动变量因此,在“真实世界”中可以进行调用的“缺失”代码是实际命名一个被构造的对象,以便以后可以访问...例如,类似于ABC my_object("");
或ABC my_object = ABC("");
。
UPDATE:在您发布的更新代码中,正在构建的内容再次是正在构造的ABC
类型的临时对象,然后是类的非静态方法{ {1}}调用ABC
正在调用member_func
的构造函数创建的临时函数。当然,为了使这段代码在“真实世界”中具有任何意义,对ABC
的调用必须包含一些在类实例外可见的副作用(即,类实例可能包含一个数据成员,它是指向调用然后修改的某个共享内存对象的指针。虽然从你发布的代码示例中看起来似乎没有来自调用的任何副作用,但是对于所有意图和目的来说都是非操作......创建了一个临时的member_func
类实例,它有一个在实例上调用的方法,然后对该实例的任何引用都会丢失,因为它没有在可从ABC
的当前范围访问的内存位置中构建。
答案 1 :(得分:3)
class ABC
{
std::string d;
public:
ABC(std::string x) // For the ABC("").
{ d = x; }
void foo(std::string x) // For the foo("").
{ std::cout << d << std::endl << x << std::endl; }
};
int main()
{
ABC("This creates a temporary object.").foo("This calls foo().");
// Is the same as...
{
ABC obj("This creates another object.");
obj.foo("This calls obj.foo().");
} // obj is destroyed.
return(0);
}
自我解释......我希望。 :)