C++ 为不指向C+中任何内容的指针赋值+;
我有一段代码如下所示:C++ 为不指向C+中任何内容的指针赋值+;,c++,pointers,C++,Pointers,我有一段代码如下所示: class MyClass { void doSomething(std::string& stringvar) { // Does something }} class AnotherClass { /* Some data structure */ } 然后主要是程序员调用 MyClass* Class1; std::string myString = "something"; AnotherClass* SecondClass; SecondCl
class MyClass
{
void doSomething(std::string& stringvar) {
// Does something
}}
class AnotherClass
{ /* Some data structure */ }
然后主要是程序员调用
MyClass* Class1;
std::string myString = "something";
AnotherClass* SecondClass;
SecondClass = (*Class1).doSomething(myString);
我的问题是,既然我定义了一个不指向任何东西的指针,然后设置它的值,那么这会做什么呢?它将值设置为什么?随机内存插槽?在哪里?成堆还是成堆?为什么有人创建一个类只是为了编写一个函数来做一些事情?我真的不理解MyClass类,doSomething是否真的可以填充一些数据结构?如果是,那么如果它也是一个不指向任何东西的指针,那么如何和在哪里?正如你所说的,这是未定义的行为。这意味着任何事情都可以发生。可能发生的事情之一是,它的工作方式与程序员的预期一致。如果
doSomething
是一个非虚函数,并且不访问类的任何(非静态)成员变量,则这种情况尤其可能发生
这仍然是未定义的行为。一旦你改变了一些完全不相关的东西,它就会停止工作
如果我的诊断是正确的,那么解决方案是将doSomething
设置为静态成员函数,并将其调用为:
secondVar = MyClass::doSomething(mystring);
我正在定义一个指针,它不指向任何东西,然后设置它的值?它将值设置为什么?随机内存插槽?在哪里?成堆还是成堆
嗯,很好。没有答案。从字面上看,结果是未定义的。它向我的右眼发送电磁脉冲
为什么有人创建一个类只是为了编写一个函数来做一些事情
无能是存在的
我真的不理解MyClass类,doSomething是否真的可以填充一些数据结构
这是可能的,但我们不能不看就告诉你
如果是,那么如果它也是一个不指向任何东西的指针,那么它是如何和在哪里的呢
有些人认为,只要他们不使用任何成员变量,他们就可以通过狡猾的指针调用成员函数,因为“它对我有用”
那些人错了。程序具有未定义的行为
我曾经和一个习惯使用静态成员函数的人一起工作,因为他们不知道您可以(应该)编写
Class1::doSomething(myString)
它是未定义的行为,所以它所做的是未定义的。创建指针MyClass*Class1
指向堆栈上的垃圾。所以它会崩溃。@M4rc这是无法保证的,你是说secondVar=(*Class1).doSomething(myString)代码>?将void函数的返回值赋给变量…您是如何编译的?!谢谢这个类调用了一些狡猾的fortran例程,如果不向您展示整个框架,我就无法详细说明,我给您的信息总是不完整的。我不是一个真正的C++程序员,我是一个物理学家,他使用C++框架来分析一些数据。但我想了解它。另外,我有一种强烈的感觉,这个框架不是程序员写的,也是物理学家写的。@user74200:我怀疑你的感觉是正确的。