我正在编写一个脚本,它将根据用户提供的名称在存储库中添加一个新项目.部分原因是检查存储库中是否已存在具有相同名称的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)中看到一个合适的命令.
我正在编写一个程序,其中有一个由多个线程共享的对象:
显然有必要在写入时锁定对象,因为我们不希望多个线程同时写入对象.
我的问题是:
我问这个问题,因为在Microsoft Office中,Word的两个实例不可能以读/写访问模式访问文档; 但是当文档以读/写模式打开时,可以打开另一个Word实例以只读模式访问文档.线程中是否也适用相同的逻辑?
请注意,这是一个关于构造函数的问题,而不是关于处理时间的类.
假设我有一个这样的类:
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)
但是,这是不可能的,因为构造函数不返回任何值,并且总是会成功.
构造函数如何告诉程序它不满意?我想到了几个方法:
哪种方法在工业中最常见?或者有什么我可能错过的?
在我们公司的编码标准中,我们被告知"要知道可以防止复制的方式(意外)".
我不确定这意味着什么,但假设它们意味着如果不需要,我们应该停止复制类.
我能想到的是:
我是在正确的轨道上吗?有什么我可能错过的吗?
我想澄清所需的权限,以便将文件A从目录B移动到目录C(我认为该命令将是"mv B/AC/A"),名称不变.
我是否认为需要以下内容?
谢谢.
在编写我的类时,我总是一个好孩子,用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
我有一个包含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++ 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/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++接口的文章(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)
同样,说绘图界面(参见本文前面部分)也无法访问这些函数是正确的吗?
谢谢.