小编Tho*_*ini的帖子

在声明之后是否有一些忍者技巧使变量保持不变?

我知道答案是99.99%没有,但我认为值得一试,你永远不会知道.

void SomeFunction(int a)
{
    // Here some processing happens on a, for example:
    a *= 50;
    a %= 10;
    if(example())
       a = 0;
    // From this point on I want to make "a" const; I don't want to allow
    // any code past this comment to modify it in any way.
}
Run Code Online (Sandbox Code Playgroud)

我可以做一些类似的东西const int b = a;,但它并不是真的相同,它会造成很多混乱.只接受C++ 0x解决方案.

编辑:另一个不那么抽象的例子,那个让我问这个问题的例子:

void OpenFile(string path)
{
    boost::to_lower(path);
    // I want path to be constant now
    ifstream ...
}
Run Code Online (Sandbox Code Playgroud)

编辑 …

c++ const-correctness c++11

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

在C++中递归到main()是否合法?

我读到C++标准禁止递归main(),但是g ++编译以下代码而没有抱怨:

int main()
{
    main();
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以澄清这个吗?

c++ recursion standards program-entry-point

45
推荐指数
4
解决办法
3542
查看次数

美元($)登录密码字符串作为变量处理

花了一些时间来解决PHP/MySQL Web应用程序连接到数据库时遇到问题的问题.可以从shell和phpMyAdmin访问数据库,使用完全相同的凭据,这是没有意义的.

原来密码有一个$符号:

$_DB["password"] = "mypas$word";
Run Code Online (Sandbox Code Playgroud)

发送的密码是"mypas",这显然是错误的.

处理这个问题的最佳方法是什么?我用一个\逃过了$

$_DB["password"] = "mypas\$word";
Run Code Online (Sandbox Code Playgroud)

它起作用了.

我通常使用$string = 'test'字符串,这可能是我之前避免遇到的问题.

这是正确的行为吗?如果这个密码存储在数据库中并且PHP将其删除 - 会出现同样的问题吗?我在这里想念的是什么......

php string variables escaping

43
推荐指数
3
解决办法
5万
查看次数

编译器错误C3493:无法隐式捕获'func',因为未指定默认捕获模式

你能帮我解决这个编译错误吗?

template<class T>
static void ComputeGenericDropCount(function<void(Npc *, int)> func)
{
    T::ForEach([](T *what) {
        Npc *npc = Npc::Find(what->sourceId);

        if(npc)
            func(npc, what->itemCount); // <<<<<<< ERROR HERE
            // Error    1   error C3493: 'func' cannot be implicitly captured because no default capture mode has been specified

    });
}

static void PreComputeNStar()
{
     // ...
    ComputeGenericDropCount<DropSkinningNpcCount>([](Npc *npc, int i) { npc->nSkinned += i; });
    ComputeGenericDropCount<DropHerbGatheringNpcCount>([](Npc *npc, int i) { npc->nGathered += i; });
    ComputeGenericDropCount<DropMiningNpcCount>([](Npc *npc, int i) { npc->nMined += i; });
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么它给我错误,我不知道如何解决它.ComputeGenericDropCount(auto …

c++ compiler-errors visual-studio-2010 visual-studio c++11

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

如何使用boost :: crc?

我想使用boost :: crc,以便它的工作方式与PHP的crc32()函数完全相同.我尝试阅读可怕的文档和许多令人头疼的事情后来我没有取得任何进展.

显然我必须做以下事情:

int GetCrc32(const string& my_string) {
    return crc_32 = boost::crc<bits, TruncPoly, InitRem, FinalXor,
                   ReflectIn, ReflectRem>(my_string.c_str(), my_string.length());
}
Run Code Online (Sandbox Code Playgroud)

bits应该是32 ..其他事情是一个谜.一点帮助?;)

c++ boost crc

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

对象构造函数可以返回null吗?

我们接管了一些.NET 1.1 Windows服务代码,它生成线程以从队列中读取消息(SeeBeyond eGate JMS队列,但这并不重要),然后生成线程来处理目标应用程序服务中的消息.我们不断遇到令我们困惑的逻辑和设计决策.这是一个示例,其中已从队列中检索消息(lsMessage)并准备好进行处理

if(lsMessage != null)
{
    // Initialize a new thread class instance, pass in message
    WorkerThread worker = new WorkerThread(lsMessage);

Process:
    // Start a new thread to process the message
    Thread targetWorker = new Thread(new ThreadStart(worker.ProcessMessage));
    if(targetWorker != null)
    {
        targetWorker.Priority = ThreadPriority.Highest;
        targetWorker.Name = "Worker " + queueKey.ToString();
        targetWorker.Start();

        // wait for worker thread to join back in specified period
        bool isFinished = targetWorker.Join(SYNC_THREAD_TIMEOUT);

        string message = worker.replyMsg;

        if ( !isFinished )  // BF is …
Run Code Online (Sandbox Code Playgroud)

.net multithreading

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

虚拟方法或功能指针

在C++中实现多态行为时,可以使用纯虚方法,也可以使用函数指针(或函子).例如,异步回调可以通过以下方式实现:

方法1

class Callback
{
public:
    Callback();
    ~Callback();
    void go();
protected:
    virtual void doGo() = 0;  
};

//Constructor and Destructor

void Callback::go()
{
   doGo();
}
Run Code Online (Sandbox Code Playgroud)

因此,要在此处使用回调,您需要覆盖doGo()方法以调用您想要的任何函数

方法2

typedef void (CallbackFunction*)(void*)

class Callback
{
public:
    Callback(CallbackFunction* func, void* param);
    ~Callback();
    void go();
private:
   CallbackFunction* iFunc;
   void* iParam;
};

Callback::Callback(CallbackFunction* func, void* param) :
    iFunc(func),
    iParam(param)
{}

//Destructor

void go()
{
    (*iFunc)(iParam);
}
Run Code Online (Sandbox Code Playgroud)

要在此处使用回调方法,您需要创建一个由Callback对象调用的函数指针.

方法3

[这是我(Andreas)在问题中添加的; 它不是由原始海报写的]

template <typename T>
class Callback
{
public:
    Callback() {}
    ~Callback() {}
    void go() {
        T …
Run Code Online (Sandbox Code Playgroud)

c++ virtual-functions function-pointers

32
推荐指数
3
解决办法
9292
查看次数

多个和单个索引

自从我使用MySQL多年以来,我有点羞于问这个问题,但是哦.

我有一个有两个字段的表,ab.我将在其上运行以下查询:

  • SELECT * FROM ... WHERE A = 1;
  • SELECT * FROM ... WHERE B = 1;
  • SELECT * FROM ... WHERE A = 1 AND B = 1;

从性能的角度来看,对于至少一个查询,至少有以下一种索引配置较慢?如果是,请详细说明.

  1. ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b);
  2. ALTER TABLE ... ADD INDEX (a, b);
  3. ALTER TABLE ... ADD INDEX (a); ALTER TABLE ... ADD INDEX (b); ALTER TABLE ... ADD INDEX (a, b);

谢谢(请注意,我们正在讨论非唯一索引)

mysql sql database indexing

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

使用201创建重定向

有没有办法重定向201答案?

RFC指定必须在Location标头中指定新创建的资源,并且我指定它.我假设浏览器会重定向,但它不会,即使页面没有内容.

我希望用户在POST操作后重定向到新资源.因此我很想使用,303 See Other但201似乎更合适.

那么,有没有办法在没有用户干预的情况下自动重定向流行的浏览器而不依赖于Javascript?

http http-status-codes

30
推荐指数
1
解决办法
4803
查看次数

通过从字符串中选择字符可以形成多少个回文?

我代表一位朋友发帖,因为我觉得这很有趣:

取字符串"abb".通过遗漏少于字符串长度的任意数量的字母,我们最终得到7个字符串.

abb ab ab bb abb

其中4个是回文.

同样对于字符串

"hihellolookhavealookatthispalindromexxqwertyuiopasdfghjklzxcvbnmmnbvcxzlkjhgfdsapoiuytrewqxxsoundsfamiliardoesit"

(长度为112弦)2 ^ 112 - 可以形成1个弦.

其中有多少是回文?

下面是他的实现(在C++中,C也很好).用很长的词来说它很慢; 他想知道什么是最快的算法(我也很好奇:D).

#include <iostream>
#include <cstring>

using namespace std;



void find_palindrome(const char* str, const char* max, long& count)
{
    for(const char* begin = str; begin < max; begin++) {
        count++;
        const char* end = strchr(begin + 1, *begin);
        while(end != NULL) {
            count++;
            find_palindrome(begin + 1, end, count);
            end = strchr(end + 1, *begin);
        }
    }
}


int main(int argc, char *argv[])
{
    const …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm performance

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