小编jef*_*yer的帖子

更改浮点舍入模式

更改IEEE 754浮点数的舍入模式*的最有效方法是什么?便携式C函数会很好,但使用x86程序集的解决方案也可以.

*我指的是朝向最近,朝零和朝向正/负无穷大的标准舍入模式

c c++ floating-point x86

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

为什么int main(){}编译?

(我正在使用Visual C++ 2008)我总是听说main()需要返回一个整数,但是这里我没有放入return 0;并且它编译时出现0错误和0警告!在调试窗口中,它表示程序已经退出代码0.如果此函数被命名为main()以外的任何东西,编译器会抱怨说'blah'必须返回一个值.粘贴a return;也会导致错误出现.但完全不考虑它,它编译得很好.

#include <iostream>
using namespace std;

int main()
{
    cout << "Hey look I'm supposed to return an int but I'm not gonna!\n";
}
Run Code Online (Sandbox Code Playgroud)

这可能是VC++中的一个错误吗?

c++ program-entry-point return-value

36
推荐指数
2
解决办法
9279
查看次数

隐藏私人数据成员?(C++)

有没有办法在cpp文件中隐藏C++类的私有数据成员远离其用户?我认为私有成员是实现的一部分,在头文件中声明它们似乎有些倒退.

c++ private class

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

为什么析构函数默认不是虚拟的[C++]

为什么C++默认情况下不会为至少有一个其他虚函数的类创建析构函数? 在这种情况下,添加一个虚拟析构函数不需要任何费用,并且没有一个(几乎?)总是一个bug.C++ 0x会解决这个问题吗?

c++ virtual-destructor

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

什么时候垃圾收集比手动内存管理更快?

在什么情况下垃圾收集比手动内存管理更有效?(这里的手册可能意味着在C中使用malloc和free,或者使用C++推广的更清晰的RAII和智能指针技术)

我喜欢垃圾收集如何通过编写软件来消除一些偶然的复杂性,但我更加高兴RAII和智能指针如何消除这种复杂性,同时还可以处理除内存以外的资源,确定性,提供性能保证和更高效总体.所以我想我可以安全地忽略垃圾收集.但是,我注意到人们一直在说垃圾收集比C++中使用的紧密资源管理更快,例如当有大量额外内存可用时.

那么什么时候垃圾收集完全可以胜过手动内存管理呢?我喜欢RAII和智能指针,但如果速度更快,我很乐意接受垃圾收集作为另一种工具.

c++ garbage-collection raii

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

为什么(1 >> 0x80000000)== 1?

右移大于0的数字1应为0,对吗?然而,我可以输入这个打印1的非常简单的程序.

#include <stdio.h>

int main()
{
        int b = 0x80000000;
        int a = 1 >> b;
        printf("%d\n", a);
}
Run Code Online (Sandbox Code Playgroud)

在linux上用gcc测试过.

c bit-manipulation

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

添加与ORing性能

我看到人们使用加法,其中按位OR在概念上更合适,因为他们认为它更快.这是真的?如果是的话,所有现代编译器都知道这个技巧吗?

c bit-manipulation addition compiler-optimization

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

为浮动常量调用伪析构函数的有效语法

考虑以下演示程序。

#include <iostream>

int main()
{
    typedef float T;

    0.f.T::~T();
}
Run Code Online (Sandbox Code Playgroud)

该程序由Microsoft Visual Studio Community 2019.

但是clang并gcc发出这样的错误

prog.cc:7:5: error: unable to find numeric literal operator 'operator""f.T'
    7 |     0.f.T::~T();
      |     ^~~~~
Run Code Online (Sandbox Code Playgroud)

如果像这样写表达式,( 0.f ).T::~T()那么所有三个编译器都会编译程序。

所以出现了一个问题:这个记录在0.f.T::~T()语法上有效吗?如果不是,那么什么句法规则被破坏了?

c++ floating-point syntax pseudo-destructor c++17

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

打印Unicode字符C++

我正在尝试编写一个简单的命令行应用程序来自学日语,但似乎无法打印Unicode字符.我错过了什么?

#include <iostream>
using namespace std;

int main()
{
        wcout << L"???????\n";
        wcout << L"Hello World\n"
        system("pause");
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,仅显示"按任意键继续".在Visual C++ 2013上测试过.

c++ unicode

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

如何用C++创建一个树?

如何在C++中创建使用迭代器而不是指针的树数据结构?我在STL中找不到可以做到这一点的任何东西.我想做的是能够像这样创建和操作树:

#include <iostream>
#include <tree>
using namespace std;

int main()
{
    tree<int> myTree;

    tree<int>::iterator i = myTree.root();
    *i = 42;

    tree<int>::iterator j = i.add_child();
    *j = 777;
    j = j.parent();

    if (i == myTree.root() && i == j) cout << "i and j are both pointing to the root\n";

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

谢谢你,tree.hh似乎正是我想要的.

如果这是为了获得保存任意索引类型的数据结构的好处,优化搜索和擅长插入,那么考虑使用映射.

映射是一个关联容器,其性能保证与树的性能保证相同:对数搜索,对数插入,对数删除,线性空间.在内部,它们通常被实施为红黑树,尽管这不是保证.尽管如此,作为STL用户,您应该关心的是STL算法和数据结构的性能保证.无论他们是以树木还是小绿人实施,都不应该对你有用.

我不确定地图是否是我需要的,但感谢您的信息.我会记得尽可能使用地图而不是实现树.

c++ tree iterator

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