添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
如何解决vs code nullptr 未定义及相关 C++ 标准设置问题 如果你在VS Code 编辑 C++ 代码,并且遇到了 nullptr 未定义( nullptr 出现红色波浪下划线)。这实际上是VS code 编辑器 C++ 标准设置的问题,你会发现你能够正常运行代码,只是这些鲜红的警告让你很头疼。如下图是 报错 的地方。 你需要做的是打开偏好设置 的设置选项: 然后在搜索框 键入cpp standard,将cpp standard从默认修改为 c++ 11 (或其他你正在使用的 c++ 标准)。 此时再返回代码处, 报错 就消
racket-review旨在对各个Racket模块进行表面平整的整理,目的是尽快发现问题。 它不会扩展它插入的程序。 当前,它 告以下问题: [error] “提供了标识符*,但未定义” [error] “标识符已定义” [error] “如果表达式必须包含一个用于then-branch的表达式,另一个必须包含else-branch的表达式” [error] “让表单必须包含至少一个正文表达式” [error] “语法错误” [error] “在匹配表达式的失败情况下使用_而不是其他字符” [error] “ case子句必须采用(...)的形式,而不是'” [error] “将'()用于匹配模式,而不是 null null ” [warning] “租赁 的绑定应用方括号括起来” [warning] “标识符*已定义” [warn C++ null nullptr 都是表示空指针的关键字,但它们的含义和用法有所不同。 null C++ 早期版本 用来表示空指针的关键字,它实际上是一个整数常量。在 C++ 11标准 null 被定义为一个宏,它的值也是。因此,使用 null 表示空指针时,实际上是将一个整数常量赋值给指针变量。 nullptr C++ 11标准 新增的关键字,它是一个空指针常量,可以用来初始化指针变量或与指针变量进行比较。与 null 不同的是, nullptr 的类型是std:: nullptr _t,而不是整数类型。使用 nullptr 可以避免一些类型转换的问题,提高程序的安全性。 总之, null nullptr 都可以用来表示空指针,但 nullptr 更加安全和规范。在 C++ 11及以后的版本 ,建议使用 nullptr 来表示空指针。 ### 回答2: null nullptr 都是用来表示指针为空(指向空地址)的常量,但它们的实现方式和使用上还是有些区别的。 首先, null 是C语言和 C++ 03标准 用来表示空指针的常量,通常被定义为0或者((void*)0),比如在C语言 : int* p = NULL ; 而在 C++ 11标准 null 被重新定义为 nullptr ,因此在 C++ 11及以上版本 ,上述代码应该写为: int* p = nullptr ; nullptr C++ 11引入的一个新关键字,用来代替原来的 null ,可以更加安全的表示空指针。与 null 不同的是, nullptr 是一个真正的指针类型,而不是一个整数类型。它可以隐式转换为任何其他指针类型,但不能转换为整数。这样可以避免一些潜在的类型转换问题,同时还可以避免和整数类型产生混淆。 另外,使用 nullptr 还可以给编写代码者提供编译时的友好提示。对于一些接受指针作为参数的函数,有时候我们在传参时会传入一个整数0,这样的代码是合法的,但容易引起歧义。如果函数声明时使用 nullptr 作为默认参数,就可以清晰地表达这个参数是一个指针类型,而不是整数类型。 总之,虽然 null nullptr 都是用来表示空指针的常量,但 nullptr 更加安全和明确。因此,在 C++ ,建议尽量使用 nullptr 代替原来的 null 。 ### 回答3: 在C语言 null 是一个宏定义,表示空指针,通常被定义为整型常量0。在指针使用 ,通常将空指针用来表示一个无效的、未初始化或已被释放的指针。 而在 C++ 11 ,新增了一个关键字 nullptr ,用来表示空指针,它是一个特殊类型的字面量常量,可以隐式转换为任何指针类型。与 null 不同的是, nullptr 类型不是整数类型,因此可以避免在一些隐式转换 出现问题。 举个例子,考虑以下代码: ``` c++ void foo(int i) { cout << "foo(int)" << endl; void foo(char* ptr) { cout << "foo(char*)" << endl; int main() { foo( NULL ); // 会调用foo(int) foo( nullptr ); // 会调用foo(char*) return 0; 由于 NULL 被定义为整型常量0,因此在调用foo时会优先匹配int类型的参数。而使用 nullptr 则会被视为指向空指针的char*类型,因此会调用foo(char*)。 总之, nullptr 克服了传统的 null 使用 的一些缺陷,提高了 C++ 程序的类型安全性和健壮性,是一个在 C++ 11 非常有用的新特性。