小编ath*_*hos的帖子

什么是间接扩张?$ {!var*}是什么意思?

我正在读" Bash初学者指南 ".它说:

如果第一个字符PARAMETER是感叹号,则Bash使用由其余部分形成的变量的值作为变量PARAMETER的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是其PARAMETER自身的值.这被称为间接扩张.

给出的例子是:

franky ~> echo ${!N*}
NNTPPORT NNTPSERVER NPX_PLUGIN_PATH
Run Code Online (Sandbox Code Playgroud)

我在这里不太明白:

从其余部分形成的变量的值 PARAMETER

由于PARAMETER是刚刚!N*的话

其余的 PARAMETER

只是N*.怎么会形成一个变量?Bash在那里搜索了所有可能的命令吗?

bash indirection

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

为什么std:set(用单个冒号)编译?

我不小心写了

std::set<string> keys;
Run Code Online (Sandbox Code Playgroud)

如:

std:set<string> keys;
Run Code Online (Sandbox Code Playgroud)

但奇怪的是,Visual Studio 2013仍然可以编译.

为什么会这样?

实际上keys不仅定义了,而且后来用作一组字符串,例如

if(keys.find(keystr)==keys.end()){
    keys.insert(keystr);
    toret.push_back(tempv);
}
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio

66
推荐指数
2
解决办法
3637
查看次数

C#语言:泛型,打开/关闭,绑定/未绑定,构造

我正在阅读Anders Hejlsberg等的第4版"C#编程语言"一书.

有几个定义有点扭曲:

未绑定的泛型类型:泛型类型声明本身表示未绑定的泛型类型...

构造类型:包含至少一个类型参数的类型称为构造类型.

open type:open类型是一种涉及类型参数的类型.

闭合类型:闭合类型是不是开放类型的类型.

unbound type:指非泛型类型或非绑定泛型类型.

bound类型:指非泛型类型或构造类型.[annotate] ERIC LIPPERT:是的,非泛型类型被认为是绑定和未绑定的.

问题1,是否低于我列出的正确值?

int                     //non-generic, closed, unbound & bound, 
class A<T, U, V>        //generic,     open,   unbound, 
class A<int, U, V>      //generic,     open,   bound, constructed 
class A<int, int, V>    //generic,     open,   bound, constructed
class A<int, int, int>  //generic,     closed, bound, constructed
Run Code Online (Sandbox Code Playgroud)

问题2,书中说"未绑定类型是指由类型声明声明的实体.未绑定泛型类型本身不是类型,它不能用作变量,参数或返回值的类型,或者一个基本类型.唯一可以引用未绑定泛型类型的构造是typeof表达式(第7.6.11节)." 很好,但下面是一个可以编译的小测试程序:

public class A<W, X> { }

// Q2.1: how come unbounded generic type A<W,X> can be used as a …
Run Code Online (Sandbox Code Playgroud)

c# generics

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

C#编译设置"/ debug:pdbonly"和"/ debug:full"之间有什么区别?

根据msdn http://msdn.microsoft.com/en-us/library/8cw0bt21.aspx,编译设置"/ debug:pdbonly"和"/ debug:full"将生成.pdb(程序数据库)文件.

但是,有什么区别?

该页面说:"/ debug:pdbonly和/ debug:full之间的一个区别在于/ debug:full编译器会发出一个DebuggableAttribute,它用于告诉JIT编译器调试信息是否可用.因此,您将得到一个如果使用/ debug:full,如果您的代码包含DebuggableAttribute设置为false,则会出现错误."

很好,所以这是代码和编译设置之间可能的冲突,如果代码将DebuggableAttribute设置为false并且编译设置为/ debug:full,则JIT将丢失.

但这是编译设置"/ debug:pdbonly"和"/ debug:full"之间的唯一区别吗?

如果将带有"/ debug:pdbonly"或"/ debug:full"编译的pdb文件传递给最终用户,是否会出现安全问题?

c# debugging compilation pdb

24
推荐指数
0
解决办法
3243
查看次数

C#语言:垃圾收集,SuppressFinalize

我正在阅读"C#语言",第4版,它讨论垃圾收集如下:

"BILL WAGNER:以下规则是C#与其他托管环境之间的重要区别.

在应用程序终止之前,会调用析构函数的所有尚未被垃圾回收的对象,除非已经抑制了这种清理(例如,通过调用库方法GC.SuppressFinalize)."

所以我在这里有几个问题:

  • Q1.为什么.net与其他托管环境不同(我想这是暗示Java?)?任何特定的设计问题?

  • Q2.GC.SuppressFinalize调用的对象会发生什么?我明白这意味着GC不会调用这些对象的终结器(析构函数),如果是这样,这些对象什么时候才会被破坏,以便分配的内存位返回堆?否则会有内存泄漏?

.net c# garbage-collection suppressfinalize

16
推荐指数
2
解决办法
3137
查看次数

静态类声明受保护的成员

我正在阅读"C#语言"这本书,并从Vladimir Reshetnikov那里得到了这个音符:

如果静态类声明受保护或受保护的内部成员,则会发生编译时错误(CS1057).

我可以知道为什么吗?有受保护成员的静态类有什么问题?静态类可以有私有成员所以我猜这个CS1057错误不是由于可访问性,但也许是因为编译问题?因为受保护的成员可以在子类中被覆盖......但我无法弄清楚为什么.

c# compiler-errors static-classes

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

垃圾收集如何收集自引用对象?

如果某个对象未被任何其他对象引用,则它将由.NET CLR垃圾收集器收集.

但是,如果objA引用objB,objB引用objCobjC引用返回objA,垃圾收集器如何确定它们(作为一个整体)可以收集?

.net c# clr garbage-collection

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

为什么"Foo f(Bar());" 可以是一个函数的声明,它接受类型Bar并返回类型Foo?

我遇到了这个C++问题:

问题:以下是定义或声明吗?

Foo f(Bar());
Run Code Online (Sandbox Code Playgroud)

答案:它可能是一个函数的声明,它接受类型Bar并返回类型Foo,或者它是f一个类型的定义Foo,它有一个类型为Bar的构造函数.问题是两者的语法是相同的,所以为了解决这个问题,C++标准规定编译器必须更喜欢函数声明,而不能对它进行区分.

- 我不明白为什么它可以是"一个函数的声明,它采用类型Bar并返回类型Foo"?如何在参数列表中出现括号"()"?

c++

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

c#:如何处理来自第三方库的终结者例外?

终结器总是被.net框架调用,因此序列可能失控; 即使构造函数失败,仍然可以触发析构函数.

当这样的终结者例外来自第三方库时,这可能带来麻烦:我找不到处理它们的方法!

例如,在下面的代码中,尽管A类的构造函数总是抛出异常而失败,但是A的终结符将由.net框架触发,同时~B()被调用为A具有B类型的属性.

class Program // my code
{
    static void Main(string[] args)
    {
        A objA;
        try
        {
            objA = new A();
        }
        catch (Exception)
        {
        }

        ; // when A() throws an exception, objA is null

        GC.Collect(); // however, this can force ~A() and ~B() to be called.

        Console.ReadLine();
    }
}

public class A  // 3rd-party code
{
    public B objB;

    public A()
    {
        objB = new B(); // this will lead ~B() to be called.
        throw new …
Run Code Online (Sandbox Code Playgroud)

c# exception finalizer

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

矢量矢量如何在内存中对齐?

我理解为运行时矢量矢量的设置大小 描述,可以将矢量矢量声明为

vector<vector<int> > ref;
Run Code Online (Sandbox Code Playgroud)

然后调整第一级的大小

ref.resize(i);
Run Code Online (Sandbox Code Playgroud)

和推动元素在第二级:

ref[i].push_back(23);
Run Code Online (Sandbox Code Playgroud)

但是矢量矢量如何在内存中对齐?

对于简单的矢量,它是一个容器并连续地对齐它的元素,就像一个array; 但是在矢量矢量的情况下,我看不到图片.

由于每个内向量(大小矢量中的矢量矢量大小可能会改变),并向量(的外矢量矢量矢量矢量的)汽车无对准内矢量?外向量是否为每个内向量研究了记忆空间?如果一个向量超调怎么办?

c++ memory-management vector

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