草庐IT

C++标准

全部标签

c++ - 后缀(前缀)增量、左值和右值(在 C 和 C++ 中)

我刚刚了解到以下事实:Theresultofaprefixincrement(++var_name)isanR-valueinC(atleast,IamsurethatitisnotaL-valueinC),butitisanL-valueinC++.Theresultofapostfixincrement(var_name++)isanR-valueinC(atleast,IamsurethatitisnotaL-valueinC).ThisisalsotrueinC++(Itsaystheresultisaprvalue).我在VS2010(.cpp和.c)和Ubuntu(gcc和

c++ - 如何在 Visual Studio 2015 中显示标准输出?

我见过的大多数IDE(NetBeans、QtCreator、XCode、CodeBlocks、Eclipse)都提供了一种开箱即用的方法,可以在其嵌入式窗口或外部控制台或日志中查看标准输出,但可视化工作室。我真的不想像THIS中建议的那样分配一个单独的控制台题。我也不希望按照THIS中的建议将其重定向到文件问题(输出文件不是使用建议的控制台命令(2>output.txt)创建的)。请不要给出修改代码库的答案,例如使用OutputDebugString。如果无法以这种方式在VS中显示标准输出,仍然欢迎使用其他两种替代方案的工作解决方案,即使用外部控制台(我尝试使用但没有看到其中的输出)或

c++ - C++ 中的数据对齐、标准和可移植性

我想通过使用::operatornew(size_t)和位置new构造一个类T的对象。为了“扩展”charv[1]的大小,它是T中最后声明的数据成员,我分配了sizeof(T)+n-1字节与operatornew(),其中n是以字节为单位的所需大小。这个技巧允许我访问[0,n-1]中的任何i的v[i]。我的问题是关于C++标准的:T中数据成员的声明顺序是否反射(reflect)了数据在内存中的表示顺序?如果保留了顺序,那么无论分配的内存大小有多大,数据成员的对齐方式是否也会保留? 最佳答案 1)是的。在指针比较部分,标准规定指向后面

c++ - 将 namespace 添加到具有 C header 的 C++ 实现

我们有一个包含C和C++代码的大型项目。对于每个C++实现,除了C++header之外,我们通常还提供一个Cheader以允许功能也可用于.c文件。所以,我们的大部分文件看起来像这样:foo.hpp:classC{intfoo();};foo.h:#ifdef__cplusplusextern"C"{typedefstructCC;//forwarddeclarations#elseclassC;#endifintfoo(C*);//simplyexposesamemberfunctionC*utility_function(C*);//somefunctionality*not*in

c++ - 从函数内部获取函数名称和参数值的宏

我正在开发一个调试/日志程序,想知道是否可以创建一个宏,我可以将其粘贴到每个函数中,并且它会在每次调用函数时打印函数名称和参数值。函数名可以在编译时解析,问题是如何打印参数值?更新:我记得读过一篇获取参数的文章,但其中涉及汇编代码和操作堆栈指针,这不是跨平台兼容的——这是我需要的。 最佳答案 您可以使用__FUNCTION__或__func__宏作为函数名称。对于参数,我认为没有内置的宏来实现这一点。其他有用的宏是__LINE__和__FILE__。编辑:__FUNCTION__和__func__不是标准的一部分,但它们受到广泛支持

c++ - MacPorts Clang 3.1 缺少标准库安装?

我正在尝试使用MacPorts安装的clang在C++11中初始化列表功能。编译这段简单的代码时:#includeintmain(){std::vectora{1,3,5};return0;}我遇到了这个错误:stephen-chus-mac-pro:~stephenchu$clang-std=c++0x-ctext.cxx-I/opt/local/include-vclangversion3.1(trunk154872)Target:x86_64-apple-darwin10.8.0Threadmodel:posix"/opt/local/libexec/llvm-3.1/bin/c

c++ - 蒙特卡洛 C++ 中标准偏差的通用函数

我应该在一些蒙特卡洛模拟中计算标准偏差函数。公式是这样的:我认为我的结果与应有的结果相去甚远。我的函数使用来自boost库的元组,它看起来像这样:doubleadd_square(doubleprev_sum,doublenew_val){returnprev_sum+new_val*new_val;}templatedoublevec_add_squares(constV&v){returnstd::accumulate(v.begin(),v.end(),0.0,add_square);}templateboost::tupleget_std_dev_and_error(const

c++ - 标准容器元素的常量正确性

以下是错误的:vectorvec;问题是模板类型需要是可分配的。以下代码编译[编辑:在VisualStudio2010中],演示了上述问题:vectorvec;vec.push_back(6);vec[0]+=4;对于更复杂的类型,这可能是一个严重的问题。我的第一个问题是这种行为是否有原因。在我看来,有可能制作出不允许上述内容的const容器和允许它的非const容器。其次,有没有办法让容器以这种方式运行?第三,这里实际发生了什么(用户类型)?我意识到这是未定义的行为,但STL是如何编译它的? 最佳答案 原因std::vector不

c++ - Win32 更改为二进制模式子标准输出(管道)

你好这个伟大的社区,当使用管道重定向子项时,('\n')0x0A到('\n\r')0x0D0x0A的自动转换出现问题stdout到一个文件,child的输出是字节而不是文本。首先,我使用了这些例子MSDN-CreatingaChildProcesswithRedirectedInputandOutput和http://support.microsoft.com/kb/190351),现在我有了这个基本应用程序,它创建了一个管道并将child的STDOUT重定向到一个二进制文件。所有这些都在VisualC++6.0中的Win32控制台应用程序中(是的,它很旧,但是是必需的)。#defin

c++ - 如何在C语言中检测环绕计数器和大负值之间的区别

为我的愚蠢道歉,因为这是我在这个论坛上的第一篇文章。我试图在以下代码的帮助下检测环绕无符号32位计数器和大型负跳转之间的区别,但编译器给我错误:错误:由于数据类型的范围有限,比较始终为真[-Werror=type-limits]这是我的代码片段:#defineMAX_BACKWARD_JUMP-4294959295//UINT_MAX-8000#defineMIN_BACKWARD_JUMP-3600#defineMAX_FORWARD_JUMP4800000signedintrtpDelta;//Signed32-bitunsignedintcurrRTPTs,prevRTPTs;/