小编And*_*ndy的帖子

检查svn存储库URL是否不存在

我正在编写一个脚本,它将根据用户提供的名称在存储库中添加一个新项目.部分原因是检查存储库中是否已存在具有相同名称的URL.

在存储库中,我们团队的所有项目都存储在其中

https://developernetwork.repo.net/svn/Projects/

假设用户想要调用项目"Calculator"并运行脚本.在这种情况下,我们需要确保存储库中不存在以下内容

https://developernetwork.repo.net/svn/Projects/Calculator/

是否有一个svn命令可以用来完成它?不幸的是,我根本无法在svn文档(http://svnbook.red-bean.com/en/1.0/svn-book.html)中看到一个合适的命令.

svn command-line

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

从中读取对象时是否需要锁定对象?

我正在编写一个程序,其中有一个由多个线程共享的对象:

  • A)多个写线程写入对象(所有运行相同的函数)
  • B)每5秒访问一次对象的读线程
  • C)访问对象的读取线程存在用户请求

显然有必要在写入时锁定对象,因为我们不希望多个线程同时写入对象.

我的问题是:

  1. 在读取对象时是否还需要锁定对象?
  2. 我是否认为如果我们只是在写作时锁定对象,那么关键部分就足够了; 但是如果我们在读取或写入时锁定对象,则需要互斥锁?

我问这个问题,因为在Microsoft Office中,Word的两个实例不可能以读/写访问模式访问文档; 但是当文档以读/写模式打开时,可以打开另一个Word实例以只读模式访问文档.线程中是否也适用相同的逻辑?

multithreading mutex critical-section

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

如何在构造函数中处理不正确的值?

请注意,这是一个关于构造函数的问题,而不是关于处理时间的类.

假设我有一个这样的类:

class Time
{
protected:
    unsigned int m_hour;
    unsigned int m_minute;
    unsigned int m_second;
public:
    Time(unsigned int hour, unsigned int minute, unsigned int second);
};
Run Code Online (Sandbox Code Playgroud)

虽然我希望成功构建一个,但我希望b的构造函数失败.

Time a = Time(12,34,56);
Time b = Time(12,34,65); // second is larger than 60
Run Code Online (Sandbox Code Playgroud)

但是,这是不可能的,因为构造函数不返回任何值,并且总是会成功.

构造函数如何告诉程序它不满意?我想到了几个方法:

  1. 让构造函数抛出异常,并在调用函数中有处理程序来处理它.
  2. 在类中有一个标志,只有当构造函数接受这些值时才将其设置为true,并让程序在构造后立即检查标志.
  3. 有一个单独的(可能是静态的)函数来调用在调用构造函数之前立即检查输入参数.
  4. 重新设计类,以便可以从任何输入参数构造它.

哪种方法在工业中最常见?或者有什么我可能错过的?

c++ error-handling constructor return-value

23
推荐指数
5
解决办法
9256
查看次数

防止C++中的意外对象复制

在我们公司的编码标准中,我们被告知"要知道可以防止复制的方式(意外)".

我不确定这意味着什么,但假设它们意味着如果不需要,我们应该停止复制类.

我能想到的是:

  1. 使类的复制构造函数成为私有.
  2. 使类的赋值运算符(operator =)成为私有的.
  3. 使类的构造函数显式(以阻止使用不正确的变量创建类).
  4. 对于执行内存分配和需要复制的所有类,请确保复制构造函数和赋值运算符执行深度复制而不是浅复制.

我是在正确的轨道上吗?有什么我可能错过的吗?

c++ copying

17
推荐指数
3
解决办法
8387
查看次数

在Unix/Linux中将文件移动到不同目录所需的权限

我想澄清所需的权限,以便将文件A从目录B移动到目录C(我认为该命令将是"mv B/AC/A"),名称不变.

我是否认为需要以下内容?

  1. 执行移动的用户/组必须具有目录B的写入权限(或者B必须设置权限标志以允许所有用户/组写入它)
  2. 执行移动的用户/组必须具有目录C的写权限(或者C必须设置权限标志以允许所有用户/组写入它)
  3. 执行移动的用户/组必须具有文件A的写入权限(或者A必须设置权限标志以允许所有用户/组写入它)

谢谢.

unix linux file-permissions mv

14
推荐指数
1
解决办法
4万
查看次数

C++构造函数初始化列表奇怪

在编写我的类时,我总是一个好孩子,用m_作为所有成员变量的前缀:

class Test {
    int m_int1;
    int m_int2;
public:
    Test(int int1, int int2) : m_int1(int1), m_int2(int2) {}
};

int main() {
    Test t(10, 20); // Just an example
}
Run Code Online (Sandbox Code Playgroud)

然而,最近我忘记这样做了,最后写了:

class Test {
    int int1;
    int int2;
public:
    // Very questionable, but of course I meant to assign ::int1 to this->int1!
    Test(int int1, int int2) : int1(int1), int2(int2) {}
};
Run Code Online (Sandbox Code Playgroud)

信不信由你,编译的代码没有错误/警告,并且分配正确!只有在检查我的代码之前进行最后检查时才意识到我做了什么.

我的问题是:为什么我的代码编译?在C++标准中是否允许这样的东西,还是仅仅是编译器聪明的情况?如果您想知道,我使用的是Visual Studio 2008

c++ constructor initialization-list

11
推荐指数
2
解决办法
6468
查看次数

定义<用于STL排序算法 - 运算符重载,仿函数还是独立函数?

我有一个包含Widget类对象的stl :: list.它们需要根据Widget类中的两个成员进行排序.

为了使分类工作,必须定义一个比较两个Widget对象的比较器.似乎有无数种方法可以做到这一点.从我可以收集到的,人们可以:

一个.在类中定义比较运算符重载:

bool Widget::operator< (const Widget &rhs) const
Run Code Online (Sandbox Code Playgroud)

湾 定义一个带有两个小部件的独立函数:

bool operator<(const Widget& lhs, const Widget& rhs);
Run Code Online (Sandbox Code Playgroud)

然后让Widget类成为它的朋友:

class Widget {
    // Various class definitions ...
    friend bool operator<(const Widget& lhs, const Widget& rhs);
};
Run Code Online (Sandbox Code Playgroud)

C.定义一个仿函数,然后在调用sort函数时将其作为参数包含在内:

class Widget_Less :
public binary_function<Widget, Widget, bool> { 
    bool operator()(const Widget &lhs, const Widget& rhs) const;
};
Run Code Online (Sandbox Code Playgroud)

有谁知道哪种方法更好?特别是我有兴趣知道我是否应该做1或2.我搜索了Scott Meyer的书"有效STL",但遗憾的是它没有任何关于此的说法.

谢谢您的回复.

c++ sorting stl operator-overloading functor

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

C++ copy-construct构造和分配问题

以下是"C++ Gotchas"一书第56条的摘录:

通过三种不同方式编写Y对象的简单初始化并不罕见,就像它们是等效的一样.

Y a( 1066 ); 
Y b = Y(1066);
Y c = 1066;
Run Code Online (Sandbox Code Playgroud)

事实上,所有这三个初始化可能会导致生成相同的目标代码,但它们并不相同.a的初始化称为直接初始化,它完全符合人们的期望.初始化是通过直接调用Y :: Y(int)完成的.

b和c的初始化更复杂.事实上,它们太复杂了.这些都是复制初始化.在初始化b的情况下,我们要求创建一个Y类型的匿名临时值,用值1066初始化.然后我们使用这个匿名临时值作为类Y的拷贝构造函数的参数来初始化b.最后,我们将析构函数称为匿名临时.

为了测试这个,我做了一个带有数据成员的简单类(最后附加了程序),结果令人惊讶.似乎对于c的情况,对象是由复制构造函数构造的,而不是书中所建议的.

有人知道语言标准是否已经改变,或者这只是编译器的优化功能?我使用的是Visual Studio 2008.

代码示例:

#include <iostream>

class Widget
{
    std::string name;
public:
    // Constructor
    Widget(std::string n) { name=n; std::cout << "Constructing Widget " << this->name << std::endl; }
    // Copy constructor
    Widget (const Widget& rhs) { std::cout << "Copy constructing Widget from " << rhs.name << std::endl; }
    // Assignment operator
    Widget& operator=(const Widget& rhs) { std::cout << "Assigning Widget …
Run Code Online (Sandbox Code Playgroud)

c++ constructor copy-constructor assignment-operator

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

可以/为什么在返回类型中使用char*而不是const char*会导致崩溃?

我在某处读到如果你想要一个C/C++函数来返回一个字符数组(而不是std :: string),你必须返回const char*而不是char*.执行后者可能会导致程序崩溃.

有人能够解释这是否属实?如果是真的,为什么从一个如此危险的函数返回一个char*?谢谢.

const char * my_function()
{
    ....
}

void main(void)
{
    char x[] = my_function();
}
Run Code Online (Sandbox Code Playgroud)

c const char

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

关于介绍C++接口的文章的问题

我一直在阅读一篇关于C++接口的文章(http://accu.org/index.php/journals/233),我完全迷失了它应该将所有虚拟成员函数都设为私有的部分(标题为"加强分离").对我来说根本没有意义.

据作者说,代码是这样的:

class shape {
public:
  virtual ~shape();
  virtual void move_x(distance x) = 0;
  virtual void move_y(distance y) = 0;
  virtual void rotate(angle rotation) = 0;
  //...
};

class line : public shape {
public:
  line(point end_point_1, point end_point_2);
  //...
private:
  virtual ~line();
  virtual void move_x(distance x);
  virtual void move_y(distance y);
  virtual void rotate(angle rotation);
  //...
};
Run Code Online (Sandbox Code Playgroud)

所以我们有一个纯粹的虚函数,它是公共的,它的实现(在行类中)是私有的.

谁能解释一下如何调用move_x函数?它的访问说明符是私有的,如果我尝试这样做会导致错误:

line my_line(point(0,0), point(1,2));
my_line.move_x(-1); // does not compile
Run Code Online (Sandbox Code Playgroud)

同样,说绘图界面(参见本文前面部分)也无法访问这些函数是正确的吗?

谢谢.

c++ interface class

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