标签: slice

如何在对象切片时生成编译器警告/错误

我想知道是否可以让编译器为代码发出警告/错误,如下所示:

注意:

1.是的,这是糟糕的编程风格,我们应该避免这种情况 - 但我们正在处理遗留代码,并希望编译器可以帮助我们识别这些情况.)

2.我更喜欢编译器选项(VC++)来禁用或启用对象切片(如果有的话).

class Base{};
class Derived: public Base{};

void Func(Base)
{

}

//void Func(Derived)
//{
//
//}

//main
Func(Derived());
Run Code Online (Sandbox Code Playgroud)

在这里,如果我注释掉第二个函数,第一个函数将被调用 - 而编译器(VC++和Gcc)对此感觉很舒服.

它是C++标准吗?并且我可以问编译器(VC++)在遇到这样的代码时给我一个警告吗?

非常感谢!!!

编辑:

非常感谢你的帮助!

我找不到一个编译器选项来给出错误/警告 - 我甚至在MSDN论坛上发布了这个VC++编译器顾问没有回答.所以我担心gcc和vc ++都没有实现这个功能.

因此,添加构造函数将派生类作为参数将是目前最好的解决方案.

编辑

我已经向MS提交了一个feedbak,希望他们能尽快修复它:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=421579

-Baiyan

c++ compiler-construction truncate slice

17
推荐指数
3
解决办法
2737
查看次数

像F#中的List一样切片

使用数组,let foo = [|1;2;3;4|]我可以使用以下任何一种方法从数组中返回一个切片.

foo.[..2] 
foo.[1..2] 
foo.[2..]
Run Code Online (Sandbox Code Playgroud)

我如何为List做同样的事情let foo2 = [1;2;3;4]?当我尝试与我得到的数组相同的语法时error FS00039: The field, constructor or member 'GetSlice' is not defined.

获取List子节的首选方法是什么?为什么它们不是为了支持GetSlice而构建的?

f# list slice

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

如何在没有循环的情况下初始化散列中的值?

我试图想出一种初始化哈希的方法,而不必经历一个循环.我希望使用切片,但它似乎没有产生预期的结果.

请考虑以下代码:

#!/usr/bin/perl
use Data::Dumper;

my %hash = ();
$hash{currency_symbol} = 'BRL';
$hash{currency_name} = 'Real';
print Dumper(%hash);
Run Code Online (Sandbox Code Playgroud)

这确实按预期工作并产生以下输出:

$VAR1 = 'currency_symbol';
$VAR2 = 'BRL';
$VAR3 = 'currency_name';
$VAR4 = 'Real';
Run Code Online (Sandbox Code Playgroud)

当我尝试按如下方式使用切片时,它不起作用:

#!/usr/bin/perl
use Data::Dumper;

my %hash = ();
my @fields = ('currency_symbol', 'currency_name');
my @array = ('BRL','Real');
@hash{@array} = @fields x @array;
Run Code Online (Sandbox Code Playgroud)

输出是:

$VAR1 = 'currency_symbol';
$VAR2 = '22';
$VAR3 = 'currency_name';
$VAR4 = undef;
Run Code Online (Sandbox Code Playgroud)

显然有些不对劲.

所以我的问题是:给定两个数组(键和值)初始化哈希的最优雅方法是什么?

arrays perl hash slice

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

JavaScript中的slice()和substr()有什么区别?

我可以问一下string对象slice()substr()JavaScript 之间的区别是什么?

javascript substr slice

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

切片嵌套列表

我熟悉切片,我只是无法绕过这个,我尝试改变一些值来试图说明发生了什么,但这对我没有意义.

无论如何,这是一个例子:

l = [[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]  
print l[:,0:2]
Run Code Online (Sandbox Code Playgroud)

导致:

[[0, 0], [0, 1] [1, 0], [1, 1]]
Run Code Online (Sandbox Code Playgroud)

我试图将其翻译为"从索引0切换到0,2,递增2"这对我来说毫无意义.

python numpy slice

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

去排序一片符文?

我无法按字符排序字符串(检查两个字符串是否为字谜,我想对它们进行排序,并检查是否相等).

我可以得到这样[]rune的字符串表示s:

runes := make([]rune, len(s)) 
copy(runes, []rune(s))
Run Code Online (Sandbox Code Playgroud)

我可以像这样排序

someInts := []int{5, 2, 6, 3, 1, 4} // unsorted
sort.Ints(someInts)
Run Code Online (Sandbox Code Playgroud)

但这rune只是一个别名,int32所以我应该可以打电话

sort.Ints(runes) 
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

cannot use runes (type []rune) as type []int in function argument
Run Code Online (Sandbox Code Playgroud)

那么......我如何对int32,int64或int*进行排序?

编辑:我确实得到了我的符文排序,但男孩,这是丑陋的.

type RuneSlice []rune

func (p RuneSlice) Len() int           { return len(p) }
func (p RuneSlice) Less(i, j int) bool { return p[i] < p[j] }
func (p RuneSlice) Swap(i, j int)      { p[i], p[j] = …
Run Code Online (Sandbox Code Playgroud)

sorting string go slice rune

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

为什么使用数组而不是切片?

我一直在读Go,并且难以想到这个基本问题.

在Go中,很明显切片更灵活,当您需要一系列数据时,通常可以使用切片代替数组.

阅读大部分文档,他们似乎鼓励开发人员只使用切片而不是数组.我得到的印象就像创作者可以简单地设计数组来调整大小,并且没有整个切片部分.事实上,这样的设计会使语言更容易理解,甚至可能鼓励更多惯用的代码.

那么为什么创作者首先允许阵列呢?何时使用数组而不是切片?是否有过的情况下在片数组的使用将是引人注目的

当我查阅官方文档(http://golang.org/doc/effective_go.html#arrays)时,我发现的唯一有用的部分是:

在规划内存的详细布局时,数组很有用,有时可以帮助避免分配,但主要是它们是切片的构建块.

他们接着讨论了数组如何作为值的昂贵,以及如何用指针模拟C风格的行为.即便如此,他们还是明确地推荐了阵列部分:

但即便是这种风格也不是惯用的Go.改为使用切片.

那么,什么是"规划内存的详细布局"或"帮助避免分配"这些切片不适合的一些真实示例?

arrays go slice

17
推荐指数
3
解决办法
1556
查看次数

在Go中生成随机的固定长度字节数组

我有一个字节数组,固定长度为4.

token := make([]byte, 4)
Run Code Online (Sandbox Code Playgroud)

我需要将每个字节设置为一个随机字节.我怎么能这样做,在最有效的事情?math/rand就我而言,这些方法不提供随机字节功能.

也许有内置的方式,或者我应该生成随机字符串并将其转换为字节数组?

arrays random go slice

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

如何在Javascript中切片对象?

我试图使用Array.prototype切片对象,但是它返回一个空数组,除了传递参数之外是否有任何方法来切片对象,或者只是我的代码有错误?谢谢!!

var my_object = {
 0: 'zero',
 1: 'one',
 2: 'two',
 3: 'three',
 4: 'four'
};

var sliced = Array.prototype.slice.call(my_object, 4);
console.log(sliced);
Run Code Online (Sandbox Code Playgroud)

javascript arrays arguments object slice

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

Python pandas按多个索引范围切片数据帧

什么是通过更多索引范围(例如by 10:1225:28)对数据帧进行切片的pythonic方法?我希望以更优雅的方式:

df = pd.DataFrame({'a':range(10,100)})
df.iloc[[i for i in range(10,12)] + [i for i in range(25,28)]]
Run Code Online (Sandbox Code Playgroud)

结果:

     a
10  20
11  21
25  35
26  36
27  37
Run Code Online (Sandbox Code Playgroud)

像这样的东西会更优雅:

df.iloc[(10:12, 25:28)]
Run Code Online (Sandbox Code Playgroud)

谢谢!

python indexing slice pandas

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