小编Joe*_*Joe的帖子

从C到C++的常量结构中的char数组的静态初始化

我在C中有一些现有的代码:

extern const struct sockaddr_un addr =
{
    .sun_family = AF_UNIX,
    .sun_path   = "myreallylongpath"
};
Run Code Online (Sandbox Code Playgroud)

sun_path是一个字符数组.

这用于在较旧版本的GCC中编译为C.我现在已将其转换为C++并使用GCC v4.7.2.我一直收到错误:

"C99指示符'sun_path'聚合初始化程序外"

是不是可以用C++做我正在做的事情,或者语法是否与旧的C不同?

c c++ gcc struct initialization

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

为什么我可以将int和BOOL转换为void*,但不能浮动?

void*是C和衍生语言的一个有用的特性.例如,可以使用void*在C++类中存储objective-C对象指针.

我最近正在研究类型转换框架,由于时间限制有点懒 - 所以我用void*...这就是这个问题出现的原因:

为什么我可以将int转换为void*,但不能浮动到void*?

c c++ objective-c

13
推荐指数
2
解决办法
4068
查看次数

是否可以毫无例外地进行RAII?

如果在构造对象时需要获取的资源可能失败,是否可以进行RAII,如果本地编码标准禁止例外?

如果是这样,在这种情况下处理资源获取失败的规范方式是什么?

c++ raii

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

C++ - std :: set未声明

#include <iostream>

 using std::set;
 using std::cout;
 using std::endl;
Run Code Online (Sandbox Code Playgroud)

错误报告:

Josephus_Permutation.cpp:3:13: error: ‘std::set’ has not been declared

std::set应该是命名空间的STL std吗?

c++ debugging

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

对于posix信号量,相当于Sys V SEM_UNDO

在具有多个进程的Linux系统中,系统V信号量允许选择SEM_UNDO,以防止信号量在持有信号量的进程崩溃时"卡住".什么是防止POSIX信号量因持有信号量的进程中的崩溃而卡住的正确方法?或者POSIX是否保证在崩溃的情况下释放信号量?

c standards posix semaphore sysv-ipc

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

如何在QWidgetAction的子类中设置小部件的可见性

Qt 5.6.3,eglfs Linux平台.

我有一些从QWidgetAction派生的类.QWidgetActions都是菜单中的父级,它们包含的小部件都是同一菜单中的父级.包含的小部件都被设置为QWidgetAction的默认小部件.QWidgetAction没有重新实现任何内容.

我认为设置QWidgetAction的可见性会自动设置包含在其中的自定义窗口小部件集的可见性?这是不正确的,因为这样做肯定不会显示和隐藏小部件所需的!?我必须做其他事情才能将可见性更改传递给包含的小部件吗?我必须直接从QWidgetAction请求窗口小部件,然后直接应用它的可见性(这似乎是一个黑客攻击)?

我对如何实现QWidgetActions感兴趣.文档几乎不存在,所以我追随人们对它们的体验.我有一个间歇性的问题,看起来像双重删除自定义小部件和可见性不按预期行事.

class Base : public QWidgetAction
{
    Q_OBJECT
public:
    explicit Base(QWidget* parent, QString labelText = "", QString iconPath = "", Qt::AlignmentFlag alignment = Qt::AlignHCenter) :
    QWidgetAction(parent),
    mCustomWidget(nullptr),
    mParentWidget(nullptr),
    mTextLabel(nullptr),
    mAlignment(alignment),
    mLabelText(labelText),
    mIconPath(iconPath) {}

    virtual ~Base() {}

protected:
    QWidget *mCustomWidget;

    QWidget *createTheWidgetSet(QWidget *parent)
    {
        if (mParentWidget == nullptr) {
            mParentWidget = new QWidget(parent);
            mCustomWidget = createCustomWidget(mParentWidget);

            if (mCustomWidget != nullptr) {
                if (!mLabelText.isEmpty()) {
                    mCustomWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored);
                }
            }

            int rightMargin = QApplication::style()->pixelMetric(QStyle::PM_SmallIconSize);

            QBoxLayout* layout = new …
Run Code Online (Sandbox Code Playgroud)

c++ qt

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

在C++中初始化静态const数组的特定元素

我有一些C需要转换为C++.

它做了这样的事情:

enum
{
   ELEM0,
   ELEM1,
   ELEM2,
   ELEM3,
   ELEM4,
   MAX_ELEMS
} 

#define LEN 16

static const char lut[MAX_ELEMS][LEN] =
{
    [ELEM2] = "Two",
    [ELEM3] = "Three",
    [ELEM1] = "One",
    [ELEM4] = "Four",
    [ELEM0] = "Zero"
}
Run Code Online (Sandbox Code Playgroud)

在实践中,我有数百个元素,在数组中没有任何顺序.我需要保证数组中的条目将枚举与适当的文本联系起来.

是否可以使用-std = gnu ++ 11中的位置参数初始化数组?

c++ arrays gnu g++ c++11

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

在应用程序中禁用linux内存过量使用

您可以通过sysctls在整个系统范围内调整内存过量使用策略,但是是否可以在流程本身内部针对每个流程调整此策略?我想使一个特定的实时过程从不使用过量使用,尽管系统的其余部分可能过量使用。

c linux memory memory-overcommitment

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

gcc是否有一个pragma来定义文件类型/编译器?

GCC根据文件扩展名(.c,.cc),命令行参数(-x)或直接调用适当的编译器(g ++,而不是gcc)自动在编译器之间切换.

有没有办法在文件中使用pragma覆盖这些?

评论后更新:

我正在转换一个目前50/50 C&C++的代码库,用C++编译器完全编译.这是为了允许当前的"C"模块调用我无法更改的新C++基础(并且不希望换行).我想将扩展名保持为.c以获取真正为C的文件,即使它们现在具有C++链接.我认为将它们保留为".c"表示它们为何如此(我在想这里的后代!;-))但是更改构建系统以适应每个更改的C文件名也是一项大工作.更糟糕的是,一小部分C文件不能很好地转换为C++,所以如果他们不调用C++基础我想把它们留作C.重写它们不是一个选择,但稳定性的风险该项目太棒了.

c c++ gcc pragma

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

我应该如何将 Tortoisegit 与 LFS 结合使用?

似乎 tortoise 支持 LFS,但文档中似乎缺少正确的工作实践。我需要支持我的团队,但我自己从不使用该工具。

使用 Tortoise 和为 LFS 配置的存储库的正确方法是什么?

git tortoisegit git-lfs

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