小编Lou*_*ltz的帖子

clang的`-Ofast`选项在实践中有什么作用,尤其是与gcc的差异?

类似于问题gcc的ffast-math实际上做了什么?并且与Clang优化级别的SO问题有关,我想知道在实际条件下优化是做什么clang-Ofast,以及它们是否与gcc完全不同,或者这是否依赖于编译器依赖于硬件.

根据clang优化级别的公认答案,-Ofast增加了-O3优化:-fno-signed-zeros -freciprocal-math -ffp-contract=fast -menable-unsafe-fp-math -menable-no-nans -menable-no-infs.这似乎完全与浮点数学相关.但是这些优化对于像C++这样的事物来说意味着什么呢?像英特尔酷睿i7这样的CPU上的浮点数通用数学函数以及这些差异有多可靠?

例如,实际上:

该代码std::isnan(std::numeric_limits<float>::infinity() * 0)返回真正的我-O3.我相信这是符合IEEE数学标准的结果.

随着-Ofast不过,我得到一个错误的返回值.此外,该操作(std::numeric_limits<float>::infinity() * 0) == 0.0f返回true.

我不知道这是否与gcc中看到的相同.我不清楚结果如何依赖于结构,也不清楚编译器如何依赖它们,也不清楚是否存在任何适用的标准-Ofast.

如果有人可能会产生类似于一组单元测试代码公案来解决这个问题,那可能是理想的.我已经开始做这样的事情,但宁愿不重新发明轮子.

c++ floating-point x86-64 clang compiler-optimization

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

Qt多重继承和信号

由于QObject,我遇到了关于多重继承的QT问题.我知道其他很多人都有同样的问题,但我不知道应该怎么解决.

class NavigatableItem : public QObject
{
    Q_OBJECT

    signals:
        void deselected();
        void selected();
        void activated();
};

class Button : public NavigatableItem, public QToolButton
{
    Q_OBJECT

    ...
}

class MainMenuOption : public Button
{
    Q_OBJECT

    ...
}
Run Code Online (Sandbox Code Playgroud)

当我这样做

MainMenuOption* messages = new MainMenuOption();
connect(messages, SIGNAL(selected()), SLOT(onMenuOptionSelected()))
Run Code Online (Sandbox Code Playgroud)

我会得到错误:

QObject'是'MainMenuOption'的模糊基础

之所以我让NavigatableItem因为信号而来自QObject.有没有办法做到这一点?

编辑:

为每个继承声明添加虚拟,仍然给我同样的错误:

class NavigatableItem : public virtual QObject

class Button : public virtual NavigatableItem, public virtual QToolButton

class MainMenuOption : public virtual Button
Run Code Online (Sandbox Code Playgroud)

即使在'全部清洁'之后,'运行qmake'和'全部建立'.

c++ qt multiple-inheritance qt-signals

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

像 LLVMHeaderGuardCheck 这样的 Clang-tidy 检查,但是对于可配置的包含路径?

任何人都知道LLVMHeaderGuardCheck类似 clang-tidy 检查的任何来源,该检查根据可配置信息(如命令行上给出的包含路径)格式化预期的包含防护?

更多细节...

LLVMHeaderGuardCheck保护检查期望头文件包含保护宏名称,这些名称都是路径的大写字母,后缀include//替换_,后缀如.h.hpp替换为_H。只要您的头文件都位于include/其路径中的公共根目录下,这就可以作为良好的头保护检查。

-I$path我正在寻找的是一个基于命令行参数中给出的路径进行工作的检查。因此,如果给定一个包含文件路径,例如-I/usr/local/xyz名为的包含文件,/usr/local/xyz/common/foo.h则需要包含XYZ_COMMON_FOO_H.

我编写了一些代码来同时工作,但我的提交仅使用该路径作为.clang-tidy配置文件中的选项。虽然这已经足够了,但它不如也可以使用命令行信息的解决方案那么灵活。

所以我想知道还有什么作为头文件的 clang-tidy 开源检查包括防护命名检查,因为我还没有通过迄今为止所做的网络搜索找到任何东西。

c++ clang-static-analyzer llvm-clang

6
推荐指数
0
解决办法
531
查看次数

clang-format 的默认 BasedOnStyle 值是多少?

ClangFormatBasedOnStyle样式选项是否有一个默认值,如果用户未选择该选项,则应用该默认值,如果有,该默认值是多少?

根据Clang 12 的CLANG-FORMAT STYLE OPTIONS文档的BasedOnStyle选项部分,是一个可配置的格式样式选项,可以是、、、、、或 之一。然而,该部分没有提及是否有默认值。BasedOnStyleLLVMGoogleChromiumMozillaWebKitMicrosoftGNUBasedOnStyle

我在网上搜索文档来回答这个问题,但没有找到。扫描了 SO 上所有clang-format标记问题的用途,BasedOnStyle也没有找到答案。考虑到 ClangFormat 来自 LLVM 项目,这个选项的默认值也就不足为奇了,LLVM但假设这个选项有一个默认值,这似乎一开始就不清楚。

clang-format

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

将参数从 C++ 传递到 QML

我想将一些参数从 C++ 传递到 QML,以便 QML 可以用它们做一些事情。

有点像这样:

void MyClass::myCplusplusFunction(int i, int j)
{
    emit mySignal(i, j);
}
Run Code Online (Sandbox Code Playgroud)

在 QML 中,每次mySignal(i, j)发出时,我都想调用 QML 函数并使用i和执行操作j

Connections {
    target: myClass
    // mySignal(i, j) is emitted, call myQmlFunction(i,j)
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

qt qml qt-signals qtquick2

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

从 github fork 安装 gem

我已经mongify从原始来源安装了一个gem:https : //github.com/anlek/mongify

然后我想从 fork 安装更新的版本(尚未被原始来源接受,但它有我需要的更新),

分叉链接:https : //github.com/yuvalkarmi/mongify

我应该怎么做才能mongify从 fork(而不是原始来源)更新我的设备?

谢谢

git rubygems gemfile git-fork mongify

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

Qt信号和插槽:是否复制了参考参数?

在qt框架中,大多数库信号和插槽使用指针作为参数.我想知道,如果我创建一个信号槽"结构",它将参考作为参数而不是指针,整个参数是否会被复制,或者只是4个字节(32位系统),就像常规的c ++参考一样?

我问这个是因为当我用参考参数创建信号/槽方法时我发现了一些东西.当我接下来的connect时候,QTCreator中的自动完成机制并没有像参与指针参数那样用参考参数提示我.他用常规参数暗示我.例如:

我创建了一个信号和插槽:

...
signals:
     void mySignal(int& parameter);
private slots:
     void on_mySignal(int& parameter);
Run Code Online (Sandbox Code Playgroud)

然后我尝试连接它们,Qt没有添加&参数参考:

...
connect(this, SIGNAL(mySignal(int)), this, SLOT(on_mySignal(int)));
Run Code Online (Sandbox Code Playgroud)

我必须手动更改为:

connect(this, SIGNAL(mySignal(int&)), this, SLOT(on_mySignal(int&)));
Run Code Online (Sandbox Code Playgroud)

因此,我想知道,甚至参考信号/插槽?我将非常感谢所有的帮助.

c++ qt slots qt-signals

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

未调用 QLineEdit textChanged 信号

我想将 textChanged 信号连接到 QLineEdit,但它永远不会被调用:

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog();
    virtual ~Dialog();
    QLineEdit *nameEdit;

public slot:
    void nameChanged(const QString &);
};
Run Code Online (Sandbox Code Playgroud)

.c 文件:

Dialog::Dialog()
{

    nameEdit=new QLineEdit;
    connect(nameEdit, SIGNAL(textChanged(const QString &)), this, SLOT(nameChanged(const QString &)));
    ...
}

void Dialog::nameChanged(const QString & txt)
{
// NEVER CALLED
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

c++ qt qt-signals

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

Qt是否可以定义一个函数指针来代替信号?

我有很多信号都具有相同的参数但执行不同的功能.

所有信号的连接和断开代码都是相同的,信号连接的插槽处理程序也是如此.

而不是一遍又一遍地编写这段代码.我想使用函数指针或类似的东西来分配信号,然后有一个公共代码块来执行连接或断开连接.

以下代码仅用于说明我所描述的内容,它无效且无法编译.

    void (*pfnSignal)(quint8, QString);
    switch( eSigID ) {
    case SIGNAL_A:
        pfnSignal = signalA; 
        break;
    case SIGNAL_B:
        pfnSignal = signalB;
        break;
    default:
        pfnSignal = NULL;           
    }
    if ( pfnSignal != NULL ) {
      QObject::connect(pobjRef, pfnSignal, this, SLOT(handler(quint8, QString)));
    }
Run Code Online (Sandbox Code Playgroud)

c++ qt qt-signals

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