Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为不指向C+中任何内容的指针赋值+;_C++_Pointers - Fatal编程技术网

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:我怀疑你的感觉是正确的。