Спецификации исключений при наследовании от std :: exception в C ++ 11

У меня есть следующий класс исключения:

#include 

struct InvalidPathException : public std::exception
{
   explicit InvalidPathException() {}
   const char* what() const;
};

const char*
InvalidPathException::what() const {
    return "Path is not valid";
}

При компиляции под GCC 4.4 с -Wall -std = c ++ 0x

ошибка: более свободный спецификатор throw для 'виртуальный константный символ * InvalidPathException :: what () const '

ошибка: переопределение' virtual const char * std :: exception :: what () const throw () '

Совершенно верно, поскольку я переопределяю метод std :: exception what () , который действительно имеет спецификатор исключения throw () . Но, как часто сообщают , нам не следует использовать спецификаторы исключений. И насколько я понимаю, они устарели в C ++ 11 , но, очевидно, еще не в GCC с -std = c ++ 0x.

Так что меня бы интересовал лучший подход для сейчас. В коде, который я разрабатываю, я действительно беспокоюсь о производительности и поэтому беспокоюсь о часто упоминаемых накладных расходах throw () , но в действительности ли эти накладные расходы такие серьезные? Прав ли я, думая, что я буду страдать от этого, только когда на самом деле вызывается what () , Я использую приведенный ниже код, чтобы получить текущий путь к приложению, и там я создаю папку NDSLog, чтобы все мои файлы журналов помещались туда, теперь я ...

Как проверить, существует ли уже каталог в MFC (VC ++)? Я использую приведенный ниже код, чтобы получить текущий путь к приложению, и там я создаю папку NDSLog так что все мои файлы журнала должны быть там, теперь я хочу проверить условие, если папка NDSLog уже существует, не создавайте ее. Как это сделать?

Спасибо.

char strPathName[_MAX_PATH];
    ::GetModuleFileName(NULL, strPathName, _MAX_PATH);

    // The following code will allow you to get the path.
    CString newPath(strPathName);
    int fpos = newPath.ReverseFind('\\');

    if (fpos != -1)
    newPath = newPath.Left(fpos+1);     
    newPath += "NDSLog\\" ;

    CreateDirectory(newPath,NULL); 

8
задан Swapnil Gupta 26 November 2010 в 04:50
поделиться