与c++中的Null比较
Comparing to a Null in C++
请仔细检查我下面的代码,它只是函数的一部分
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::string
、std::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;
行。
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 我可以防止与null与超载运算符==进行比较
- 在将迭代器与C 中的null进行比较时,编译误差
- 重载后的 C++ 与 NULL 的比较 == 运算符
- 我应该将CComBSTR与NULL进行比较吗?
- 将字符串指针与 NULL 以及 NULL 字符进行比较的目的
- 将字符串的地址与 NULL 进行比较
- std::排序将元素与null进行比较
- C++比较运算符重载中第一个参数为 null 时出现分段错误
- 将对象与应等于 NULL 的 NULL 进行比较时出现分段错误
- 用于比较指针到 NULL 的编码标准
- 比较中NULL和零之间的差异
- “operator==”没有匹配项,正在将对象与NULL进行比较
- std::映射比较函数和NULL
- GCC:为什么一行代码中的错误(字符串和NULL的比较)会导致一长串错误消息
- 可以安全地将预先存在的类型转换NULL的返回与较新的nullptr进行比较吗
- 为什么比较成员函数指针为NULL会产生警告?
- 与c++中的Null比较