我在浏览cppreference 时看到vectorC++20 中删除了它的比较操作,并<=>引入了飞船运算符 ( )。对于许多其他标准库容器,如set和 ,可以看到同样的事情map。
如何在新标准中进行比较?另外,C++20 会开始在旧代码上出错吗?
我知道函子是一个函数对象,是结构定义中()运算符的重载。同样,在算法中使用函子似乎很简单,只需调用此例程即可。
但是,我无法理解比较器。为什么在模板参数中首先使用它们。
有人可以详细说明两者之间的区别吗?
编辑:
我正在寻找以下问题的答案
我真的很困惑在字符串上使用指针.感觉他们遵守不同的规则.请考虑以下代码
char *ptr = "apple";// perfectly valid here not when declaring afterwards like next
ptr = "apple"; // shouldn't it be *ptr = "apple"
Run Code Online (Sandbox Code Playgroud)也printf()表现不同-
printf("%s", ptr) // Why should I send the address instead of the value
Run Code Online (Sandbox Code Playgroud)我还在一本书中看到了以下代码
char str[]="Quest";
char *p="Quest";
str++; // error, constant pointer can't change
*str='Z'; // works, because pointer is not constant
p++; // works, because pointer is not constant
*p = 'M'; // error, because string is constant
Run Code Online (Sandbox Code Playgroud)我无法理解应该暗示什么
请帮忙,我在其他地方找不到任何信息
所以我先写了下面的代码,却遇到了编译错误。阅读此答案后: 静态数组类变量“多重定义”C++ 我修改了我的代码并将静态变量定义移动到一个 cpp 文件并且它执行得很好,但是我无法理解当我使用了预处理器防护时,为什么它显示多个定义错误?
#ifndef GRAPH_H
#define GRAPH_H
#include<iostream>
#include<vector>
using namespace std;
struct node{
int element=0;
static vector<bool> check;
node(){
if(check.size()<element+1)
check.resize(element+1);
}
};
vector<bool> node::check;
#endif
Run Code Online (Sandbox Code Playgroud) 根据一个定义规则,类和结构定义不得在单个翻译单元中重复。
但是,为什么这样的话,如果它们实际上是定义,则允许以多个翻译单元重复它们。在这种情况下,链接器为什么不引发多定义错误?
例如-以下操作应通过相同的逻辑引发多个定义错误
测试
#ifndef TEST
#define TEST
class s {
int a;
int b;
};
#endif
Run Code Online (Sandbox Code Playgroud)
test1.cpp
#include "test.h"
int main() {}
Run Code Online (Sandbox Code Playgroud)
test2.cpp
#include "test.h"
Run Code Online (Sandbox Code Playgroud)