小编Boi*_*nst的帖子

如果我在C++中为"std :: string&"类型的参数指定默认值,是否会导致内存泄漏?

我有一个声明如此的方法:

/*!
\brief Removes the leading and trailing white space from a string.
\param s The string to remove the white space from.
\param white_chars Characters to be considered as whitespace.
*/
std::string Trim(const std::string &s, const std::string &white_chars = " \t\n\r");
Run Code Online (Sandbox Code Playgroud)

该方法的定义是无趣的,但无论如何它在这里:

std::string Trim(const std::string &s, const std::string &white_chars)
{
    size_t startidx = s.find_first_not_of(white_chars);
    if (startidx == std::string::npos) return "";
    size_t endidx = s.find_last_not_of(white_chars);
    return s.substr(startidx, endidx - startidx + 1);
}
Run Code Online (Sandbox Code Playgroud)

现在在这种方法的大多数用法中,我只提供了第一个参数.Valgrind给了我以下警告

==3338== 68 bytes in 2 blocks …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind memory-leaks stdstring

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

是否有可能让GCC用BOM源文件编译UTF-8?

我使用Windows上的Microsoft Visual Studio和uBuntu Linux上的GCC开发C++交叉平台.

在Visual Studio中,我可以在我的代码中使用像" π "和" ² " 这样的unicode符号.Visual Studio始终将源文件保存为带有BOM(字节顺序标记)的UTF-8.

例如:

// A = ?.r²
double ? = 3.14;
Run Code Online (Sandbox Code Playgroud)

只有在我首先删除BOM时,GCC才会愉快地编译这些文件.如果我不删除BOM,我会收到以下错误:

wwga_hydutils.cpp:28:9:错误:在程序中迷路'\ 317'

wwga_hydutils.cpp:28:9:错误:在程序中迷失'\ 200'

这让我想到了这个问题:

有没有办法让GCC编译UTF-8文件而不先删除BOM?


我正在使用:

  • Windows 7的
  • Visual Studio 2010

和:

  • uBuntu Oneiric 11.10
  • GCC 4.6.1(由apt-get install gcc提供)

编辑:

正如第一个评论者指出的那样,我的问题不是 BOM,而是在字符串常量之外使用非ascii字符.GCC不喜欢符号名称中的非ascii字符,但事实证明GCC与带有BOM的UTF-8完全兼容.

gcc byte-order-mark g++ utf-8

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

是否有(Linux)g ++等效于Visual Studio中使用的/ fp:precise和/ fp:fast标志?

背景:

许多年前,我继承了一个使用Visual Studio(VC++)标志'/ fp:fast'的代码库,以在特定的计算重量库中生成更快的代码.不幸的是,'/ fp:fast'产生的结果与不同编译器(Borland C++)下的同一个库略有不同.当我们需要产生完全相同的结果时,我切换到'/ fp:precise',这很好,从那以后一切都很好.但是,现在我在uBuntu Linux 10.04上用g ++编译同一个库,我看到了类似的行为,我想知道它是否有类似的根本原因.我的g ++构建的数值结果与我的VC++构建的数值结果略有不同.这让我想到了我的问题:

题:

g ++与VC++中的'fp:fast'和'fp:precise'选项有相同或相似的参数吗?(它们是什么?我想激活'fp:precise'等价物.)

更详细的信息:

我使用'make'编译,它调用g ++.据我所知(make文件有点神秘,而且不是我写的)g +调用中添加的唯一参数是"普通"(包括文件夹和要编译的文件)和-fPIC(我不确定这个开关是做什么的,我没有在'man'页面上看到它.

'man g ++'中唯一相关的参数似乎是用于打开优化选项.(例如-funsafe-math-optimizations).但是,我认为我没有打开任何东西,我只是想关闭相关的优化.

我已经尝试过发布和调试版本,VC++为发布和调试提供了相同的结果,g ++给出了与发布和调试相同的结果,但是我不能让g ++版本给出与VC++版本相同的结果.

c++ g++ compiler-optimization visual-studio-2008 ubuntu-10.04

11
推荐指数
3
解决办法
5329
查看次数

如何使用css,javascript或jquery忽略html"代码"块中的前导和尾随换行符?

在我的HTML源代码中,我有一个代码块,如下所示(我在本页面上使用showdown和highlight.js):

<pre><code class="cpp">
double myNumber = (double)4;
</code></pre>
Run Code Online (Sandbox Code Playgroud)

我的问题是第一个换行符仍然是"代码"块的一部分.这可能是因为封闭的"pre"块,但我需要它,因为highlight.js期望它(显然HTML5标准推荐它).代码呈现如下(注意前导换行符):

在此输入图像描述

所以我的问题是,使用css,javascript或jquery,如何从像这样的"代码"块中删除前导或尾随换行?

html javascript css jquery

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

是否有广泛使用的C++单元测试框架支持测试类别?

我目前正在使用CppUnit进行测试,但由于缺乏对类别概念的支持而感到沮丧.有没有广泛使用的C++单元测试框架支持这个想法?

以下是直接来自NUnit文档的示例:

namespace NUnit.Tests
{
  using System;
  using NUnit.Framework;

  [TestFixture]
  [Category("LongRunning")]
  public class LongRunningTests
  {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我们的想法是能够将测试分组到不同的类别中,并在指定的类别中执行测试,或者根据类别排除测试.

我尝试过CppUnit,Boost.Test和Google Test,但没有一个直接支持这个想法.

例如,我有单元测试,集成测试,中等测试和大型测试.单元集成测试运行得很快,所以我在自动构建中的每个构建配置中运行它们:Release/Debug,x86/x64,linux/windows.中等测试需要时间来运行,所以我只在Release | x64 | windows build中运行它们.大型测试作为开发辅助工具存在:它们永远不会在自动构建中运行.然后为了增加乐趣,我的功能只存在于x86 | windows中(它很复杂).我用复杂的层次结构完成所有这些,CppUnit很乐意支持.但是,使用"release","debug","x86"等类别进行此操作会更好.

在CppUnit中,我的测试目前在Fixture类中.理想情况下,我希望能够使用类别标记这些灯具,然后我可以相应地进行过滤.

测试层次结构不做的一个关键事情是,哪个类别可以做,就是在一个夹具上有多个类别.

c++ unit-testing

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

什么是相当于MAXDWORD的Linux?

在Microsoft Visual C++中,在winnt.h中定义了一个名为MAXDWORD的常量,如下所示:

#define MAXDWORD 0xffffffff

当搜索集合中的最低值时,它对于'double'的高初始值很有用.谷歌虽然我可能,我在Linux上找不到标准标题中的等价物,但我愿意打赌必须有一个.

我正在使用:

  • uBuntu 10.04 64位
  • g ++ 4.4.3

c++ linux constants

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

在 Windows 上从 Markdown 生成 CHM 和 PDF 文档的工具

是否有一个工具可以在 Windows 上从 Markdown(或类似的,例如 RST)生成 PDF 和 CHM 文档。

我们目前正在使用Sphinx,但无法在 Windows 上生成 PDF(这个人也有同样的问题)。在 Windows 上生成 CHM 并在 Linux 上生成 PDF 版本是一件痛苦的事情(我确实需要生成这两个版本)。

是否有替代工具(免费或廉价的商业工具)可以完成此任务?

源格式必须是类似纯文本的格式,以便进行版本控制,例如 Markdown 和 RST。

pdf chm markdown python-sphinx

5
推荐指数
2
解决办法
4147
查看次数

如何从boost :: timer :: cpu_timer获取经过的时间(以秒为单位)?

以下粗略代码基于文档,给出了boost中提供的计时器对象所用的经过时间(以秒为单位).

boost::timer::cpu_timer timer;
// ...do some work...
const boost::timer::nanosecond_type oneSecond(1000000000LL);
return timer.elapsed().user / oneSecond;
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于我的代码中有这个令人不舒服的幻数.在boost中是否有一些方法可以让我在调用elapsed().user时可用的nanosecond_type值中经过几秒钟,而没有在我的代码中使用这个神奇的数字?

(编辑:)结论:

根据接受的答案,我最终在我的生产代码中使用了这个片段:

boost::timer::cpu_timer timer;
// ...do some work...
auto nanoseconds = boost::chrono::nanoseconds(timer.elapsed().user + timer.elapsed().system);
auto seconds = boost::chrono::duration_cast<boost::chrono::seconds>(nanoseconds);
std::cout << seconds.count() << std::endl;
Run Code Online (Sandbox Code Playgroud)

c++ boost

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

我可以在没有管理员权限的情况下注册自定义 URL 方案吗?

关于如何注册自定义 URL 方案(例如这个)有许多堆栈溢出问题。然而,在每种情况下的答案似乎都是写入特权注册表项HKEY_CLASSES_ROOT。我的(基于 wix 的)安装程序目前在没有提升的情况下运行,按用户安装。有什么方法可以在提升到管理员权限的情况下注册自定义 URL 方案?我不需要支持比 Windows 7 更旧的任何东西。

我想要实现的是在我的应用程序中执行特定操作的网页上有链接。我的应用程序主要是 .NET。该网页是 ASP.NET。

url installation wix

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

如何让 GIT/SSH 在特定位置查找“known_hosts”?

我使用 GIT 作为 Ubuntu Linux 上自动构建过程的一部分。因为它是一个自动化的构建过程,所以最好将所有配置都放在版本控制中,这样我就不必在配置更改时登录每个构建代理。

为了使其正常工作,我有一个私钥(具有只读存储库访问权限)和一个签入版本控制的known_hosts 文件。

我将 HOME 环境变量设置为版本控制中的某个位置 (build/ssh_home),以便允许 GIT 找到我的known_hosts 文件 (build/ssh_home/.ssh/known_hosts)。

我使用以下命令“激活”私钥并从 GIT 中提取私钥。“git clone”步骤类似。

ssh-agent bash -c "echo $HOME; ssh-add '${deploymentKey}' >/dev/null 2>&1; git pull ${repository} --quiet"
Run Code Online (Sandbox Code Playgroud)

这适用于 Windows。然而,在 Ubuntu Linux 上,这还不够。

“HOME”环境变量设置如下(在 bash 脚本中)

export HOME=`pwd`/build/ssh_home
Run Code Online (Sandbox Code Playgroud)

但是,它显然没有使用正确的known_hosts 文件,它仍在尝试使用 ~/.ssh/known_hosts 中的文件,下面消息中引用的路径证明了这一点。

The authenticity of host 'bitbucket.org (131.103.20.168)' can't be established. 
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40. 
Are you sure you want to continue connecting (yes/no)? yes 
Failed to add the host to the list of …
Run Code Online (Sandbox Code Playgroud)

git ssh ubuntu

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