std::vector将成员函数at()作为安全替代operator[],以便应用绑定检查并且不会创建悬空引用:
void foo(std::vector<int> const&x)
{
const auto&a=x[0]; // What if x.empty()? Undefined behavior!
const auto&a=x.at(0); // Throws exception if x.empty().
}
Run Code Online (Sandbox Code Playgroud)
但是,std::unique_ptr缺少相应的功能:
void foo(std::unique_ptr<int> const&x)
{
const auto&a=*x; // What if bool(x)==false? Undefined behavior!
}
Run Code Online (Sandbox Code Playgroud)
如果std::unique_ptr有这样一个安全的替代方案,那就好了,说成员ref()(和cref())永远不会返回一个悬空引用,而是抛出异常.可能的实施:
template<typename T>
typename add_lvalue_reference<T>::type
unique_ptr<T>::ref() const noexcept(false)
{
if(bool(*this)==false)
throw run_time_error("trying to de-refrence null unique_ptr");
return this->operator*();
}
Run Code Online (Sandbox Code Playgroud)
这个标准没有提供这种东西有什么好的理由吗?
我有一个VS项目,其中包含:
TextTransform在a template.tt上运行的预构建操作以生成generated.cs
generated.cs 列为要编译的文件之一(即在项目文件列表中)
当我构建项目时,执行预构建操作,generated.cs重新创建,但VS编译以前的版本generated.cs(我猜它在构建过程开始时加载到内存中).
如何使构建使用新版本generated.cs(即在预构建操作中生成的版本)?如何强制构建订单?
请注意,文本转换输入是动态的,因此无法在设计时完成.
如何在Visual Studio中创建masm项目?我记得在课堂上这样做了一段时间,但我已经忘记了,谷歌只是让我在线组装.
在C#中,控制台具有可用于更改控制台背景颜色和控制台前景(文本)颜色的属性.
Console.BackgroundColor // the background color
Console.ForegroundColor // the foreground/text color
Run Code Online (Sandbox Code Playgroud)
问题是背景颜色仅适用于写入文本的位置,而不适用于自由空间.
Console.BackgroundColor = ConsoleColor.White; // background color is white
Console.ForegroundColor = ConsoleColor.Blue; // text color is blue
Run Code Online (Sandbox Code Playgroud)
现在,使用上面的代码,它确实将文本变为蓝色,但它只将文本的背景变为白色,而不是整个控制台窗口的背景.
这是我的意思的一个例子:

如您所见,白色背景仅显示在文本后面,并不会更改整个控制台窗口的颜色.
如何更改整个控制台窗口的颜色?
我正在使用人力车(基于d3.js)来绘制堆积的条形图.问题是第一个栏通常比其他栏更高,破坏了视觉反馈.

使用对数标度(我猜)这里不是一个选项,因为那时条形图中堆栈之间的比例会被破坏.我想引入一个横向中断,如下图所示:

但是,我找不到Rickshaw或d3.js的任何开箱即用的功能来做这样的事情.有关如何制作一个的任何建议?
仔细阅读FFmpeg比特流过滤器文档后,我仍然不明白它们的真正含义.
该文件指出过滤器:
执行比特流级别修改而不执行解码
谁能进一步向我解释一下?用例会大大澄清事情.此外,有明显不同的过滤器.他们有什么不同?
我正在开发一个小应用程序,我想在一行中创建20个单选按钮.
我怎么能用jQuery做到这一点?
GNU如何决定发出哪些消息?我正在使用的Makefile导致在目标启动日期时发出"目标"消息无法执行任何操作.但我认为"目标"是最新的更合适.
我在Android上发送电子邮件发送应用程序.通过单击按钮启动应用程序时,仅显示"到"字段.
为什么不显示抄送,密送和主题字段?如何将这些字段添加到我的应用程序?以及如何在"收件人"字段中显示默认电子邮件地址?(现在默认情况下,"收件人"字段中没有任何内容.)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
clickBtn = (Button) findViewById(R.id.sendemail);
clickBtn.setText("Send email");
clickBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
String aEmailList[] = { "user@fakehost.com","user2@fakehost.com" };
String aEmailCCList[] = { "user3@fakehost.com","user4@fakehost.com"};
String aEmailBCCList[] = { "user5@fakehost.com" };
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, aEmailList);
emailIntent.putExtra(android.content.Intent.EXTRA_CC, aEmailCCList);
emailIntent.putExtra(android.content.Intent.EXTRA_BCC, aEmailBCCList);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "My subject");
emailIntent.setType("text/plain");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "My message body.");
startActivity(emailIntent);
//startActivity(Intent.createChooser(emailIntent, "Send mail..."));
finish();
}
});
Run Code Online (Sandbox Code Playgroud) 我正在学习Stanley B. Lippman的C++ Primer第4版.在第12.4.1节中,当作者讨论构造函数初始值设定项时,他给出了这个例子:
class ConstRef {
public:
ConstRef(int ii);
private:
int i;
const int ci;
int &ri;
};
// OK: explicitly initialize reference and const members.
ConstRef::ConstRef(int ii): i(ii), ci(i), ri(ii) { }
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能导致悬挂引用ri指向ii,这是暂时的.我对吗?