小编Cal*_*ius的帖子

为什么MinGW很慢?

我在Windows上使用Code :: Blocks IDE和GCC/MinGW,我正在尝试构建一个wxWidgets应用程序,其中包含ca. 20k线和40个源模块.它构建非常慢.

编译C++模块持续2-5秒,链接持续2-3分钟.

它是一个可移植的代码,这段代码在Linux上编译速度非常快.我无法按照构建消息窗口...整个过程持续不到20秒.

我尝试了常见的调整(例如,预编译头,关闭优化等),但没有任何效果.

为什么这么慢?

c++ performance mingw codeblocks

27
推荐指数
3
解决办法
2万
查看次数

假设使用C中的IEEE754浮点表示浮点数是否安全?

浮点是在C中定义的实现.因此没有任何保证.

我们的代码需要是可移植的,我们正在讨论在我们的协议中使用IEEE754浮点数是否可以接受.出于性能原因,如果我们不必在发送或接收数据时在固定点格式之间来回转换,那将是很好的.

虽然我知道平台和架构之间可能存在关于long或的大小的差异wchar_t.但我似乎无法找到任何具体的floatdouble.

到目前为止我发现字节顺序可能在大端平台上被反转.虽然有不带浮动包含代码,其中点支撑平台floatdouble甚至无法链接.否则平台似乎坚持IEEE754单精度和双精度.

那么可以假设浮点数在IEEE754可用时安全吗?

编辑:回应评论:

你对"安全"的定义是什么?

安全我的意思是,一个系统上的位模式在另一个系统上意味着相同(在字节旋转之后处理字节序).

c floating-point ieee-754

23
推荐指数
2
解决办法
1693
查看次数

如何在Linux上设置C中的鼠标光标位置?

如何在Linux下使用C程序在X窗口中设置鼠标光标位置?谢谢:)(像WIN中的setcursorpos())

编辑:我已经尝试过这段代码,但不起作用:

#include <curses.h>

main(){
 move(100, 100);
 refresh();
}
Run Code Online (Sandbox Code Playgroud)

c linux x11 pointers position

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

为什么没有标准的方法强制在C++中内联?

根据维基百科的C++文章

C++旨在为程序员提供选择,即使这使程序员可以选择错误.

如果它是这样设计的,为什么没有标准的方法来强制编译器内联一些东西,即使我可能是错的?

或者我可以问为什么inline关键字只是一个提示?

我想我别无选择.

在OOP世界中,我们在对象上调用方法,并且应该避免直接访问成员.如果我们不能强制访问内联,那么我们就无法编写高性能但仍可维护的应用程序.

(我知道很多编译器都用自己的方式来强制内联,但它很难看.使用宏来创建类的内联访问器也很难看.)

编译器总是比程序员做得更好吗?

c++ standards inline-code

20
推荐指数
2
解决办法
5027
查看次数

是否可以在不手动将重写的克隆方法添加到C ++中的每个派生类的情况下克隆多态对象?

要复制多态类时的典型模式是添加一个虚拟克隆方法,并在每个派生类中实现它,如下所示:

Base* Derived::clone()
{
    return new Derived(*this);
}
Run Code Online (Sandbox Code Playgroud)

然后,在调用代码中,您可以:

Base *x = new Derived();
Base *y = x->clone();
Run Code Online (Sandbox Code Playgroud)

但是,如果您有50多个派生类,并且意识到需要多态复制,那么将克隆方法复制粘贴到每个复制类中就很麻烦。从本质上讲,它是一个样板,可以解决语言限制,您必须拼出实际名称才能调用构造函数。

我没有跟踪最新的C ++标准中的新功能...在现代C ++中,有什么方法可以避免这种情况?

c++

20
推荐指数
2
解决办法
1310
查看次数

如何通过未初始化值的来源抑制valgrind警告?

Valgrind将使用该track-origins=yes选项告诉您未初始化值的来源.

我试图压制这些警告,但问题是基于未初始化值的数据可以传播到任何地方,在其他地方也会发出警告.

解决方案将取决于未初始化数据的来源.我该怎么做?可能吗?似乎抑制文件只过滤堆栈跟踪.

我想要的原因是,OpenSSL通过故意使用未初始化的值来增强随机性,我想用valgrind测试发布版本(所以-DPURIFY不是一个选项).

valgrind

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

为什么GCC允许在不使用其命名空间的情况下调用此函数?

可能重复:
为什么C++参数范围会影响命名空间中的函数查找?

今天我经历了这种奇怪的行为.我可以先调用strangeFn using namespace Strange,但不允许调用strangeFn2为什么?

namespace Strange
{
    struct X
    {
    };
    void strangeFn(X&) {}
    void strangeFn2(int) {}
}

int main()
{
    Strange::X x;
    strangeFn(x);    // GCC allows calling this function.
    strangeFn2(0);   // Error: strangeFn2 is not declared in this scope.
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

C++编译器如何解决符号的范围?

c++ scope namespaces

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

如何在javascript中将样式属性重置为CSS默认值?

在php生成的页面上有几个这样的元素:

<td class="defaultTDStyle" style="color:userDefinedCustomColor" id="myTDId"></td>
Run Code Online (Sandbox Code Playgroud)

所以有一个默认样式,我应用了几个额外的样式,覆盖CSS中定义的样式.

有没有办法从JavaScript中删除这些添加的样式?似乎obj.style.color ="default"和obj.style.color ="auto"不起作用.如何从javascript将颜色重置为CSS默认值?

html javascript css dynamic-html

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

取消引用char*会禁止严格的别名优化吗?

以下面的代码片段为例:

*pInt = 0xFFFF;
*pFloat = 5.0;
Run Code Online (Sandbox Code Playgroud)

由于他们是intfloat指针,编译器将假定他们不这样做别名,例如可以交换.

现在让我们假设我们用这个来加强它:

*pInt = 0xFFFF;
*pChar = 'X';
*pFloat = 5.0;
Run Code Online (Sandbox Code Playgroud)

因为char*允许别名,它可能指向*pInt,所以赋值*pInt不能超出赋值*pChar,因为它可以合法地指向*pInt并将其第一个字节设置为'X'.类似地pChar可以指向*pFloat,*pFloat在char赋值之前不能移动赋值,因为代码可能打算通过重新分配来取消先前字节设置的效果*pFloat.

这是否意味着我可以通过编写和读取char*来为重新排列和其他严格的别名相关优化创建障碍?

c strict-aliasing

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

为什么共享库中强制导出 std:: 符号?

如果你的共享库内部使用C++,那么std::它引用的所有模板和类型都将导出为弱符号。即使您使用-fvisiblity=hidden-Wl,--exclude-libs,ALL. 隐藏这些符号的唯一方法是使用版本脚本。

这些强制出口的目的是什么?

用版本脚本隐藏它们有什么坏处吗?

c++ linux linker gcc shared-libraries

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