Там какой-либо путь состоит в том, чтобы изменить каталог с помощью языка C?

Попытка собрать некоторое использование:

Привязка некоторого временного файла к ссылке на константу, для удлинения ее времени жизни. ссылка может быть основой - и деструктор ее не должен быть виртуальным - правильный деструктор все еще называют:

ScopeGuard const& guard = MakeGuard(&cleanUpFunction);

Объяснение , с помощью кода:

struct ScopeGuard { 
    ~ScopeGuard() { } // not virtual
};

template<typename T> struct Derived : ScopeGuard { 
    T t; 
    Derived(T t):t(t) { }
    ~Derived() {
        t(); // call function
    }
};

template<typename T> Derived<T> MakeGuard(T t) { return Derived<T>(t); }

Этот прием используется в классе утилиты ScopeGuard Alexandrescu. После того как временный файл выходит из объема, деструктор Полученных называют правильно. Вышеупомянутый код пропускает некоторые маленькие детали, но это - грандиозное предприятие с ним.

<час>

константа Использования для сообщения методов других не изменит логическое состояние этого объекта.

struct SmartPtr {
    int getCopies() const { return mCopiesMade; }
};
<час>

константа Использования для классов копии на записи , чтобы заставить компилятор помочь Вам решить, когда и если не необходимо скопировать.

struct MyString {
    char * getData() { /* copy: caller might write */ return mData; }
    char const* getData() const { return mData; }
};

Объяснение : Вы могли бы хотеть обменяться данными при копировании чего-то, пока данные первоначально и объект copie'd остаются тем же. После того как один из объекта изменяет данные, Вам однако нужны теперь две версии: Один для оригинала, и один для копии. Таким образом, Вы копия на запись к любому объекту, так, чтобы они теперь у обоих была их собственная версия.

использующий код :

int main() {
    string const a = "1234";
    string const b = a;
    // outputs the same address for COW strings
    cout << (void*)&a[0] << ", " << (void*)&b[0];
}

вышеупомянутый отрывок печатает тот же адрес на моем GCC, потому что пользовавшаяся библиотека C++ реализует копию на записи std::string. Обе строки, даже при том, что они - отдельные объекты, совместно используют ту же память для своих строковых данных. Создание b неконстанта предпочтет версию неконстанты operator[], и GCC создаст копию буфера резервной памяти, потому что мы могли изменить его, и это не должно влиять на данные [1 112]!

int main() {
    string const a = "1234";
    string b = a;
    // outputs different addresses!
    cout << (void*)&a[0] << ", " << (void*)&b[0];
}
<час>

, Чтобы конструктор копии сделал копии с объектов константы и временных файлов :

struct MyClass {
    MyClass(MyClass const& that) { /* make copy of that */ }
};
<час>

Для того, чтобы сделать константы, которые тривиально не могут измениться

double const PI = 3.1415;
<час>

Для передачи произвольных объектов ссылкой вместо значением - для предотвращения возможно дорогой или невозможной передачи значением

void PrintIt(Object const& obj) {
    // ...
}
15
задан Charles Sprayberry 28 January 2012 в 23:13
поделиться

5 ответов

В зависимости от вашей ОС существуют разные вызовы для изменения текущего каталога. Обычно они изменяют только текущий каталог процесса, запускающего исполняемый файл. После завершения процесса вы попадете в каталог, в котором начали.

14
ответ дан 1 December 2019 в 00:21
поделиться

Функция chdir () . Для получения дополнительной информации используйте man chdir .

15
ответ дан 1 December 2019 в 00:21
поделиться

Ну, команда POSIX для изменения текущего каталога:

chdir(const char*path);

См. недавнюю документацию POSIX для chdir () здесь . . 1112932]

9
ответ дан 1 December 2019 в 00:21
поделиться
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char* argv[])
{
    system("C:\\windows\\notepad.exe");
    chdir("C:\\windows\\desktop");
    return 0;
}

Согласно это

0
ответ дан 1 December 2019 в 00:21
поделиться

Да, функция chdir () .

3
ответ дан 1 December 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: