与c++中的Null比较

Comparing to a Null in C++

本文关键字:比较 Null 中的 c++      更新时间:2023-10-16

请仔细检查我下面的代码,它只是函数的一部分

void RepeatWord(){
    system("cls");
    string word = NULL;
    string newword = NULL;
    int repeats = 0;
    while(true){
        if(word == NULL){
            cout<<"Currently no word is stored..";
            cout<<"nnPlease enter a word: ";
            cin>>word;
        }
....

我一直在使用其他编程语言,我总是与NULL值进行比较,但在c++中…这似乎是一个不同的情况。错误提示…

错误:在'word == 0'中没有匹配'operator=='

好吧,我想知道我只是比较一个NULL,我真的不知道为什么这是错误的。比较NULL与c++的值是否不同?请教我。由于

注意:我比java更懂ruby

您正在尝试将对象与NULL进行比较,您无法将对象与NULL进行比较。你需要比较一个指针。通过这样做,您可以检查指针是否指向非有效对象。

在您的情况下,您想检查std::string是否为空。可以使用std::stringstd::string::empty()提供的成员函数。

考虑到你的问题,我强调需要一本好的学习书籍:

c++图书指南和列表

如果您来自Java世界,您确实会发现c++中的对象不是以同样的方式处理的。在c++中,除非明确说明,否则数据是直接操作的。在Java中,对象完全由VM管理,因此,让程序仅通过引用访问它们是有意义的。因此,无论何时编写Java程序,都必须告诉VM使用new分配对象,然后将null分配给类实例的变量。遵循同样的原则,如果你将一个对象变量赋值给另一个对象变量,两者都将引用相同的对象,并且在其中一个上调用方法将在相同的底层实例上调用该方法。

在c++中,有两种不同的机制来获得相同的结果:

  • 使用指针,其类型T的语法为

    T *t;
    

    这样std::string *word;将定义一个名为word的变量,该变量持有指向std::string的指针。

  • 使用引用:

    T &t;
    

在c++中,这两个实际上都是类型,即。std::string, std::string *, std::string &是三种不同的类型。第一个实际上表示结构化值本身,而另外两个表示间接指向std::string类型的值。

这些间接类型之间的区别由这个SO条目解释。

在您的代码中,您必须将NULL的所有出现替换为空字符串字面量"",或者在尝试使用对象之前使用指针并使用new语句分配实例-如cin >> word;行。