如果我有这样的课程:
public class Foo
{
public IEnumerable<Bar> Bars { get; set; }
public Foo()
{
Bars = new List<Bar>();
}
}
Run Code Online (Sandbox Code Playgroud)
在某个阶段,我重新考虑类并添加一个辅助构造函数,它实现第一个,如下所示:
public class Foo
{
public IEnumerable<Bar> Bars { get; set; }
// some more properties were added
public Foo()
{
Bars = new List<Bar>();
}
public Foo(string parameter): this()
{
.... some code here
}
}
Run Code Online (Sandbox Code Playgroud)
我也可以写它类似于:
public class Foo
{
public IEnumerable<Bar> Bars { get; set; }
// some more properties were added too
public Foo()
{ …Run Code Online (Sandbox Code Playgroud) bool"bar"默认为true,但它应该为false,它不能在构造函数中初始化.有没有办法将它初始化为假而不使其静态?
简化版代码:
foo.h中
class Foo{
public:
void Foo();
private:
bool bar;
}
Run Code Online (Sandbox Code Playgroud)
foo.c的
Foo::Foo()
{
if(bar)
{
doSomethink();
}
}
Run Code Online (Sandbox Code Playgroud) 在C编程语言中,我的理解是变量只能在代码块的开头定义,而变量将具有声明它的块的范围.考虑到这一点,我想知道它是否是被认为是人为地创建新范围的不良做法,如下例所示:
void foo()
{
... Do some stuff ...
if(TRUE)
{
char a;
int b;
... Do some more stuff ...
}
... Do even more stuff ...
}
Run Code Online (Sandbox Code Playgroud)
假设在宏定义中将TRUE设置为1,这段代码是否会被认为是"好代码",或者是否会使经验丰富的程序员在想到它时感到畏缩?
感谢您的输入!
编辑:为了回应一些答案,我正在使用的代码需要与一些非常古老的遗留系统一起工作.虽然按照C99的假设进行操作会很好,但我们真的无法保证他们会拥有它.
一行背景:我是Redis的开发者,一个NoSQL数据库.我正在实现的一个新功能是虚拟内存,因为Redis将所有数据都存储在内存中.由于VM Redis能够将很少使用的对象从内存传输到磁盘,因此有很多原因可以解释为什么这样做比让OS为我们进行交换工作要好得多(redis对象是由非连续分配的许多小对象构建的)地方,当Redis序列化到磁盘时,它们占用的空间比它们所在的内存页面少10倍,等等.
现在我有一个完全在Linux上运行的alpha实现,但在Mac OS X Snow Leopard上运行得不是很好.有时,当Redis尝试将页面从内存移动到磁盘时,redis进程会进入不间断等待状态几分钟.我无法调试这个,但这发生在调用fseeko()或fwrite().几分钟后,呼叫终于返回并且redis继续正常工作:没有崩溃.
传输的数据量非常小,类似于256字节.因此,它不应该是执行大量I/O的问题.
但是有一个关于交换文件的有趣细节,它是写操作的目标.这是一个大文件(26千兆字节)创建打开文件,fopen()然后使用放大ftruncate().最后文件是unlink()编辑,以便Redis继续引用它,但我们确信当Redis进程退出操作系统时,将真正释放交换文件.
好的,但我在这里有更多细节.顺便说一句,你甚至可以在Redis git中找到实际的代码,但鉴于这是一个相当复杂的系统,在五分钟内理解这一点并非易事.
非常感谢您的帮助.
任何人都可以解释为什么云计算需要虚拟化?IIS和Windows Server的单个实例可以托管多个Web应用程序.那么为什么我们需要在一台机器上运行多个OS实例呢?如何才能更有效地利用资源?虚拟化开销如何值得呢?这完全是经济问题 - 我有钱只买100台机器,所以我运行虚拟化假装我有1000台机器?
我在Visual Studio 2010上尝试了以下程序.
#include <iostream>
using namespace std;
class A {
public:
int p;
/*A(){
cout << "Constructor A" << endl;
}*/
~A(){
cout << "Destructor in A" << endl;
}
};
class D: public A
{
public:
/*D(){
cout << "Constructor D" << endl;
}*/
~D(){
cout << "Destructor in D" << endl;
}
};
int main()
{
D d = D();
cout << "Exiting main" << endl;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是 -
Destructor in D
Destructor in A
Exiting main …Run Code Online (Sandbox Code Playgroud) public class A
{
int x;
float y;
}
Run Code Online (Sandbox Code Playgroud)
如何在C#中查找类的大小.有没有像Sizeof()这样的运算符,它曾经是C++
始终建议使用getter/setter访问私有变量.为什么将它们声明为公共并访问它们并不是一个更好的主意.无论如何我们使用getter和setter访问它?
我想做一个IEnumerable<TSource>可以将自己转换为a 的扩展IEnumerable<SelectListItem>.到目前为止,我一直试图这样做:
public static
IEnumerable<SelectListItem> ToSelectItemList<TSource, TKey>(this
IEnumerable<TSource> enumerable, Func<TSource, TKey> text,
Func<TSource, TKey> value)
{
List<SelectListItem> selectList = new List<SelectListItem>();
foreach (TSource model in enumerable)
selectList.Add(new SelectListItem() { Text = ?, Value = ?});
return selectList;
}
Run Code Online (Sandbox Code Playgroud)
这是正确的做法吗?如果是这样,我如何从适当的值中绘制值Func<TSource, TKey>?
在嵌入式系统上(使用glibc 2.6.1的ARM处理器上的Linux内核2.6.28)我正在运行一个由多个线程组成的应用程序.我希望其中一个线程比其他线程获得更多的CPU时间.
设置优先级的一个选项似乎是使用pthread\ _setschedparamwith SCHED\ _RR(或SCHED\ _FIFO),但是这给线程提供了太多的CPU(除非它休眠,它会从正在使用的其他线程中消耗掉所有CPU SCHED_OTHER).
另一种选择是设置好线程的好处.然而,虽然这正是我正在寻找的(线程只是获得更多的CPU,但不能饿死其他线程),我无法让它正常工作.根据手册页"线程不共享一个共同的好的值",我解释为我可以在同一个进程中为不同的线程设置单独的nice值.
这是我的代码:
pid_t tid;
tid = syscall(SYS_gettid);
int ret = setpriority(PRIO_PROCESS, tid, priority);
Run Code Online (Sandbox Code Playgroud)
然而,似乎tid在所有线程中都是相同的.同时为线程设置单独的nice级别仍会在调用时返回所有线程中的最新set nice级别getpriority.从性能来看,这是一致的(即运行线程A和线程B具有相同的任务,然后将A设置为-19,将B设置为19,两者将大致完成相同的时间).
然而,当运行线程A,然后将其设置为-19然后运行B并将其设置为+19时,B将以全功率运行(在A之前完成).
因此,似乎一个线程将在运行时使用漂亮的级别设置,之后无法更改它.
我已经用疯狂的Google搜索了更多信息或任何形式的确认,但到目前为止我发现的所有内容都相当含糊.这里有没有关于如何在Linux上处理好线程级别的任何描述(2.6.28,glibc 2.6.1)?我怎么可能改变已经运行的线程的好水平?