C++引用有两个属性:
指针是相反的:
为什么C++中没有"不可为空,可重复的引用或指针"?我想不出为什么参考不应该是可重复的一个很好的理由.
编辑: 问题经常出现,因为我通常使用引用,当我想确保"关联"(我在这里避免使用"引用"或"指针")永远无效.
我认为我从没想过"这个引用始终指的是同一个对象".如果引用是可重用的,那么仍然可以得到当前的行为:
int i = 3;
int& const j = i;Run Code Online (Sandbox Code Playgroud)
这已经是合法的C++,但毫无意义.
我重申我的问题: "'引用的背后是什么原因是对象'设计?为什么引用始终是同一个对象,而不是仅当声明为const时才被认为是有用的?"
干杯,菲利克斯
我编写了一个控制台应用程序,它本质上是一个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)
我想暂时禁用历史记录功能,稍后使用我自己的代码重新实现它.目前的行为太有限了.
'输出蒸汽'是指任何接收字节序列或字符或其他内容的对象.所以,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进行模拟,但我很想知道任何模拟库的方法.
我找不到任何指定WebClient引发其事件的线程的文档.我运行了一些测试并确定了以下内容:
如果从UI线程调用(例如从事件处理程序调用),则将在该线程上执行事件处理程序.作为测试,我在调用OpenReadAsync之后添加了一个无限循环.从未调用过事件处理程序.
如果没有UI线程,就像在控制台应用程序中那样,事件处理程序将在线程池线程上执行.在这种情况下,如果我想在应用程序的其余部分提供一些结果,我将不得不注意线程问题.
这种行为记录在哪里吗?我一无所获.
我有关于C#的新异步功能的基本相同的问题 - 最终,必须执行异步代码.当没有UI线程时,这还会产生一个线程池线程吗?那反过来又需要线程安全代码吗?
我觉得我在这里遗漏了一些东西 - 我只能找到很少有关于此的信息,但这对我来说似乎很重要.
通常会在接口之间放置聚合关联吗?
例:

在这里,我觉得一个聚合是多余的.接口之间的接口更重要,因为这是类的客户端将使用的.BMW和LuxuryWheel将始终通过ICar和IWheel使用.但是,ICar并没有真正聚合IWheel,因为它是一个接口并且不包含任何实际逻辑.宝马显然汇总了LuxuryWheel,但这几乎是一个实施细节.
你会如何模仿这个?UML中是否有一种方法可以将聚合(或关联)标记为抽象或待实现?
我想实现一个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)