#include <iostream>
#include <vector>
using namespace std;
int main(void){
vector<int> v = {1, 2, 3};
auto& it = v.begin();
// 1.
v.begin() += 1;
cout << *(v.begin()); // output is 1
// 2.
cout << *(v.begin()+1); // output is 2
}
Run Code Online (Sandbox Code Playgroud)
上面的代码显示它v.begin() += 1;没有按我的预期工作。我不知道code1和code2之间的实际区别。v.begin() 是左值还是右值?或无?
插入时而it不是v.begin()两种情况都返回 value 2。为什么会发生这样的事情呢?
我正在尝试创建仅获取 int 参数的函数。因此,当包含其他类型(double、char、bool)时,我通常delete会像下面的代码一样排除它:
#include <iostream>
using namespace std;
int add_int(int x, int y){
return x + y;
}
int add_int(double, double) = delete;
int add_int(int, double) = delete;
int add_int(double, int) = delete;
int add_int(bool, int) = delete; // need much more code.. very inefficient
int main(void){
cout << add_int(1, true) << endl; // error should happen
}
Run Code Online (Sandbox Code Playgroud)
但我觉得这样效率太低了。有没有像“仅可能是 int”或“排除 double、char、bool(我的意思是只输入一个参数)”之类的方法?
我认为在 cpp 中执行动态分配时括号“[]”和“()”是相同的,但此代码打印错误。本来,5 大小的数组应该包含索引 0 到 4,不是吗?我的代码有问题吗?我在cppreference.com上搜索过,没有找到。
#include <iostream>
using namespace std;
int main(void){
int* p1 = new int[5];
int* p2 = new int(5);
p1[4] = 1;
cout << p1[4]; // no error
p2[4] = 1;
cout << p2[4]; // error
}
Run Code Online (Sandbox Code Playgroud) c++ ×3