小编Gor*_*pik的帖子

避免在printf()中尾随零

我一直绊倒printf()函数系列的格式说明符.我想要的是能够在小数点后打印一个最大给定位数的double(或float).如果我使用:

printf("%1.3f", 359.01335);
printf("%1.3f", 359.00999);
Run Code Online (Sandbox Code Playgroud)

我明白了

359.013
359.010
Run Code Online (Sandbox Code Playgroud)

而不是期望的

359.013
359.01
Run Code Online (Sandbox Code Playgroud)

有谁能够帮我?

c printf

105
推荐指数
4
解决办法
11万
查看次数

为什么不〜后跟:: parse

在Andrei Alexandrescu关于错误处理的讨论中:

参见C++和2012年之后:Andrei Alexandrescu - C++中的系统错误处理(大约30分钟)

Andrei提供以下代码:

~Expected()
{
    using std::exception_ptr;
    if (gotHam) ham.~T();
    else spam.~exception_ptr();
}
Run Code Online (Sandbox Code Playgroud)

这个析构函数正在清理一个union包含某种类型T或一个类型的析构函数std::exception_ptr.工会填充使用placement new.

然后安德烈解释说这using std::exception_ptr;是必要的,因为以下代码不解析:

    else spam.~std::exception_ptr();
Run Code Online (Sandbox Code Playgroud)

这意味着如果需要在不同的命名空间中显式调用类的析构函数,则始终需要使用using指令.

为什么第二个例子不解析?

以下代码是否是有效的替代方案?

    else delete spam;
Run Code Online (Sandbox Code Playgroud)

这是否与显式调用析构函数具有相同的效果 std::exception_ptr

c++ c++11

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

从应用程序中获取应用程序版本

有没有一种简单的方法可以在运行时从资源文件中获取应用程序版本信息?

实际上,我想要做的是能够在运行时显示"Version XYZ",而不必在某个地方使用我必须与ProductVersion和FileVersion保持同步的单独变量.

澄清一下:是的,这是一个标准的C++ Windows项目.我知道GetFileVersionInfo方法但是从内存中的版本打开二进制文件只是为了查询版本信息似乎很愚蠢 - 我确定我错过了一些明显的东西:-)

c++ windows versioning winapi

12
推荐指数
2
解决办法
7836
查看次数

检测c ++结构从单元测试更新

我有一系列数据结构,应该使用boost :: serialization从一层传递到另一层.例如

struct DataType1
{
    std::string field1;
    std::string field2;

    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)
    {
        ar & field1;
        ar & field2;
    }
};
Run Code Online (Sandbox Code Playgroud)

我想写这个单元测试,只是为了确保我没有错过一些字段(有很多结构和字段).

问题是,如果我在结构中添加新字段(我肯定会这样做)而忘记更新单元测试,则单元测试不会覆盖此字段.

我的问题是:如何检测结构(或类)是否已更改.我的想法是使用static_assert(sizeof(DataType1)== HARD_CODED_VALUE)但它在不同的编译器,平台(x64,x86)和配置(发布,调试)中受到结构大小差异的影响.

有什么好主意如何处理这个?

c++ unit-testing

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

Kendo Treeview扩大了大树问题

我使用kendo创建了一个树控件TreeView.it有超过10,000个节点,我在创建Tree时使用了loadOnDemand false.我提供了一个功能来扩展树的级别,为此我创建了一个方法,将参数"级别"作为数字并相应地扩展它,用户可以输入15(最大级别)到方法,它工作正常所有级别的500到600个节点,但是当树具有超过5000个节点时,如果用户尝试扩展到第二级节点之上,则浏览器挂起并显示没有响应错误.

我创建的用于扩展树的方法是: -

function ExapandByLevel(level, currentLevel) {
  if (!currentLevel) { 
    currentLevel = 0;
  }
  if (level != currentLevel) {
    var collapsedItems = $("#treeView").find(".k-plus:visible"); 
    if (collapsedItems.length > 0) {
        setTimeout(function () {
            currentLevel++;

            var $tree = $("#treeView");
            var treeView = $tree.data("kendoTreeView");

            var collapsedItemsLength = collapsedItems.length;
            for (var i = 0; i < collapsedItemsLength; i++) {
                treeView.expand($(collapsedItems[i]).closest(".k-item"));
            }
            ExapandByLevel(level, currentLevel);
        }, 100);
    }
    else {
        //console.timeEnd("ExapandByLevel");
        hideLoading();
    }
  }
  if (level == currentLevel) {

    hideLoading();
  }
}
Run Code Online (Sandbox Code Playgroud)

调用以上给定的方法如下: -

ExapandByLevel(15);
Run Code Online (Sandbox Code Playgroud)

这里15是在树中扩展的级别. …

javascript treeview kendo-ui

7
推荐指数
1
解决办法
4175
查看次数

Elasticsearch 忽略我的 JVM 堆大小设置

我在 Linux (Ubuntu) 的 Docker 容器内运行 Elasticsearch。我遇到了很多circuit_breaking_exception问题,引用了 486.3mb 的限制;所以我决定稍微增加 JVM 堆大小。我的机器有 6 GB 物理内存,因此堆大小最多 3 GB 应该是安全的。

所以我去改变了设置jvm.options。默认为:

-Xms1g 
-Xmx1g
Run Code Online (Sandbox Code Playgroud)

我已将其更改为:

-Xms2g 
-Xmx2g
Run Code Online (Sandbox Code Playgroud)

事情的转折来了:我不仅不断地得到相同的circuit_breaking_exception尺寸限制;而且我还不断地获得同样的东西。echo $ES_JAVA_OPTS返回-Xmx512m -Xms512m。这甚至不是默认设置。我还尝试保留默认值jvm.options并创建一个新的user.optionsinside jvm.options.d,结果相同。我错过了什么吗?我在这里做错了什么吗?

jvm-arguments elasticsearch docker-compose

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

如何确定Windows用户是否可以使用休眠模式(使用C ++)

我知道可以调用以下API来休眠系统:

SetSuspendState(TRUE, FALSE, FALSE);

但是,有什么方法可以找出当前Windows用户是否可以使用“真正的”休眠模式?

这就是我的意思:

  1. 如果管理员致电:

    powercfg.exe /hibernate off
    
    Run Code Online (Sandbox Code Playgroud)

    上面的API将使系统进入睡眠模式。那么,您如何(从C ++程序)知道这将发生而不是休眠呢?

  2. 我不确定是否存在可以禁止用户使连接到Active Directory的计算机休眠的组策略?

编辑我知道(过时的)IsPwrHibernateAllowedAPI。我发现它不起作用:即使powercfg.exe /hibernate off被调用,它仍然返回相同的结果。我在那里做错了吗?有人可以解释为什么IsPwrHibernateAllowed对我不起作用吗?

c++ winapi power-state

5
推荐指数
1
解决办法
794
查看次数

将具有可变维度的2D数组作为函数参数传递

我刚刚在codechef的成功提交中看到了以下代码.

http://www.codechef.com/viewplaintext/1595846

我曾经这么认为

float max(int n,int arr[n][n])
{....}
Run Code Online (Sandbox Code Playgroud)

C++中不允许使用(因为'n'是变量).我的CodeBlocks(在Windows上)与MinGW [gcc 4.4]给出编译时错误."错误:数组绑定不是整数常量.

然后CodeChef的判断如何接受这样的解决方案.是否有任何特殊标志允许我们在C++中这样做?

编辑:显示状态为AC(已接受)的链接:http: //www.codechef.com/viewsolution/1595846

c c++ arrays multidimensional-array

5
推荐指数
1
解决办法
1143
查看次数

常规“字符串”类“rwcstring”类之间的区别

任何人都可以让我知道普通string班级和 roguewaverwcstring班级之间的确切区别。我项目中的代码广泛使用rwcstring该类。我的疑问是,如果两者都处理和操纵字符串,那么两者之间的确切区别是什么。另外为什么 rwcstring 类被认为比常规string类更有效?

c++ string rogue-wave

5
推荐指数
1
解决办法
3002
查看次数

WebBrowser控件将忽略HKCU注册表设置值

我已经实现了使用WebBrowser控件的应用程序。要应用该IE11模式,我的应用程序设置会设置HKLM注册表值:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION]
"MyApp.exe"=dword:00002AF8
Run Code Online (Sandbox Code Playgroud)

这完美地工作,没有任何问题。

我的应用程序允许用户更改兼容性视图。当用户在我的应用程序的“选项”对话框中设置IE8兼容性时,它将设置以下HKCU注册表值,然后重新启动应用程序:

[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"MyApp.exe"=dword:00001F40
Run Code Online (Sandbox Code Playgroud)

现在这是我的问题:HKEY_CURRENT_USER设置对于大多数用户正确地起作用,但是在某些用户中,WebBrowser控件只是忽略HKEY_CURRENT_USER配置单元中的所有设置,而仅采用HKLM(这意味着用户无法进行自定义) 。

有人知道是否有任何IE配置或Bug阻止HKCU配置单元中的设置吗?可以在多台计算机/用户上重现此问题,但不是全部。我尝试用Google搜索此类问题,但没有找到任何准确的解决方案。

注意:我的应用程序未使用IDocHostUIHandler2::GetOverrideKeyPath。环境:Windows 7,IE11 MyApp.exe是x86。

registry internet-explorer webbrowser-control

3
推荐指数
1
解决办法
3405
查看次数

将数组传递给外部函数

我是 LLVM 的新手,我正在学习如何使用 LLVM 进行分析。我需要将数组传递给外部方法,并在代码中插入对该方法的调用指令。我目前正在使用以下代码,该代码在执行时会出现分段错误。

std::vector<Value*> Args(1);

//Vector with array values
SmallVector<Constant*, 2> counts;

counts.push_back(ConstantInt::get(Type::getInt32Ty(BB->getContext()),32, false));
                        counts.push_back(ConstantInt::get(Type::getInt32Ty(BB->getContext()),12, false));

//Array with 2 integers
Args[0]= ConstantArray::get(llvm::ArrayType::get(llvm::Type::getInt32Ty(BI->getContext()),2), counts);
Run Code Online (Sandbox Code Playgroud)

这里,外部函数 'hook' 定义为 M.getOrInsertFunction("hook", Type::getVoidTy(M.getContext()), llvm::ArrayType::get(llvm::Type::getInt32Ty(BI->getContext()),2) (Type*)0);

阅读了几个源文件后,我尝试使用 GetElementPtrInst 来传递数组

std::vector<Value*> ids(1);
ids.push_back(ConstantInt::get(Type::getInt32Ty(BB->getContext()),0));
Constant* array = ConstantArray::get(llvm::ArrayType::get(llvm::Type::getInt32Ty(BI->getContext()),2), counts);
Args[0] = ConstantExpr::getGetElementPtr(&(*array), ids, false);
Run Code Online (Sandbox Code Playgroud)

但它失败了

7  opt 0x00000000006c59f5 bool llvm::isa<llvm::Constant, llvm::Value*>(llvm::Value* const&) + 24

8  opt 0x00000000006c5a0f llvm::cast_retty<llvm::Constant, llvm::Value*>::ret_type llvm::cast<llvm::Constant, llvm::Value*>(llvm::Value* const&) + 24

9  opt 0x0000000000b2b22f

10 opt 0x0000000000b2a4fe llvm::ConstantFoldGetElementPtr(llvm::Constant*, bool, llvm::ArrayRef<llvm::Value*>) + 55

11 …
Run Code Online (Sandbox Code Playgroud)

c++ llvm llvm-c++-api

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

我必须从头开始吗?

如果我有:

std::size_t bagCapacity_ = 10;
std::size_t bagSize = 0;
A** bag = new A*[bagCapacity_];

while (capacity--)
{
  bag[capacity] = new A(bagSize++); //**here I'm loading this array from the end is it ok?**
}
Run Code Online (Sandbox Code Playgroud)

还可以从数组末尾开始删除那些对象吗?

while (capacity--)
{
  delete bag[capacity];
}
Run Code Online (Sandbox Code Playgroud)

代码中的问题.

c++ arrays

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

在C++中使用'〜'有什么用?

#include<iostream.h>
void main()
{
   int x[]={1,2,3,4,5};
   for(int i=0;~i<5;i++)
      {    cout<<*x;
      }
}
Run Code Online (Sandbox Code Playgroud)

当我运行这个程序时,控制台的显示有无数的1.我不明白这是怎么发生的.请帮助我退出这个程序......这是由于代字号运算符,如果它的原因那么如何?

c++ pointers loops

0
推荐指数
1
解决办法
498
查看次数