小编Dea*_*ean的帖子

结构的大小超过预期

我已经读过这个问题:c ++中的struct padding和这一个为什么structof sizeof不等于每个成员的sizeof之和?

我知道这不是标准化的,但我仍然认为这是一个合法的问题.

为什么x64系统上的这个struct 16的大小?

struct foo { char* b; char a;};
Run Code Online (Sandbox Code Playgroud)

有效大小为8 + 1 = 9,但我知道有填充.无论如何,我认为a只会填充到达a的大小int,即与其他3个字节一起给出总共12个字节.

是否有任何理由为什么特定的编译器(gcc)认为它应该有16个字节的大小?

狂野猜测:有可能最大的类型(例如双倍或在这种情况下是x64指针)将指定要使用的填充吗?

c++ memory struct

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

将指针传递给const ref函数

为什么以下工作?

#include <iostream>
using namespace std;

class PolyLine {
public:
  PolyLine() = default;
  PolyLine(PolyLine * ptr) {
    std::cout << "Ctor called" << std::endl;
  }

};

void function(const PolyLine& pt) {
}

int main() {

    PolyLine *pobj = new PolyLine();

    function(   pobj );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

似乎隐式转换以某种方式被调用..为什么我没有得到编译错误?

c++

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

std :: array <T,N>的大小是否保证等于T [N]的大小?

看起来这个代码工作(所以它编译得很好),我在这里问的是:它是否保证sizeof(std :: array)与sizeof(equivalent_Carray)相同?

struct MyClass {
  std::array<float, 4> arr;  
  float carr[4];

  std::array<float, 4> cfunction() {
    std::array<float, sizeof(carr) / sizeof(float)> out;
    return out;
  }

  std::array<float, 4> function() {
    // Is this guaranteed to be the same as sizeof(carr) / sizeof(float)??
    std::array<float, sizeof(arr) / sizeof(float)> out;
    std::cout << sizeof(arr);
    return out;
  }
};

int main()
{
    MyClass obj;
    obj.function();
}
Run Code Online (Sandbox Code Playgroud)

c++ arrays sizeof c++11 c++14

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

在Windows上获取根CA证书的可靠方法

我正在使用boost asio连接到我的有效证书(由根CA签名).我正在使用的代码是boost docs提供的ssl客户端示例.

我添加的唯一一行是:

boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23_client);
ctx.set_default_verify_paths(); <------------- Add default verification paths
ctx.set_password_callback(&password_callback);    

client c(io_service, ctx, iterator);

io_service.run();
Run Code Online (Sandbox Code Playgroud)

问题是:当使用此代码与本地安装的openSSH副本(从msi安装程序安装)时,可以正确找到路径并验证我的证书.当我下载我自己的openSSH存储库副本并编译它时,这行不再有效,我没有根CA证书来验证我自己的那个(​​因此它失败了).

因为我想最终在客户机器上分发这些客户端,所以我想避免设置类似的环境变量SSL_CERT_DIR等.如何可靠地找到具有boost asio的根CA证书,或者从源编译配置我的openSSH以找到它们?

c++ ssl boost openssl boost-asio

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

GLib - class_init 和 init 类方法之间的区别

我是一个油嘴滑舌的新手,我仍然在努力理解my_class_name_class_init()方法和方法之间的区别my_class_name_init()

我知道后者有点相当于 C++ 构造函数,并且针对创建的对象的每个实例进行操作,但我不太明白这些my_class_name_class_init()方法的目的。通过阅读文档,我认为class_init()方法有点类似于对所有实例有效的静态构造函数,但我仍然不确定我是否正确。

方法的目的是什么class_init()

c glib

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

gdb - 如何查找堆栈帧的当前模块

导航到堆栈帧后,f stack_frame_number如果调试信息存在并且是最新的,我可能会看到它的源代码。无论如何,如何找出我当前的堆栈帧位于哪个模块?

例如

(gdb) print current_module
Your stack frame is in libTest.so.1
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到这一点吗?

linux debugging stack gdb

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

用于编辑文本框的 SDL

我想编写一个代码编辑器,它支持代码突出显示、选择、搜索和替换以及类似的功能。

由于我对普通的编辑框控件不满意(我想要更多的灵活性),我决定编写自己的 UI 控件。如果编辑器可以在 linux 和 windows 上运行,那就太好了(我没有 Mac,但那也很好),因此我一直在考虑使用 SDL 来呈现编辑文本框控件。

据我所知,我可以绘制抗锯齿文本,并且 SDL 很好地交叉兼容,但我不确定是否可以实现平滑滚动等功能。

问题:是否可以将 SDL 用于自定义编辑文本框并平滑滚动?

c++ user-interface sdl cross-platform

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

为什么我可以指定长度小于数组本身的字符串文字?

我有点困惑,这是允许的:

char num[6] = "a";
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?我是否指定了一个指向数组的指针或将文字值复制到数组中(因此我以后可以修改它们)?

c++ arrays initialization string-literals

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

在C++中分配赋值

我正在阅读一段执行此操作的代码

void *ptr_to_something = (void*)0x23; // I made this up, it's just a pointer to something
void *addr;
void *dst =  (void*)(addr = ptr_to_something); // This is the line that confuses me
Run Code Online (Sandbox Code Playgroud)

它似乎将指向某事物的指针指向同一事物的另一个指针.那没关系..但是结果被括在括号中,转换成同样的东西,并以某种方式重新分配给同一个东西的第三个指针.

这是有效的C++吗?是否可以保证分配分配结果会产生相同的分配对象?

c++

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

初始化类成员的任何开销?

假设我有以下代码

class C {
public:
  explicit C() :
     member()
  {}
private:
  int member;
};
Run Code Online (Sandbox Code Playgroud)

我想将member()值变量初始化member为零.

我的问题是:这在运行时是否有任何开销?或者它是在编译时以某种特定方式完成的?

c++

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