我正在读" Bash初学者指南 ".它说:
如果第一个字符
PARAMETER是感叹号,则Bash使用由其余部分形成的变量的值作为变量PARAMETER的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是其PARAMETER自身的值.这被称为间接扩张.
给出的例子是:
Run Code Online (Sandbox Code Playgroud)franky ~> echo ${!N*} NNTPPORT NNTPSERVER NPX_PLUGIN_PATH
我在这里不太明白:
从其余部分形成的变量的值
PARAMETER
由于PARAMETER是刚刚!N*的话
其余的
PARAMETER
只是N*.怎么会形成一个变量?Bash在那里搜索了所有可能的命令吗?
我不小心写了
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) 我正在阅读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) 根据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#语言",第4版,它讨论垃圾收集如下:
"BILL WAGNER:以下规则是C#与其他托管环境之间的重要区别.
在应用程序终止之前,会调用析构函数的所有尚未被垃圾回收的对象,除非已经抑制了这种清理(例如,通过调用库方法GC.SuppressFinalize)."
所以我在这里有几个问题:
Q1.为什么.net与其他托管环境不同(我想这是暗示Java?)?任何特定的设计问题?
Q2.GC.SuppressFinalize调用的对象会发生什么?我明白这意味着GC不会调用这些对象的终结器(析构函数),如果是这样,这些对象什么时候才会被破坏,以便分配的内存位返回堆?否则会有内存泄漏?
如果某个对象未被任何其他对象引用,则它将由.NET CLR垃圾收集器收集.
但是,如果objA引用objB,objB引用objC和objC引用返回objA,垃圾收集器如何确定它们(作为一个整体)可以收集?
我遇到了这个C++问题:
问题:以下是定义或声明吗?
Foo f(Bar());
Run Code Online (Sandbox Code Playgroud)
答案:它可能是一个函数的声明,它接受类型Bar并返回类型Foo,或者它是f一个类型的定义Foo,它有一个类型为Bar的构造函数.问题是两者的语法是相同的,所以为了解决这个问题,C++标准规定编译器必须更喜欢函数声明,而不能对它进行区分.
- 我不明白为什么它可以是"一个函数的声明,它采用类型Bar并返回类型Foo"?如何在参数列表中出现括号"()"?
终结器总是被.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) 我理解为运行时矢量矢量的设置大小 描述,可以将矢量矢量声明为
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; 但是在矢量矢量的情况下,我看不到图片.
由于每个内向量(大小矢量中的矢量矢量大小可能会改变),并向量(的外矢量矢量在矢量矢量的)汽车无对准内矢量?外向量是否为每个内向量研究了记忆空间?如果一个向量超调怎么办?