小编vll*_*vll的帖子

为什么通过std :: atomic使用volatile限定符?

从我从Herb Sutter其他人那里读到的内容,您会认为volatile并发编程是完全正交的概念,至少就C/C++而言.

但是,在GCC 实现中,所有std::atomic的成员函数都有volatile限定符.安东尼威廉姆斯的实施也是如此std::atomic.

那么什么是交易,我的atomic<>变量需要volatile与否?

c++ atomic volatile c++11

71
推荐指数
3
解决办法
7582
查看次数

捕获异常:除以零

当我尝试除以0时,下面的代码没有捕获异常.我是否需要抛出异常,或者计算机是否在运行时自动抛出一个异常?

int i = 0;

cin >> i;  // what if someone enters zero?

try {
    i = 5/i;
}
catch (std::logic_error e) {

    cerr << e.what();
}
Run Code Online (Sandbox Code Playgroud)

c++ exception-handling

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

测量C++代码的运行时间?

我想测量我的C++代码的运行时.执行我的代码大约需要12个小时,我想在执行代码时写下这段时间.我怎么能在我的代码中做到这一点?

操作系统:Linux

c++ linux

31
推荐指数
6
解决办法
4万
查看次数

Delphi XE 6 - SOAP请求HTTPRIO错误:系统找不到指定的文件

错误出现在ShowMessage(aServer.mc_version)此代码的行中:

uses mantisconnect;

procedure TForm.Button1Click(Sender: TObject);
var
   aServer: MantisConnectPortType;
begin
   aServer := GetMantisConnectPortType;
   ShowMessage('Mantis version:' + aServer.mc_version);
end;
Run Code Online (Sandbox Code Playgroud)

相同的代码适用于Delphi XE5,但是在Delphi XE6上编译时第一次触发错误(首次单击按钮),但下次有效:

The system cannot find the file specified 
URL:http://www.mymantis.com/api/soap/mantisconnect.php - 
SOAPAction: URL:http://www.mymantis.com/api/soap/mantisconnect.php/mc_version
Run Code Online (Sandbox Code Playgroud)

如果我再试一次(第二次点击按钮)就行了!输出:

Mantis version:1.2.9
Run Code Online (Sandbox Code Playgroud)

连接过程列表是

function GetMantisConnectPortType(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): MantisConnectPortType;
const
  defWSDL = 'http://www.mymantis.com/api/soap/mantisconnect.php?wsdl';
  defURL  = 'http://www.mymantis.com/api/soap/mantisconnect.php';
  defSvc  = 'MantisConnect';
  defPrt  = 'MantisConnectPort';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr …
Run Code Online (Sandbox Code Playgroud)

delphi soap mantis delphi-xe6

17
推荐指数
0
解决办法
1525
查看次数

boost :: asio :: async_read_until读取所有数据而不是一些数据

我修改了Boost Asio echo示例,用于async_read_until逐字读取输入.即使我正在使用async_read_until,所有发送的数据似乎都是从套接字中读取的.有人可以建议:

#include <cstdlib>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

class session
{
public:
  session(boost::asio::io_service& io_service)
    : socket_(io_service)
  {
  }

  tcp::socket& socket()
  {
    return socket_;
  }

  void start()
  {
 std::cout<<"starting"<<std::endl;
  boost::asio::async_read_until(socket_, buffer, ' ',
        boost::bind(&session::handle_read, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
  }

  void handle_read(const boost::system::error_code& error,
      size_t bytes_transferred)
  {

 std::ostringstream ss;
 ss<<&buffer;
 std::string s = ss.str();
 std::cout<<s<<std::endl;

 if (!error)
    {
      boost::asio::async_write(socket_,
          boost::asio::buffer(s),
          boost::bind(&session::handle_write, this,
            boost::asio::placeholders::error));
    }
    else
    {
      delete this;
    }
  }

  void handle_write(const boost::system::error_code& error) …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-asio

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

为什么这个计算在boost :: thread和std :: thread中给出不同的结果?

执行此浮点计算时boost::thread,它会产生与std::thread在主线程中或主线程中执行时不同的结果.

void print_number()
{
    double a = 5.66;
    double b = 0.0000001;
    double c = 500.4444;
    double d = 0.13423;
    double v = std::sin(d) * std::exp(0.4 * a + b) / std::pow(c, 2.3);

    printf("%llX\n%0.25f\n", *reinterpret_cast<unsigned long long*>(&v), v);
}
Run Code Online (Sandbox Code Playgroud)

这似乎是因为boost::thread默认情况下使用53位内部精度进行浮点数学运算,而主线程使用的是64位精度.如果在创建_fpreset()后重置FPU单元的状态boost::thread,则结果与主线程中的结果相同.

我正在使用Embarcadero C++ Builder 10.1(编译器bcc32c版本3.3.1)和Boost 1.55.0.我的环境是Windows 7,我正在构建32位Windows目标.

工作范例:

#include <tchar.h>
#include <thread>
#include <boost/thread.hpp>
#include <cstdio>
#include <cmath>
#include <cfloat>

namespace boost { void tss_cleanup_implemented() {} }

void print_number()
{
    double …
Run Code Online (Sandbox Code Playgroud)

c++ c++builder floating-accuracy boost-thread

14
推荐指数
2
解决办法
492
查看次数

ostream showbase对于零值不显示"0x"

PSPS :( 一个预先编写脚本的脚本)
刚刚想到一个更有先见之明的问题包括以下概念:这是否为零值整数的非显示"0x"(showbase)是标准行为,或者这只是我的MinGW实施的一个怪癖?

这一切都是在一个愉快的星期天早上开始的......我想以十六进制表示形式转储一些Handles,并采用一致的格式化方式.
我想要一个前导0x和一个固定宽度,但事实证明这是使用预期的流操纵器难以捉摸的.
我发现这样做的唯一方法是将Handles强制转换为unsigned long.这似乎有点不合理,我希望我不是唯一一个想要这个的人......
在标准六角形机械手中遗漏了什么?是因为类型void*(HANDLE)只是在ostream的正常十六进制处理之外定义?

总结:我不想将HANDLE强制转换为不是的东西.
我不想硬编码"0x"前缀.有没有办法使用标准操纵器?还是我需要重载ostream对HANDLE的处理?(但这可能使我超负荷!)

这是我的测试代码(及其输出).
我用过'.' 作为填充字符,为清楚起见,(我实际上将使用'0')

HANDLE h; 
ULONG ul; 
int iH = sizeof(h); // how many bytes to this void* type.
int iW = iH*2;      // the max number of hex digits (width).
int iW2= iW+2;      // the max number of hex digits (+ 2 for showbase "0x").
int iX = 4;         // the number of bits per hex digit.
int …
Run Code Online (Sandbox Code Playgroud)

c++ formatting stream manipulators

10
推荐指数
2
解决办法
1784
查看次数

提取不以特定单词结尾的值

我有一张包含一些数据的表格.它可以看起来像这样的例子:

7   Gelb    
8   Schwarz
9   Weiß my color
10  Grau
16  Gelb I  
17  Gelb II 
18  Gelb III    
19  Gelb IV 
27  Schwarz I   
28  Schwarz II  
29  Schwarz III 
30  Schwarz IV  
31  Schwarz V   
32  Schwarz VI  
39  Weiß my color III   
40  Weiß my color IV    
41  Weiß my color V 
42  Weiß my color VI    
Run Code Online (Sandbox Code Playgroud)

如您所见,在某些记录中,我们在常规中使用罗马数字 <name><space><roman number>

例如,有"Gelb","Weiß我的颜色""Schwarz",在罗马会议中也有他们的记录.对于一些人来说,像"Grau",没有重复.

因此,将会有没有罗马数字的唯一颜色名称的记录,例如记录"Grau",并且在表格中它可以包含或不包含一些带有它的记录和罗马数字.

罗马数字总是在最后,如: <name><space><romannumber>

我的目标只是获得独特的名字.因此,我只想提取示例:

7 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

10
推荐指数
1
解决办法
289
查看次数

除以零 - c编程

我对下一个代码有疑问:

int main { 
double x = 0;
double y = 0/x;

if(y==1) {.....}
....
....
return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在我的计算机上运行代码时,我没有遇到运行时错误,我看到了y = -nan(0x8000000000000).为什么不将运行时错误除以零?

此外,当我将第一行更改为int x = 0; 现在时,存在运行时错误.有什么不同?

c floating-point nan

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

如何定义x87浮点控制字的初始值?

可以检查x87浮点控制字的值_control87.当一个新线程启动时,在我的平台上,它似乎从父线程继承浮点控制字的值.

这是未定义的行为,还是我保证,如果我启动一个新线程,并且线程库没有错误,控制字具有与父线程中相同的值?

在哪个标准中定义了这种行为,以及如何?如果未在任何标准中定义,是在处理器手册或操作系统文档中定义的?

我正在使用C++语言,在64位Windows 7上开发,编译32位Windows目标,并使用x86兼容处理器执行代码.我需要专门针对此平台的答案,但如果所有语言和处理器的行为相同,那么通用答案会更好.

c c++ floating-point x87

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