std::is_pod可能会在C++ 20中弃用.
这个选择的原因是什么?我应该用什么来代替std::is_pod知道某种类型是否真的是POD?
在Win32 API编程中,通常使用struct具有多个字段的C s.通常只有其中几个具有有意义的值,而其他所有值都必须归零.这可以通过以下两种方式之一实现:
STRUCT theStruct;
memset( &theStruct, 0, sizeof( STRUCT ) );
Run Code Online (Sandbox Code Playgroud)
要么
STRUCT theStruct = {};
Run Code Online (Sandbox Code Playgroud)
第二个变体看起来更干净 - 它是一个单行,它没有任何可能输错的参数并导致错误被种植.
与第一个变体相比,它有任何缺点吗?使用哪种变体?为什么?
嗨,
在C++ In a Nutshell一书中,在第6章:类中,在Access说明符下面,提到了以下内容:
在类定义中,成员和基类的默认访问权限是私有的.在结构定义中,默认值为public.这是类和结构之间的唯一区别,尽管按照惯例,一些程序员仅将结构用于POD类,并将类用于所有其他类.
我的问题是:
谢谢.
我正在研究如何在C++中将成员的内存偏移量转换为类,并在维基百科上看到了这一点:
在C++代码中,您不能使用offsetof来访问非Plain Data Data Structures的结构或类的成员.
我尝试了它似乎工作正常.
class Foo
{
private:
int z;
int func() {cout << "this is just filler" << endl; return 0;}
public:
int x;
int y;
Foo* f;
bool returnTrue() { return false; }
};
int main()
{
cout << offsetof(Foo, x) << " " << offsetof(Foo, y) << " " << offsetof(Foo, f);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我收到了一些警告,但它已经编译,运行时它给出了合理的输出:
Laptop:test alex$ ./test
4 8 12
Run Code Online (Sandbox Code Playgroud)
我想我要么误解POD数据结构是什么,要么我错过了其他一些难题.我不知道问题是什么.
我有一个二进制文件,我知道一些布局.例如,让格式如下:
该文件应该看起来像(为了便于阅读,我添加了空格):
5 hello 3 0.0 0.1 0.2 -0.3 -0.4 -0.5
Run Code Online (Sandbox Code Playgroud)
这里5 - 是2个字节:0x05 0x00."你好" - 5个字节,依此类推.
现在我想读这个文件.目前我这样做:
char buffer[2] unsigned short len{ *((unsigned short*)buffer) };.现在我有一个字符串的长度.vector<char>并std::string从此向量创建一个.现在我有字符串ID.char bufferFloat[4]和转换*((float*)bufferFloat).这有效,但对我来说它看起来很难看.我可以直接读取unsigned short或float或string等没有char [x]创造?如果不是,那么正确投射的方法是什么(我读过我正在使用的那种风格 - 是旧风格)?
PS:当我写一个问题时,我头脑中提出的解释越清晰 - 如何从任意位置投出任意数量的字节char …
假设我有一个如下定义的类:
class foo{};
Run Code Online (Sandbox Code Playgroud)
现在,这是完全可以接受的;
foo f;
Run Code Online (Sandbox Code Playgroud)
怎么会出现编译错误?(uninitialized const ‘f’)
const foo f;
Run Code Online (Sandbox Code Playgroud)
我们为什么要这样做?
const foo f = foo();
Run Code Online (Sandbox Code Playgroud)
我知道为什么我们不能这样做..
const foo f(); // though it compiles..
Run Code Online (Sandbox Code Playgroud)
有趣的是,以下内容是有效的:
const std::string f;
Run Code Online (Sandbox Code Playgroud)
那么缺少foo什么?
我意识到那里有三个问题,这是一个糟糕的形式,但我希望有人可以在一个答案中为我解决这个问题.
编辑:如果它是愚蠢的,请随时关闭它...
我想知道一个成员数据类型的结构和联合之间的区别,如果有的话.
A类使用初始化列表将成员设置为参数值,而B类使用构造函数体内的赋值.
只要我保持一致,任何人都可以给出任何理由而不喜欢一个吗?
class A
{
String _filename;
A(String filename) : _filename(filename)
{
}
}
Run Code Online (Sandbox Code Playgroud)
class B
{
String _filename;
B(String filename)
{
_filename = filename;
}
}
Run Code Online (Sandbox Code Playgroud) 据我所知,基本类型是Scalar和Arrays是聚合的,但是用户定义的类型呢?我将以什么标准将它们分为两类?
struct S { int i; int j };
class C { public: S s1_; S s2_ };
std::vector<int> V;
std::vector<int> *pV = &v;
Run Code Online (Sandbox Code Playgroud) 我一直在研究,没有任何相关的问题,所以我来到这里.
我试图避免内存泄漏,所以我想知道:
假设我有一个MyClass成员ints a和b一个类int array c,它们填充了一个成员函数:
class MyClass
{
public:
int a, b;
int c[2];
void setVariables()
{
a, b = 0;
for (int i = 0; i < 2; i++)
{
c[i] = 3;
}
}
};
int main(int argc, char* argv[])
{
MyClass* mc = new MyClass();
mc->setVariables();
delete mc;
}
Run Code Online (Sandbox Code Playgroud)
现在,我打电话后delete mc,会a,b以及所有的内容c被删除?或者我必须在析构函数中明确地做到这一点MyClass?