小编Mik*_*ike的帖子

C#现有对象上的'new'关键字

我想知道一旦对象被重新分配,对象(在C#中)会发生什么.例:

Car c = new Car("Red Car");
c = new Car("Blue Car");
Run Code Online (Sandbox Code Playgroud)

由于引用被重用,垃圾收集器在失去引用之后是否处理/处理'Red Car'?或者是否需要采用单独的方法来处理"红色汽车"?

我主要想知道因为我将要回收一个相对较大的对象,并且需要知道在重新创建时是否还有任何应该完成的事情.

c# garbage-collection object new-operator

34
推荐指数
5
解决办法
5197
查看次数

将字节数组(char数组)转换为整数类型(short,int,long)

我想知道在将字节数组转换为short/int/long时系统字节顺序是否重要.如果代码在big-endian和little-endian机器上运行,这会不正确吗?

short s = (b[0] << 8) | (b[1]);
int i = (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | (b[3])
Run Code Online (Sandbox Code Playgroud)

c++

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

执行后更新值(类似于var ++)

我想知道是否有可能在线路出现后更新值,类似于:

int age = 10;
Console.WriteLine(age++);
Run Code Online (Sandbox Code Playgroud)

输出10,但age在之后变为11.

我的目标是拥有以下内容:

int offset = 1;
Console.WriteLine(offset += 4);
Run Code Online (Sandbox Code Playgroud)

但有上述行为.

编辑:我知道你总是可以用两行来完成它,但我想知道/希望你能在一行中做到这一点.

c#

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

使用模板boost :: signal slot_type

构建以下函数时出现构建错误:

template <class T> class Event {
public:
    typedef boost::signal<void (void*, const T)>    signal_t;
    typedef boost::signals::connection              connection_t;   

public:
    Event() { }

    connection_t connect(signal_t::slot_type subscriber){
        return signal.connect(subscriber);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

error: 'class boost::signal<void ()(void*, T), boost::last_value<typename boost::function_traits<void ()(void*, T)>::result_type>, int, std::less<int>, boost::function<void ()(void*, T)> >::slot_type' is not a type
Run Code Online (Sandbox Code Playgroud)

我认为这与它的模板化事实有关,但我不确定如何解决它.我试过添加,这样

connection_t connect(signal_t::slot_type<T> subscriber)
Run Code Online (Sandbox Code Playgroud)

但这只是产生了另一个错误.

c++ boost boost-signals

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

在#define宏中嵌入if语句

我正在阅读一篇文章,其中#define宏是这样制作的:

#define TEST(level) if (level > 2) ; else std::cout
Run Code Online (Sandbox Code Playgroud)

然后可以在代码中使用,如下所示:

Test(1) << 3;
Test(3) << 4;
Run Code Online (Sandbox Code Playgroud)

我的印象是,如果你写的

TEST(1)
Run Code Online (Sandbox Code Playgroud)

它将取代它:

std::cout
Run Code Online (Sandbox Code Playgroud)

TEST(3)
Run Code Online (Sandbox Code Playgroud)

将被替换为空字符串(在代码文件中).但是,如果它以这种方式工作,那么它应该抛出一个错误,因为

<< 3;
Run Code Online (Sandbox Code Playgroud)

是无效的.

这个宏实际上如何工作?以及预处理器如何变化

TEST(3) << 3;
Run Code Online (Sandbox Code Playgroud)

所以它不输出任何东西(也就是代码不运行)

c++ c-preprocessor

0
推荐指数
1
解决办法
1547
查看次数