小编Ale*_*ain的帖子

为什么C++没有power运算符?

许多语言都有电力运营商; 为什么不用C++?例如,Fortran和Python使用**并且通常使用(例如在LaTeX中)编写^.

c++ operator-keyword

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

如何检查有效的Git分支名称?

我正在git post-receive用Python开发一个钩子.提供的数据stdin与类似的行

ef4d4037f8568e386629457d4d960915a85da2ae 61a4033ccf9159ae69f951f709d9c987d3c9f580 refs/heads/master
Run Code Online (Sandbox Code Playgroud)

第一个哈希是old-ref,第二个哈希是new-ref,第三列是要更新的引用.

我想将它分成3个变量,同时也验证输入.如何验证分支名称?

我目前正在使用以下正则表达式

^([0-9a-f]{40}) ([0-9a-f]{40}) refs/heads/([0-9a-zA-Z]+)$
Run Code Online (Sandbox Code Playgroud)

这不接受所有可能的分支名称,如man git-check-ref-format所示.例如,它排除名称build-master为有效的分支.

奖励标记

我实际上想要排除任何以"build-"开头的分支.这可以在同一个正则表达式中完成吗?

测试

鉴于下面的答案很好,我写了一些测试,可以在https://github.com/alexchamberlain/githooks/blob/master/miscellaneous/git-branch-re-test.py找到 .

状态:以下所有正则表达式都无法编译.这可能表示我的脚本存在问题或语法不兼容.

python regex git githooks

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

从依赖基类访问类型

有谁知道为什么使用声明似乎不适用于从依赖基类导入类型名称?它们适用于成员变量和函数,但至少在GCC 4.3中,它们似乎被忽略了类型.

template <class T>
struct Base
{
  typedef T value_type;
};

template <class T>
struct Derived : Base<T>
{
  // Version 1: error on conforming compilers
  value_type get();

  // Version 2: OK, but unwieldy for repeated references
  typename Base<T>::value_type get();

  // Version 3: OK, but unwieldy for many types or deep inheritance
  typedef typename Base<T>::value_type value_type;
  value_type get();

  // Version 4: why doesn't this work?
  using typename Base<T>::value_type;
  value_type get(); // GCC: `value_type' is not a type
};
Run Code Online (Sandbox Code Playgroud)

我有一个基类,有一组allocator样式的typedef,我想在几个继承级别继承.到目前为止,我发现的最佳解决方案是上面的版本3,但我很好奇为什么版本4似乎不起作用.GCC接受使用声明,但似乎忽略它. …

c++ templates dependent-name using-declaration

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

如何以编程方式循环安装?

我最近写了一个关于如何在Raspberry Pi.SE上从图像文件挂载分区指南.说明相当复杂,我有一点时间,所以想用C程序替换它们.我已成功列出图像的分区并计算到适当的偏移量.

在原始说明中,我们需要运行

$ sudo mount -o loop,offset=80740352 debian6-19-04-2012.img /mnt
Run Code Online (Sandbox Code Playgroud)

我现在需要在代码中执行此操作.我在util-linux中找到了mount函数和libmount.

我现在在util-linux中找到了loopdev.c.有没有一种简单的方法来创建循环设备或我是否必须从这些代码中学习并使用ioctl?

c mount

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

如何链接zlib库

嗨,我正在使用boost和zlib过滤器来压缩和解压缩数据.在boost页面的指令中,它说如果.cpp文件依赖于外部库,你必须从源代码构建它或链接到预构建的二进制文件.

我使用mac端口安装boost和zlib.我将boost libarary包含为-I/opt/local/include

我的代码:

#include <fstream>
#include <iostream>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/copy.hpp>
#include <boost/iostreams/filter/zlib.hpp>

int main() 
{
    using namespace std;

    ifstream file("hello.z", ios_base::in | ios_base::binary);
    filtering_streambuf<input> in;
    in.push(zlib_decompressor());
    in.push(file);
    boost::iostreams::copy(in, cout);
}
Run Code Online (Sandbox Code Playgroud)

我想知道如何链接预建的zlib外部库?它给了我这个编译问题:

mpic++ -o local ods_v2.0.cpp -I/opt/local/include
Undefined symbols for architecture x86_64:
  "boost::iostreams::zlib_error::check(int)", referenced from:
      long boost::iostreams::symmetric_filter<boost::iostreams::detail::zlib_decompressor_impl<std::allocator<char> >, std::allocator<char> >::write<boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> > >(boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> >&, char const*, long) in ods_v2-DjDcji.o
      void boost::iostreams::symmetric_filter<boost::iostreams::detail::zlib_decompressor_impl<std::allocator<char> >, std::allocator<char> >::close<boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> > >(boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> >&, std::_Ios_Openmode) in ods_v2-DjDcji.o
      void boost::iostreams::symmetric_filter<boost::iostreams::detail::zlib_decompressor_impl<std::allocator<char> >, std::allocator<char> >::close<boost::iostreams::non_blocking_adapter<boost::iostreams::detail::linked_streambuf<char, std::char_traits<char> …
Run Code Online (Sandbox Code Playgroud)

c++ compression boost zlib

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

对于非重复项目,最有效的std容器是什么?

将非重复元素添加到STL容器中的最有效方法是什么,哪种容器最快?我有大量的数据,我担心每次尝试检查它是否是新元素时,都需要花费很多时间.我希望地图非常快.

// 1- Map
map<int, int> Map;
...
if(Map.find(Element)!=Map.end()) Map[Element]=ID;

// 2-Vector
vector<int> Vec;
...
if(find(Vec.begin(), Vec.end(), Element)!=Vec.end()) Vec.push_back(Element);

// 3-Set
// Edit: I made a mistake: set::find is O(LogN) not O(N)
Run Code Online (Sandbox Code Playgroud)

c++ containers vector map set

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

我什么时候需要释放记忆?

我学习了C#,现在我正在学习C++.释放记忆的全部意义对我来说都是新的,我想知道什么时候我需要担心释放内存以及什么时候不需要.

根据我的理解,我唯一担心内存释放的情况是,当我使用newoperator时,所以我应该通过使用释放内存delete.
但在这些情况下,没有必要释放内存:

  • 类变量(成员)或静态变量.
  • 函数中的局部变量.
  • STL系列(字符串,列表,矢量等).

这是真的?
还有其他情况我不得不担心释放内存吗?

c++ memory

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

分配提示是否被使用?

我在阅读为什么C++分配器中没有重新分配功能?是否有可能创建在运行时堆的数组,然后在需要时分配更多的空间?,这清楚地表明动态数组对象的重新分配是不可能的.

但是,在Josuttis 的C++标准库中,它声明了一个Allocator,它allocator具有一个allocate具有以下语法的函数

pointer allocator::allocate(size_type num, allocator<void>::pointer hint = 0)
Run Code Online (Sandbox Code Playgroud)

其中hint有一个实现定义的含义,可用于帮助提高性能.

有没有利用这个的实现?

c++ allocator

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

如何删除裸`git`存储库中的唯一分支?

我正在尝试一些githooks,所以我已经设置了一个本地裸存储库,其中包含符号链接hooks到存储在别处的挂钩.

我把master分支推到了git回购中,当然,钩子失败了.:)

我想将gitrepo 重置为空,不删除它并且必须重新创建符号链接等.

如何删除主分支,因为它是存储库中唯一的分支?

$ git branch -d master
error: Cannot delete the branch 'master' which you are currently on.
Run Code Online (Sandbox Code Playgroud)

git

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

C++如何对负数进行按位"或"操作?

当我给变量这样的值:e = 17|-15;,我在编译后得到-15作为答案.我无法理解c ++的算术运算.它如何对负小数执行逐位OR运算?

c++ bitwise-operators bitwise-or

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