小编The*_*ger的帖子

为什么引用在C++中不可重用

C++引用有两个属性:

  • 他们总是指向同一个对象.
  • 他们不能是0.

指针是相反的:

  • 他们可以指向不同的对象.
  • 他们可以是0.

为什么C++中没有"不可为空,可重复的引用或指针"?我想不出为什么参考不应该是可重复的一个很好的理由.

编辑: 问题经常出现,因为我通常使用引用,当我想确保"关联"(我在这里避免使用"引用"或"指针")永远无效.

我认为我从没想过"这个引用始终指的是同一个对象".如果引用是可重用的,那么仍然可以得到当前的行为:

int i = 3;
int& const j = i;
Run Code Online (Sandbox Code Playgroud)

这已经是合法的C++,但毫无意义.

我重申我的问题: "'引用的背后什么原因是对象'设计?为什么引用始终是同一个对象,而不是仅当声明为const时才被认为是有用的?"

干杯,菲利克斯

c++ pointers language-design reference

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

为什么我的控制台应用程序有命令历史?

我编写了一个控制台应用程序,它本质上是一个Console.ReadLine() - Loop.当应用程序等待输入时,按向上箭头键会迭代所有先前的输入行.我的应用程序不包含此功能的任何代码.Windows的哪个部分提供此功能?我该如何禁用它?

我只能想象它是控制台子系统的一个功能,或者是在Console.ReadLine()中实现的.

以下是一些展示所描述行为的示例代码:

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string input;
            do
            {
                input = System.Console.ReadLine();
            } while (input != "exit");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想暂时禁用历史记录功能,稍后使用我自己的代码重新实现它.目前的行为太有限了.

.net c# windows console console-application

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

你如何模拟输出流?

'输出蒸汽'是指任何接收字节序列或字符或其他内容的对象.所以,java.io.OutputStream,还有java.io.Writer,javax.xml.stream.XMLStreamWriter的writeCharacters方法等等.

我正在为一个类编写基于模拟的测试,该类的主要功能是将数据流写入其中一个(XMLStreamWriter,就像它一样).

问题是数据流是在对write方法的一系列调用中编写的,但重要的不是调用,而是数据.例如,给定XMLStreamWriter out,这些:

out.writeCharacters("Hello, ");
out.writeCharacters("world!");
Run Code Online (Sandbox Code Playgroud)

相当于:

out.writeCharacters("Hello, world!");
Run Code Online (Sandbox Code Playgroud)

这对我的目的来说无关紧要.将会有一些特定的调用序列,但我不在乎它是什么,因此我不想写出对该特定序列的期望.我只是希望能够以任何方式写入某个特定的数据流.

一种选择是切换到基于状态的测试.我可以在缓冲区中累积数据,并对其进行断言.但是因为我正在编写XML,这意味着要做一些相当复杂和丑陋的断言.模拟似乎是处理编写XML的更大问题的更好方法.

那么我如何用模拟做到这一点?

我正在使用Moxie进行模拟,但我很想知道任何模拟库的方法.

java outputstream mocking stream

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

WebClient在哪些线程上引发事件?

我找不到任何指定WebClient引发其事件的线程的文档.我运行了一些测试并确定了以下内容:

  • 如果从UI线程调用(例如从事件处理程序调用),则将在该线程上执行事件处理程序.作为测试,我在调用OpenReadAsync之后添加了一个无限循环.从未调用过事件处理程序.

  • 如果没有UI线程,就像在控制台应用程序中那样,事件处理程序将在线程池线程上执行.在这种情况下,如果我想在应用程序的其余部分提供一些结果,我将不得不注意线程问题.

这种行为记录在哪里吗?我一无所获.

我有关于C#的新异步功能的基本相同的问题 - 最终,必须执行异步代码.当没有UI线程时,这还会产生一个线程池线程吗?那反过来又需要线程安全代码吗?

我觉得我在这里遗漏了一些东西 - 我只能找到很少有关于此的信息,但这对我来说似乎很重要.

c# asynchronous webclient

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

UML类图中的接口聚合

通常会在接口之间放置聚合关联吗?

例:

示例图

在这里,我觉得一个聚合是多余的.接口之间的接口更重要,因为这是类的客户端将使用的.BMW和LuxuryWheel将始终通过ICar和IWheel使用.但是,ICar并没有真正聚合IWheel,因为它是一个接口并且不包含任何实际逻辑.宝马显然汇总了LuxuryWheel,但这几乎是一个实施细节.

你会如何模仿这个?UML中是否有一种方法可以将聚合(或关联)标记为抽象或待实现?

uml modeling aggregation

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

观察者模式中的正确通知程序

我想实现一个Model类的Observer,它不会改变Model.因此,它应该能够使用const-Reference来访问Model.但注册观察员禁止这样做.

以下是我的项目中如何实现观察者模式:



//Attributes of type Observable are used by classes that want to notify others
//of state changes. Observing Objects register themselves with AddObserver.
//The Observable Object calls NotifyObservers when necessary.
class Notifier
{
public:
    AddObserver(Observer*);
    RemoveObserver(Observer*);
    NotifyObservers();
};

class Model
{
public:
    Notifier& GetNotifier() //Is non const because it needs to return a non-const 
    {                       //reference to allow Observers to register themselves.

         return m_Notifier; 
    }

    int QueryState() const;

    void ChangeModel(int newState)
    {
        m_Notifier.NotifyObservers();
    }

private:
    Notifier m_Notifier;
};

//This …
Run Code Online (Sandbox Code Playgroud)

c++ const const-correctness observer-pattern

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