我正在将C#日期时间转换为字符串.后来当我将它转换回DateTime对象时,看起来它们并不相同.
const string FMT = "yyyy-MM-dd HH:mm:ss.fff";
DateTime now1 = DateTime.Now;
string strDate = now1.ToString(FMT);
DateTime now2 = DateTime.ParseExact(strDate, FMT, CultureInfo.InvariantCulture);
Console.WriteLine(now1.ToBinary());
Console.WriteLine(now2.ToBinary());
Run Code Online (Sandbox Code Playgroud)
这是一个例子.看起来一切都包含在字符串格式中,当我打印日期时两者显示相同,但是当我比较对象或打印日期的二进制格式时,我看到了差异.这对我来说很奇怪,你能解释一下这里发生了什么吗?
这是上面代码的输出.
-8588633131198276118
634739049656490000
Run Code Online (Sandbox Code Playgroud) 这段代码应该如何表现?如果我在函数中使用限定名称,它会调用泛型函数忽略我的重载call_read()
; 如果我使用非限定名称,它首先调用重载然后调用泛型版本.有什么不同?这是海湾合作委员会的一个错误吗?
#include <iostream>
struct info1 {};
struct info2 {};
template<class T> void read(T& x)
{
std::cout << "generic" << std::endl;
}
template<class T> void call_read(T& x)
{
::read(x); // if I replace ::read(x) with read(x) the overload is called
}
void read(info1& x)
{
std::cout << "overload" << std::endl;
}
int main()
{
info1 x;
info2 y;
call_read(x);
call_read(y);
}
Run Code Online (Sandbox Code Playgroud)
我也注意到它对基本类型有所不同.请参阅下面的代码
#include <iostream>
typedef struct info1 {};
typedef struct info2 {};
typedef int …
Run Code Online (Sandbox Code Playgroud) c++ lookup templates language-lawyer argument-dependent-lookup
今天我发现那样的代码可行.这对我来说听起来很奇怪,因为据我所知,你无法修改const成员函数中的任何成员.你实际上不能直接做,但你可以调用非const成员函数.如果将成员函数标记为const表示传递给函数的指针指向const对象,那么如何在示例下调用非const成员函数?
#include <iostream>
class X
{
public:
void foo() const
{
ptr->bar();
}
void bar() {}
private:
X * ptr;
};
int main()
{
}
Run Code Online (Sandbox Code Playgroud) 我在django
管理面板中有几个配置对象.它们按以下顺序列出
每个对象都可以单独配置,但所有对象都包含在内General config
.所以基本上你基本上需要General config
,所以我想把它移到顶部.我知道如何在模型中订购字段,但如何重新排序模型?
我对SQLite查询有几个问题.实际上我开始认为SQLite不是为超过10行的表设计的,实际上,SQLite是一场噩梦.
以下查询
SELECT * FROM [Table] WHERE [Name] LIKE 'Text%'
Run Code Online (Sandbox Code Playgroud)
它工作正常.EXPLAIN
显示使用索引并在about之后返回结果70ms
.
现在我需要从.NET SQLite驱动程序运行此查询,所以我正在更改查询
SELECT * FROM [Table] WHERE [Name] LIKE @Pattern || '%'
Run Code Online (Sandbox Code Playgroud)
索引未使用.当我在任何SQLite工具中运行以下查询时,也不使用索引
SELECT * FROM [Table] WHERE [Name] LIKE 'Text' || '%'
Run Code Online (Sandbox Code Playgroud)
所以我猜SQLite没有实现任何类型的预处理逻辑.
好.让我们尝试解决它,我仍然绑定变量并执行以下操作
SELECT * FROM [Table] WHERE [Name] LIKE @Pattern
Run Code Online (Sandbox Code Playgroud)
但现在我将%
通配符添加到我的模式字符串的末尾,就像这样
command.Parameters.Add(new SQLiteParameter("@Pattern", pattern + '%'));
Run Code Online (Sandbox Code Playgroud)
它工作得很慢.我不能说为什么,因为当我从SQLite工具运行此查询时它工作正常,但是当我从.NET代码绑定此变量时,它工作缓慢.
好.我还在努力解决这个问题.我正在摆脱模式参数绑定并动态构建此条件.
pattern = pattern.Replace("'", "''");
pattern = pattern.Replace("%", "\\%");
where = string.Format("LIKE '{0}%' ESCAPE '\\'", pattern);
Run Code Online (Sandbox Code Playgroud)
索引不再使用.它没有被使用,因为ESCAPE
.当我跑步时,我看到了
EXPLAIN QUERY PLAN SELECT …
Run Code Online (Sandbox Code Playgroud) 有应用程序来处理文本命令.我有一个用一些close *
命令关闭的Qt小部件.Qt::WA_DeleteOnClose
为该窗口小部件设置了属性,它接收closeEvent,但稍后会调用该对象的析构函数(我猜在空闲时).如果我有两个命令
close *; get something;
,程序崩溃,因为get something
在该小部件的析构函数之前调用,因此它尝试访问由close *
命令删除的数据.我如何强迫Qt调用析构函数?QCoreApplication::processEvents()
关闭命令后没有帮助.将qt版本从4.3.3更改为4.7.2后,我遇到了这个问题.这里没有多线程.
提前致谢.
添加
这是代码示例.
test *t = new test();
t->show();
std::cout << "before deleteLater()" << std::endl;
t->deleteLater();
std::cout << "after deleteLater()" << std::endl;
QCoreApplication::sendPostedEvents();
QCoreApplication::processEvents();
std::cout << "after processEvents()" << std::endl;
Run Code Online (Sandbox Code Playgroud)
测试类派生自QDialog.它test()
在构造函数和~test()
析构函数中打印.此代码提供以下输出
test()
before deleteLater()
after deleteLater()
after processEvents()
~test()
Run Code Online (Sandbox Code Playgroud)
根据Qt文档,它应该在最后一个cout之前删除该对象,我是对的吗?看起来像Qt中的一个错误,有人知道吗?任何解决方法?
我在Qt邮件列表中问了这个问题,但仍在等待答案.
谢谢.
还有一次更新
这段代码
Dialog::~Dialog() {
std::cout << "~test()" << std::endl;
}
int main(int argc, char* argv[]) …
Run Code Online (Sandbox Code Playgroud) 在应用程序分析期间,我发现模式匹配的函数检查非常慢.它是使用LINQ编写的.用循环简单替换这个LINQ表达式会产生巨大的差异.它是什么?LINQ真的是一件坏事而且工作得太慢或我误解了什么?
private static bool PatternMatch1(byte[] buffer, int position, string pattern)
{
int i = 0;
foreach (char c in pattern)
{
if (buffer[position + i++] != c)
{
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
带有LINQ的版本2(由Resharper建议)
private static bool PatternMatch2(byte[] buffer, int position, string pattern)
{
int i = 0;
return pattern.All(c => buffer[position + i++] == c);
}
Run Code Online (Sandbox Code Playgroud)
LINQ版本3
private static bool PatternMatch3(byte[] buffer, int position, string pattern)
{
return !pattern.Where((t, i) => buffer[position + i] != t).Any();
} …
Run Code Online (Sandbox Code Playgroud) 为什么gcc需要复制构造函数来进行隐式转换构造函数调用?
class X
{
public:
X(int q) {}
~X()
{
std::cout << "~X()" << std::endl;
}
X(const X&) = delete;
};
X x = 1; // gives error: use of deleted function ‘X::X(const X&)’
Run Code Online (Sandbox Code Playgroud)
更有趣的是,如果我甚至写复制构造函数,它就不会被调用.析构函数只调用一次,因此以下代码
class X
{
public:
X(int q) {}
~X()
{
std::cout << "~X()" << std::endl;
}
X(const X&)
{
std::cout << "copy ctor" << std::endl;
}
};
int main()
{
X x = 1;
}
Run Code Online (Sandbox Code Playgroud)
版画 ~X()
是bug吗?有没有解决方法?
我的locaL PC上的gcc版本是4.6.3,这在另一个gcc版本上也是一样的(在线)
任何人都可以解释为什么非单参数构造函数标记为显式编译?据我所知,这里绝对是无用的关键字,为什么这个编译没有错误?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
Run Code Online (Sandbox Code Playgroud) 我正在使用WMI查询设备.我需要在插入或删除新设备时更新UI(为了使设备列表保持最新).
private void LoadDevices()
{
using (ManagementClass devices = new ManagementClass("Win32_Diskdrive"))
{
foreach (ManagementObject mgmtObject in devices.GetInstances())
{
foreach (ManagementObject partitionObject in mgmtObject.GetRelated("Win32_DiskPartition"))
{
foreach (ManagementBaseObject diskObject in partitionObject.GetRelated("Win32_LogicalDisk"))
{
trvDevices.Nodes.Add( ... );
}
}
}
}
}
protected override void WndProc(ref Message m)
{
const int WM_DEVICECHANGE = 0x0219;
const int DBT_DEVICEARRIVAL = 0x8000;
const int DBT_DEVICEREMOVECOMPLETE = 0x8004;
switch (m.Msg)
{
// Handle device change events sent to the window
case WM_DEVICECHANGE:
// Check whether this is device …
Run Code Online (Sandbox Code Playgroud)