更改IEEE 754浮点数的舍入模式*的最有效方法是什么?便携式C函数会很好,但使用x86程序集的解决方案也可以.
*我指的是朝向最近,朝零和朝向正/负无穷大的标准舍入模式
(我正在使用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++中的一个错误吗?
有没有办法在cpp文件中隐藏C++类的私有数据成员远离其用户?我认为私有成员是实现的一部分,在头文件中声明它们似乎有些倒退.
为什么C++默认情况下不会为至少有一个其他虚函数的类创建析构函数? 在这种情况下,添加一个虚拟析构函数不需要任何费用,并且没有一个(几乎?)总是一个bug.C++ 0x会解决这个问题吗?
在什么情况下垃圾收集比手动内存管理更有效?(这里的手册可能意味着在C中使用malloc和free,或者使用C++推广的更清晰的RAII和智能指针技术)
我喜欢垃圾收集如何通过编写软件来消除一些偶然的复杂性,但我更加高兴RAII和智能指针如何消除这种复杂性,同时还可以处理除内存以外的资源,确定性,提供性能保证和更高效总体.所以我想我可以安全地忽略垃圾收集.但是,我注意到人们一直在说垃圾收集比C++中使用的紧密资源管理更快,例如当有大量额外内存可用时.
那么什么时候垃圾收集完全可以胜过手动内存管理呢?我喜欢RAII和智能指针,但如果速度更快,我很乐意接受垃圾收集作为另一种工具.
右移大于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测试过.
我看到人们使用加法,其中按位OR在概念上更合适,因为他们认为它更快.这是真的?如果是的话,所有现代编译器都知道这个技巧吗?
考虑以下演示程序。
#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()语法上有效吗?如果不是,那么什么句法规则被破坏了?
我正在尝试编写一个简单的命令行应用程序来自学日语,但似乎无法打印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++中创建使用迭代器而不是指针的树数据结构?我在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算法和数据结构的性能保证.无论他们是以树木还是小绿人实施,都不应该对你有用.
我不确定地图是否是我需要的,但感谢您的信息.我会记得尽可能使用地图而不是实现树.