在下面的代码中,x(原始pinter)和p(唯一指针)都指向变量a;所以值“ a”的变化反映了两个指针的取消引用。我知道“ p”拥有&a的所有权。双重释放?
#include <iostream>
#include <memory>
int main() {
int a = 5;
int *x = &a;
std::unique_ptr<int> p(&a);
*p = 6;
std::cout<< *x << *p <<'\n';
// prints 66
*x =7;
std::cout <<*x <<*p <<"\n";
// 77
std::cout << "Done!"<<'\n';
}
Run Code Online (Sandbox Code Playgroud)
PS我得到这个运行时错误“指针被释放未分配”
标题说明了一切。如何更改常数的值?这是否与更改常量数组的索引X处的元素的值相同?
#include<iostream>
int main(){
const char* y = "original";
auto *p = &y;
*p = "modified";
std::cout<<y<<"\n";
//outputs modified
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud) #include<iostream>
using namespace std;
#define C 1<<(8*1)
int main(){
if(C==256){
int a=C;
cout<<a;
}
}
Run Code Online (Sandbox Code Playgroud)
我的期望是 256,但它打印出 18。这有什么问题吗?谢谢!
有没有办法在 C++ 中创建既可以保存整数又可以保存字符串的数据类型?
例如,创建一个具有名称的数据类型sti,我可以用它定义整数和字符串变量:
sti a = 10; //this is integer
sti b = "Hello"; //and this is string
Run Code Online (Sandbox Code Playgroud) 我正在制作一个汽车租赁系统,我想从父类继承名称。现在我想创建一个汽车数组,其中包含 4 辆不同的汽车。我不想给这个数组一个简单的数据类型,因为这辆车也有它的型号!所以我只想使用抽象数据类型。但是当我用数组写类名(使其成为类的数据类型)时,它说
[Error] field 'Cars' has incomplete type 'Car [4]'.
Run Code Online (Sandbox Code Playgroud)
为什么以及如何解决?
除了抽象数据类型之外我不知道还能做什么。代码在这里:
class Vehicle{
public:
string name;
int model;
};
class Car:public Vehicle{
public:
int seats;
Car Cars[4];
Car(){
Cars[0].name = "Alto";
Cars[1].name = "Mercedes";
Cars[2].name = "Corolla";
Cars[3].name = "Audi";
}
Run Code Online (Sandbox Code Playgroud) 我在不同的编译器上测试了这个代码片段,但总是得到相同的结果,但我就是不明白为什么。
unsigned char buffer[0x4000] = {0};
string strText((char*)buffer, 0x4000);
cout << "strlen((char*)buffer) = " << strlen((char*)buffer) << endl;;
cout << "strText.length() = " << strText.length() << endl;
Run Code Online (Sandbox Code Playgroud)
输出是:
strlen((char*)buffer) = 0
strText.length() = 16384
Run Code Online (Sandbox Code Playgroud)
我正在std::string从unsigned char数组创建一个变量(您也可以使用有符号的字符数组,结果是相同的)。在将变量传递给字符串构造函数之前,数组内容被“清零”(根据情况使用 memset 或 C++ 数组初始化)。
如果使用 C 样式函数获取字符串长度strlen((char*)buffer),则结果如预期为“0”。
如果使用方法获取字符串对象的长度,则string::length()该值等于字符串构造函数中传递的数组大小(本例中为 16384)。为什么?
另外,作为副作用,如果使用打印字符串对象的内容,std::cout您会得到一个非常长的空字符串(所有“0”都被“空格”替换)。
我是否应该对 std::string 对象执行一些额外的操作以获得我期望的长度(0)?
谢谢