小编Ste*_* Lu的帖子

试图在没有智能指针的情况下使用STL - 试图避免临时对象创建

我特别喜欢以简单方式使用STL容器的简单性.

我从来没有真正弄清楚如何让Boost库在我的开发平台上运行,事实上我认为我甚至都没有尝试过.我猜你可以说我只是试图推迟不可避免的事情,因为Boost显然是一个我应该使用的有用的库.

但我的问题与本主题基本相同:如何使用类初始化STL向量/列表而不调用复制构造函数

我有std::list<ExpensiveClass> mylist;,我只想要一个函数将一个新实例推入列表并调用默认构造函数,而不是从它的临时堆栈实例中复制它.在另一个主题中提到了移动构造函数.我看了他们,坦率地说,除了恐惧之外什么都没有.两个&符号!

如果我只创建一个ExpensiveClass对象数组,它会工作吗?ExpensiveClass *mylist = new ExpensiveClass[20];这会调用构造函数20次吗?

在我看来我应该使用boost:ptr_list.

c++ boost stl

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

在Perl中检索特定的返回值

我正在寻找一个单行程,让我从子程序中获取第二个返回值.

而不是这个:

($a,$b)=function;
print $b
Run Code Online (Sandbox Code Playgroud)

应该可以做这样的事情

print ??? function
Run Code Online (Sandbox Code Playgroud)

perl

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

Hexdump宏(C/C++)

我有一个有效的hexdump函数,但打印单个变量似乎有点过分.所以我想为它制作一个宏.到目前为止,这几乎完美:

#define PRINT_FMT2(val,des,fmt) printf(#des" = "fmt": "SRC_STRN,val)
// SRC_STRN is a macro that evals to string literal containing file and line# 

#include <stdint.h>
#define PRINT_HEX(x) PRINT_FMT2((*((uint32_t*)(&(x)))),x,"%x") 
// the lack of parens around 2nd arg to PRINT_FMT2 is okay cause it gets #'d
Run Code Online (Sandbox Code Playgroud)

唯一的问题是我不能将它与函数的返回值一起使用.我收到了错误lvalue required as unary '&' operand.我认为这意味着我不能使用这种方法将ptr转换为uint-ptr.还有另一种有效的方法吗?

编辑:我想提一提的是,大多数人掩盖的是,我想看看我的价值位保留,并转换为unsigned int类型十六进制格式.请注意,您可以使用具有l值的宏,float并且它会吐出正确的big-endian表示.大多数常规的十六进制转储例程会在写入内存时打印出这些位,这显然取决于字节顺序.我不清楚我的意思是不好的.

无论如何,我最终编写了一组可以与r值一起使用的重载函数.最后我只想在32位浮点数上使用它.

inline uint32_t tohex(float f) { 
  uint32_t* u = (uint32_t *)&f; return *u; 
}
Run Code Online (Sandbox Code Playgroud)

c c++ macros hexdump

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

Perl数组拼接语法

为什么第三次打印失败?

my @a = (0,1,2,3); 
print @a[-@a..-2];  # works
print @a[0..2];     # works
print @a[0..-2];    # prints nothing 
Run Code Online (Sandbox Code Playgroud)

我不清楚-@a在本@a[-@a..-2]声明中使用的含义.这是一种特殊的语法吗?除了$#a例如,这种特殊语法提供了什么(如果有的话)?它是某种糖(由于它只有一个字符而变得很奇怪),其中子索引中使用的数组符号意味着"该数组的长度"?

arrays perl

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

什么版本的Perl支持$#$ sigil?

我发现这是你使用带有arrayref的范围的方法:

@$aref[2..$#$aref]
Run Code Online (Sandbox Code Playgroud)

所以,情况是我无法访问所有这些不同的perl环境(以测试它),但如果最终将在所有这些环境上编译的代码无法编译,我就会陷入困境.

Perl的版本:5.16.2,5.10.1,和5.8.8

有人知道吗?

在没有聪明的情况下,谷歌的perl语法复杂性在物理上是不可能的.我不够聪明,为此做到这一点.

PS你知道吗?@$arr_ref[-3..$#$arr_ref]给出最后三个元素,然后将整个数组附加到它上面.这显然是什么[-3..5]意思:给元素-3(= 3) 5,然后追加05.

这是因为perl没有以合理的方式处理它,除非两个范围索引都是相同的符号:要获得包含从最后到结尾的第5个的切片,你只需使用@arr[-5..-1].

perl range

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

Vim的 - 化妆点击退出插入模式

没有什么我恨超过幻影触摸板点击次数造成获得进入地方随机我的文字.现在我宁可具备打字被解释为随机Vim的命令.无论如何,我必须使离开插入模式非常明显的视觉配置,让应是一个非问题.

我该怎么做?我不认为有一种方法来映射在Vim中或拦截鼠标事件.我希望也许有一些那种的点击触发的自动命令?

我只是在谈论命令行Vim的在这里.不是的MacVim或一些这样的.

vim

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

模板模板参数简单示例

首先,我正在学习模板模板参数,我开始想知道我是否有一个vector<vector<int>>,如果我可以制作一个int从那里提取出类型的模板.

但是,在尝试构建示例的过程中,我甚至无法获得单级模板参数模板功能!

#include <iostream>
#include <vector>

template< 
    template<class> class C2,
    class I
>
void for_2d(const C2<I>& container) 
{
    for( auto j : container ){
        std::cout << j;
    }
}

int main() {
    std::vector<int> cont;
    for_2d(cont);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会产生:

17 : <source>:17:5: error: no matching function for call to 'for_2d'
    for_2d(cont);
    ^~~~~~
8 : <source>:8:6: note: candidate template ignored: substitution failure : template template argument has different template parameters than its corresponding template template parameter
void …
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits template-templates c++11

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

使用Perl替换字符串而不分配变量

我知道Perl中的字符串不是不可变的,所以自然的字符串替换方法是$var =~ s/re/$with/g.

然而,对于我来说,这是一个非常有限的程序员

JS:

string.replace(/re/g, with)
Run Code Online (Sandbox Code Playgroud)

击:

${var//re/$with}
Run Code Online (Sandbox Code Playgroud)

我看到的唯一解决方法是声明一个执行此任务的子例程,并且可以直接实现此任务,但需要在我的代码中的任何地方复制或导入它.这是唯一的方法吗?

perl

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

标签 统计

perl ×4

c++ ×3

arrays ×1

boost ×1

c ×1

c++11 ×1

hexdump ×1

macros ×1

range ×1

stl ×1

template-templates ×1

templates ×1

type-traits ×1

vim ×1