小编use*_*ser的帖子

当一个构造函数实现另一个构造函数时,是否有好处或缺点

如果我有这样的课程:

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)

c# constructor

18
推荐指数
2
解决办法
1956
查看次数

为什么默认情况下C++ bool var为true?

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++ static boolean default

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

如果(TRUE)在C中是个好主意吗?

在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的假设进行操作会很好,但我们真的无法保证他们会拥有它.

c if-statement

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

在Mac OS X Snow Leopard上执行磁盘I/O时,C程序坚持不间断等待

一行背景:我是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中找到实际的代码,但鉴于这是一个相当复杂的系统,在五分钟内理解这一点并非易事.

非常感谢您的帮助.

c io macos fwrite redis

16
推荐指数
1
解决办法
1673
查看次数

为什么云计算需要虚拟化?

任何人都可以解释为什么云计算需要虚拟化?IIS和Windows Server的单个实例可以托管多个Web应用程序.那么为什么我们需要在一台机器上运行多个OS实例呢?如何才能更有效地利用资源?虚拟化开销如何值得呢?这完全是经济问题 - 我有钱只买100台机器,所以我运行虚拟化假装我有1000台机器?

cloud virtualization

16
推荐指数
1
解决办法
5389
查看次数

C++析构函数行为

我在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)

c++ destructor

16
推荐指数
1
解决办法
398
查看次数

如何在C#中查找类的大小

public class A
{
  int x;
  float y;
}
Run Code Online (Sandbox Code Playgroud)

如何在C#中查找类的大小.有没有像Sizeof()这样的运算符,它曾经是C++

c# size class

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

Java Setter和Getter

始终建议使用getter/setter访问私有变量.为什么将它们声明为公共并访问它们并不是一个更好的主意.无论如何我们使用getter和setter访问它?

java getter-setter

15
推荐指数
5
解决办法
4542
查看次数

IEnumerable扩展

我想做一个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>

.net c# ienumerable extension-methods

15
推荐指数
3
解决办法
1455
查看次数

pthreads的好水平?

在嵌入式系统上(使用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)?我怎么可能改变已经运行的线程的好水平?

linux pthreads

14
推荐指数
1
解决办法
7586
查看次数