草庐IT

c++ - 测试 ODBC 连接的有效方法

我们的产品是一个TCP监听事务处理器。传入连接被分配一个线程来处理连接和一个数据库连接来处理。我们维护一个数据库连接池,而不是为每个传入的客户端连接建立新的数据库连接的昂贵方法。数据库连接池相当可配置:最小/最大大小、增长率等。一些细节:平台为Windows2003/2008R2数据库是SQLServer2005/2008R2连接方式为ODBC编程语言为C++最后,问题:由于该服务可以在不重新启动的情况下运行数月,因此池中的某些数据库连接很有可能会失效。在将给定连接分配给传入连接之前,我希望有一种尽可能快的方法来测试它的有效性。目前,我通过执行简单的SQL语句“SELECT123;”来

c++ - int main(void) 在 C++ 中有效吗?

C++标准列出了main允许的形式。它没有将intmain(void)列为允许的形式。但是,它通常指出Theparameterlist(void)isequivalenttotheemptyparameterlistintmain(void)是一种允许的形式吗? 最佳答案 来自N3936标准草案:3.6Startandtermination3.6.1Mainfunction2Animplementationshallnotpredefinethemainfunction.Thisfunctionshallnotbeoverloade

c++ - 在没有科学记数法的情况下在 C++ 中格式化 n 个有效数字

我想将一个浮点值格式化为n个有效数字,但从不使用科学记数法(即使它会更短)。格式规范%f不处理有效数字,%g有时会给我科学记数法(这不适合我使用)。我想要"123"、"12.3"、"1.23"或"0.000000123"形式的值。是否有优雅的方式使用C++或boost来做到这一点? 最佳答案 我知道(并在我自己的代码中使用它)的最好方法是#include#include#include#includeintround(doublenumber){return(number>=0)?(int)(number+0.5):(int)(nu

c++ - "defau1t:"(不是 "default:")是标签的有效值吗?

这个问题在这里已经有了答案:Defaultcaseinaswitchcondition(3个答案)关闭6年前。为什么这段代码可以正常编译和运行。我在l的位置写了defau1t而不是default,1。#includeintmain(){inti=4;switch(i){case3:break;defau1t:break;}}

c++ - 我是否必须使用 weak_ptr.lock() 来测试它是否指向有效对象?

创建一个临时的shared_ptr只是为了查看weak_ptr是否指向一个有效的对象似乎有点低效。我什至不想访问该对象。这是因为我有一个从shared_ptrvector返回weak_ptr的函数,如果它返回一个空的weak_ptr那么这意味着该对象不存在该GUID。所以我只是在测试一个对象是否存在。有没有另一种方法可以在不创建shared_ptr的情况下检查weak_ptr是否为空? 最佳答案 您可以使用expired()成员函数。 关于c++-我是否必须使用weak_ptr.lock

c++ - Boost.Program_Options : When <bool> is specified as a command-line option, 什么是有效的命令行参数?

鉴于Boost.Program_Options的以下简单使用:boost::program_options::options_descriptionoptions("Options");options.add_options()("my_bool_flag,b",boost::program_options::value(),"Samplebooleanswitch)");...哪些命令行参数将评估为false,哪些评估为true?(即假设程序名为“foo”,并在命令行上执行为:foo-b?...问号是其他一些文本的占位符:所有可能的文本选项将正确评估为false,什么是true?)

c++ - 输出换行符的最有效方法

我想知道将新行输出到控制台的最有效的性能方式是什么。请解释为什么一种技术更有效。性能高效。例如:cout这个问题的动机是我发现我自己写了带有输出的循环,我需要在循环的所有迭代之后输出一个新行。假设没有其他问题,我试图找出最有效的方法是什么。这种认为其他一切都不重要的假设可能是错误的。 最佳答案 putchar('\n')是最简单也可能是最快的。cout和printfwithstring"\n"使用以null结尾的字符串,这比较慢,因为您处理2个字节(0A00)。顺便说一句,回车是\r=13(0x0D)。\n代码为换行(LF)。

c++ - 最低有效字节是什么意思?

我必须实现一个将字节写入ostream对象的方法。我们将这个ostream对象称为strobj。我还有一个用于存储一个字节数据的位缓冲区,我们称它为:char&bitter;在我的头文件中,我有这个:voidwriteThisByte(intsumInt);说明说我必须将传递给ostream对象的int的“不太重要的字节”写入,即strobj;但是,我对最低有效字节的确切含义感到困惑。这是否意味着您正在检查是否sumInt==1?如果是,您会像这样将它写入ostream吗?strobj.write(&bitter,1);我不确定:( 最佳答案

c++ - Clang 与 GCC - Variadic 模板参数包后跟具有默认值的参数在 GCC 4.8 中有效,但在 Clang 3.5 中无效

下面的代码适用于gcc-4.8.2#includeusingnamespacestd;templatevoidfunc(Args...args,intoptional=0){cout(3.3f);//Fine,prints'0'func();//gccOK,failstocompilewithclang-3.5}它输出:$./a.out1200但是如果用clang-3.5编译失败,test_variadic.cpp:15:2:error:nomatchingfunctionforcallto'func'func();^~~~test_variadic.cpp:5:6:note:cand

c++ - 如何有效地并行设置位 vector 的位?

考虑N的位vector其中的位(N很大)和M的数组数字(M中等,通常比N小得多),每个都在0..N-1范围内指示vector的哪一位必须设置为1.后一个数组未排序。位vector只是一个整数数组,特别是__m256i,其中每个__m256i被打包成256位结构体。如何在多个线程中有效地拆分这项工作?首选语言是C++(MSVC++2017工具集v141),汇编也很棒。首选CPU是x86_64(内在没问题)。如果有任何好处,则需要AVX2。 最佳答案 假设您想将这项工作分配给T线程。这是一个非常有趣的问题,因为它不能通过分区简单地并行化