小编axe*_*axe的帖子

将C#日期时间转换为字符串并返回

我正在将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)

c# string datetime data-conversion

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

用于模板的限定和非限定名称查找的不同行为

这段代码应该如何表现?如果我在函数中使用限定名称,它会调用泛型函数忽略我的重载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

14
推荐指数
2
解决办法
1285
查看次数

C++ const成员函数正在修改成员变量

今天我发现那样的代码可行.这对我来说听起来很奇怪,因为据我所知,你无法修改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)

c++ const function member

12
推荐指数
2
解决办法
3219
查看次数

在django管理面板中重新排序模型对象

我在django管理面板中有几个配置对象.它们按以下顺序列出

  • 电子邮件配置
  • 一般配置
  • 网络配置

每个对象都可以单独配置,但所有对象都包含在内General config.所以基本上你基本上需要General config,所以我想把它移到顶部.我知道如何在模型中订购字段,但如何重新排序模型?

python django django-models django-admin

12
推荐指数
3
解决办法
3117
查看次数

在不牺牲索引使用的情况下,在SQLite LIKE中转义通配符(%,_)?

我对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)

.net c# sqlite indexing performance

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

Qt析构函数调用已关闭的小部件

有应用程序来处理文本命令.我有一个用一些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)

c++ qt destructor memory-management

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

LINQ查询很慢

在应用程序分析期间,我发现模式匹配的函数检查非常慢.它是使用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)

.net c# linq performance

8
推荐指数
3
解决办法
4104
查看次数

C++隐式转换构造函数调用

为什么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版本上也是一样的(在线)

http://ideone.com/ustDRj

c++ gcc constructor copy-constructor implicit-conversion

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

显式非单参数构造函数

任何人都可以解释为什么非单参数构造函数标记为显式编译?据我所知,这里绝对是无用的关键字,为什么这个编译没有错误?

class X
{
public:
    explicit X(int a, int b) { /* ... */}
};
Run Code Online (Sandbox Code Playgroud)

c++ constructor explicit-constructor

7
推荐指数
2
解决办法
1171
查看次数

该应用程序调用了一个为不同线程编组的接口

我正在使用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)

.net c# com wmi

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