如果'Test'是一个普通的类,那么之间有什么区别:
Test* test = new Test;
Run Code Online (Sandbox Code Playgroud)
和
Test* test = new Test();
Run Code Online (Sandbox Code Playgroud) 在完成我的C++类之后,在我看来,结构/类几乎完全相同,除了一些细微的差别.
我以前从未用C语言编程; 但我确实知道它有结构.在C中是否可以继承其他结构并设置公共/私有的修饰符?
如果你能在常规C中做到这一点,为什么我们需要C++?是什么让类与结构不同?
这是一个小代码片段:
class A
{
public:
A(int value) : value_(value)
{
cout <<"Regular constructor" <<endl;
}
A(const A& other) : value_(other.value_)
{
cout <<"Copy constructor" <<endl;
}
private:
int value_;
};
int main()
{
A a = A(5);
}
Run Code Online (Sandbox Code Playgroud)
我假设输出将是"常规构造函数"(对于RHS),后面是LHS的"复制构造函数".所以我避免使用这种风格并始终将类的变量声明为A a(5);.但令我惊讶的是上面的代码从未调用过复制构造函数(Visual C++ 2008)
有没有人知道这种行为是由编译器优化,还是C++的一些记录(和可移植)功能引起的?谢谢.
假设我有一个看起来像这样的结构(一个POD):
struct Foo
{
int i;
double d;
};
Run Code Online (Sandbox Code Playgroud)
以下两行之间有什么区别:
Foo* f1 = new Foo;
Foo* f2 = new Foo();
Run Code Online (Sandbox Code Playgroud) 我的代码中有两种类型的结构变量初始化.
例
#include<iostream>
#include<string>
using namespace std;
struct Data{
int arr[5];
float x;
};
int main(){
struct Data d = {0};
struct Data d1 = {};
cout<<d.arr[0]<<d.x;
cout<<d1.arr[0]<<d1.x<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在运行代码广告获取0 0 0 0作为我的输出.请帮帮我,两者初始化有什么区别.
我可以在C++中可靠地使用memset和memcpy运算符,并且内存分配了新的吗?
编辑:
是的,分配本机数据类型
例
BYTE *buffer = 0;
DWORD bufferSize = _fat.GetSectorSize();
buffer = new BYTE[bufferSize];
_fat.ReadSector(streamChain[0], buffer, bufferSize);
ULONG header = 0;
memcpy(&header, buffer, sizeof(ULONG));
Run Code Online (Sandbox Code Playgroud) 我有一个C++结构
typedef struct DIFColor
{
uint8_t r;
uint8_t g;
uint8_t b;
} DIFColor;
Run Code Online (Sandbox Code Playgroud)
我试图像这样初始化它:
DIFColor d = new DIFColor();
d.r = r;
d.g = g;
d.b = b;
Run Code Online (Sandbox Code Playgroud)
但编译器抱怨无法将指针转换为常规变量.什么指针?从这个问题我认为你可以简单地创建一个新的结构,而不必处理指针和动态内存分配new.它是否与我在C中初始化结构这一事实有关,而不是使用构造函数?
error: conversion from 'DIFColor*' to non-scalar type 'DIFColor' requested
Run Code Online (Sandbox Code Playgroud)