C++ 对目录使用操作符/是好主意还是坏主意?

C++ 对目录使用操作符/是好主意还是坏主意?,c++,directory,operator-overloading,C++,Directory,Operator Overloading,我有一个目录类,它存储一个字符串,并有一个/操作符,这样a是目录,b是标准::字符串将和b添加到a中存储的字符串中,如下所示: Directory a("/home/joe/foo"); Directory b = a / "bar"; 这将使b存储字符串/home/joe/foo/bar。这实际上是可用的,还是只是不必要的幻想?这是一个坏主意,因为您正在更改/operator的常用含义。这是一个坏主意,因为您正在更改/operator的常用含义。在这种样式中重载运算符是。。。古怪的我不会说它

我有一个
目录
类,它存储一个字符串,并有一个
/
操作符,这样
a
目录
b
标准::字符串
b
添加到
a
中存储的字符串中,如下所示:

Directory a("/home/joe/foo");
Directory b = a / "bar";

这将使
b
存储字符串
/home/joe/foo/bar
。这实际上是可用的,还是只是不必要的幻想?

这是一个坏主意,因为您正在更改/operator的常用含义。

这是一个坏主意,因为您正在更改/operator的常用含义。

在这种样式中重载运算符是。。。古怪的我不会说它很糟糕,但你必须记住,在大多数情况下,
operator/
更像是说“用这个除以那个”。现在,您可以自由地将运算符重载到任何您想要的内容,但是字符串(可以表示目录)的约定通常是您将重载类似于
+
的内容


当我第一次看到这段代码时,我有一种奇怪的感觉,你试图用其他东西来划分一个目录。这真的很让人困惑,也不太清楚
+
可能是一个更好的选择,或者只是使用一个显式的方法名,比如
Append
Combine

在这种样式中重载操作符是。。。古怪的我不会说它很糟糕,但你必须记住,在大多数情况下,
operator/
更像是说“用这个除以那个”。现在,您可以自由地将运算符重载到任何您想要的内容,但是字符串(可以表示目录)的约定通常是您将重载类似于
+
的内容


当我第一次看到这段代码时,我有一种奇怪的感觉,你试图用其他东西来划分一个目录。这真的很让人困惑,也不太清楚
+
可能是一个更好的选择,或者只是使用一个显式的方法名,比如
Append
Combine

Boost文件系统以类似的方式重载了operator/。在您走得太远之前,您是否签出了boost文件系统

Boost文件系统以类似的方式重载了operator/。在您走得太远之前,您是否签出了boost文件系统

我认为这不是一个好主意,因为它不符合常识。 在本书中,它提供了运算符重载的规则:
不要用内置意义重载运算符

我认为这不是一个好主意,因为它不符合常识。 在本书中,它提供了运算符重载的规则:

不要用内置的含义重载运算符

这不是一个真正的问题,伊姆霍。如果它有效,它是可用的…如果这能让你的工作(生活!)更轻松,那就去吧!我自己不会这么做的,因为它对其他人来说真的不是很可读。我的思考过程是:“好的,我看到有一个目录a。a被“条”除,这是什么意思?”更合适的方法是一个有明确名称的方法。如果你愿意,你也可以做
操作符+
,而不是字符串连接。这不是一个真正的问题,伊姆霍。如果它有效,它是可用的…如果这能让你的工作(生活!)更轻松,那就去吧!我自己不会这么做的,因为它对其他人来说真的不是很可读。我的思考过程是:“好的,我看到有一个目录a。a被“bar”除,这意味着什么?”更合适的方法是一个名称明确的方法。如果你愿意,你也可以使用
操作符+
来代替字符串连接。它是语言标准下一次迭代中的候选项。哈。我不知道boost有这个功能,它是语言标准下一次迭代的候选项。我不知道Boost有这个。在文件名的情况下,<代码> /Fo/bar。TXT < /Cord>是什么意思?C++中的所有运算符都有内置的含义。实际上,您不能添加全新的运算符。@Yakk:它的意思是根目录下文件夹
foo
中的一个文件
bar.txt
。@joezen:这是一个反问。关键是每个开发人员都已经把
/
理解为除法和路径分隔符,这取决于上下文。啊,我明白了。因此,它是对答案的回应,而不是对文件的要求。在文件名的情况下,<代码> /Foo/bar。TXT < /COD>意味着什么?C++中的所有运算符都有内置的含义。实际上,您不能添加全新的运算符。@Yakk:它的意思是根目录下文件夹
foo
中的一个文件
bar.txt
。@joezen:这是一个反问。关键是每个开发人员都已经把
/
理解为除法和路径分隔符,这取决于上下文。啊,我明白了。因此,这是对答案的回应,而不是要求澄清。这如何改变路径中
/
的共同含义?C++总是在上下文中解释操作符。例如,stings的
+
不可交换,
a+b!=b+a
语句b=a/“bar”;正在从3个组件构建一条路径,这里的加法也更有意义。理解一个/“条”需要很多上下文信息,这些信息可能不可用,而且是特定于平台的。我看不到任何上下文信息不合理可用的地方。你能举个例子吗?@Gary:path x=foo()+“.txt”
是否附加了
“.bar”或
“/.bar”
,这是
+
的问题。路径x=foo()/“.bar”
中没有这种歧义。注意,路径是字符串列表,并且
/`添加了一个完整的字符串。您在其中的某个地方漏掉了一个反勾号,@MSalters。这如何改变路径中
/
的常见含义?C++总是在上下文中解释操作符。例如,stings的
+
不可交换,
a+b!=b+a
语句b=a/“bar”;is公司