相关疑难解决方法(0)

最终C++书籍指南和列表

这个问题试图收集每年出版的数十本不良C++书籍中的少数珍珠.

与许多其他编程语言不同,这些编程语言经常从互联网上的教程中随处获取,很少有人能够快速学习C++,而无需学习编写精良的C++书籍.这样做太复杂了.事实上,它是如此庞大和复杂,有很多非常糟糕的C++书籍.我们并不是在谈论糟糕的风格,而是体育明显的事实错误促进糟糕的编程风格.

请编辑接受的答案,以提供高质量的书籍和近似的技能水平 - 最好 C++聊天室讨论您的添加.(如果他们不同意建议,常客可能会毫不留情地撤销你的工作.)添加一篇关于你亲自阅读/受益的每本书的简短描述/描述.随意讨论质量,标题等.符合标准的书籍将被添加到列表中.由C和C++用户协会(ACCU)撰写评论的图书都有指向评论的链接.

*注意:常见问题和其他资源可以在C++标签信息.

c++ c++-faq

4246
推荐指数
1
解决办法
224万
查看次数

对象如何在C++中存储在内存中?

对象如何在C++中存储在内存中?

对于常规课程,如

class Object
    {
public:
    int i1;
    int i2;
    char i3;
    int i4;
private:
    };
Run Code Online (Sandbox Code Playgroud)

使用Object作为数组的指针可以用来访问i1如下?

((Object*)&myObject)[0] === i1?
Run Code Online (Sandbox Code Playgroud)

关于SO的其他问题似乎暗示将结构转换为指针将指向POD类型的第一个成员.如果有构造函数的类,这有什么不同?另外,对于非POD类型,它有何不同?

编辑:

因此,在记忆中,上述课程的布局如下:

[i1 - 4bytes][i2 - 4bytes][i3 - 1byte][padding - 3bytes][i4 - 4bytes]
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management pod

9
推荐指数
2
解决办法
1万
查看次数

将 nullptr 分配给成员指针

谁能告诉我为什么对于 MSVC、clang 和 g++,nullptr分配给类型数据成员指针的内部表示是 -1?Class::*对于 64 位系统来说(size_t)1 << 63是最好的,因为如果您nullptr以这种方式使用成员指针,您肯定会接触内核内存并发生崩溃,因此这将是一个很好的调试辅助工具。

-1背后有更深层次的原因吗?

样本:

struct X
{
    int x, y;
};

using member_ptr = int X::*;

member_ptr f()
{
    return nullptr;
}
Run Code Online (Sandbox Code Playgroud)

...使用 g++ 生成以下二进制文件:

movq    $-1, %rax
ret
Run Code Online (Sandbox Code Playgroud)

c++ pointer-to-member nullptr

9
推荐指数
1
解决办法
501
查看次数

如何通过其偏移量访问私有数据私有成员?

我正在尝试按偏移量访问和修改类的私有数据成员。
AFAIK,首先是计算偏移量,然后通过偏移量访问成员。
这是我的代码。

class Test {  
public:
    int a;  
    int b;
private:  
    int c;
};  
Test test;
cout << *(&test + &Test::b + 1);  // access c
Run Code Online (Sandbox Code Playgroud)

我收到错误:“+”运算符无效,正确的操作数包含“ int Test::*”类型。

一个类似的帖子,它是asprintf的偏移量,但是当尝试这样时: ab1,4

cout << &Test::a << '\t' << &Test::b;  
Run Code Online (Sandbox Code Playgroud)

我有1 1

我的问题:
1.为什么cout得到错误的结果?2.指向
什么? 3. 如何访问和修改Test::*指针?(或者在不知道偏移量的情况下如何访问私有成员?)Test::*p

c++ visual-studio

2
推荐指数
1
解决办法
2013
查看次数