由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - c++ question
相关主题
问个指针array 的简单问题namespace 问题
请问关于overloading <<问一个for循环的问题
a simple question for C++ class问一个 char * 和 char [] 的问题
私有成员不能用类成员函数修改?c++ template question:
C++小程序查错谁给详细说一下这句
C++ Q04: template member[合集] 又被羞辱了一把... (转载)
One c++ non-type template question关于 expression template 这种叫法
member and friendC++ namespace 弱问
相关话题的讨论汇总
话题: endl话题: cout话题: string话题: return话题: abc
进入Programming版参与讨论
1 (共1页)
a*****n
发帖数: 149
1
刚写了小代码,发现一点疑惑
template
int compare(T &a1, T &a2)
{
if (a1 < a2)
return 1;
else
return 2;
}
void main()
{
cout << compare("abc", "def") << endl;
if ("abc" < "def")
cout << 1 << endl;
else
cout << 2 << endl;
}
第一个输出是2,第二个输出1。为啥呢?多谢赐教!
y*******g
发帖数: 6599
2
你这样都是比较地址吧

【在 a*****n 的大作中提到】
: 刚写了小代码,发现一点疑惑
: template
: int compare(T &a1, T &a2)
: {
: if (a1 < a2)
: return 1;
: else
: return 2;
: }
: void main()

X****r
发帖数: 3557
3
取决于你的编译器及编译选项,两个同样的"abc"未必
就是同一个地址。你试试"abc" == "abc"就知道了。

【在 a*****n 的大作中提到】
: 刚写了小代码,发现一点疑惑
: template
: int compare(T &a1, T &a2)
: {
: if (a1 < a2)
: return 1;
: else
: return 2;
: }
: void main()

L*******s
发帖数: 63
4
在我机器上结果是一样的

【在 a*****n 的大作中提到】
: 刚写了小代码,发现一点疑惑
: template
: int compare(T &a1, T &a2)
: {
: if (a1 < a2)
: return 1;
: else
: return 2;
: }
: void main()

L*******s
发帖数: 63
5
是引用不是地址啊

【在 y*******g 的大作中提到】
: 你这样都是比较地址吧
X****r
发帖数: 3557
6
char *&用起来和char *一样

【在 L*******s 的大作中提到】
: 是引用不是地址啊
g*******y
发帖数: 1930
7
两个地方都是在比较地址吧。string literals 能直接用 < 比较吗?
string literals的地址谁在前面,当然就是跟编译器有关系了。
顺便问一下,string literal是在code 还是data segment里?

【在 a*****n 的大作中提到】
: 刚写了小代码,发现一点疑惑
: template
: int compare(T &a1, T &a2)
: {
: if (a1 < a2)
: return 1;
: else
: return 2;
: }
: void main()

t****u
发帖数: 8614
8
Theoretically, you can implement the operator overloading,
bool operator < (const std::string & s1, const std::string & s2)
{
return strcmp(s1.c_str(), s2.c_str())<0;
}
k****5
发帖数: 546
9
我的机器, 第一个输出是2,第二个输出2。

【在 a*****n 的大作中提到】
: 刚写了小代码,发现一点疑惑
: template
: int compare(T &a1, T &a2)
: {
: if (a1 < a2)
: return 1;
: else
: return 2;
: }
: void main()

g*******y
发帖数: 1930
10
突然发现,我表达好差啊。我前面说的那句“string literals 能直接用 < 比较吗?
”本意是个反问句,意思是你想实现字符串比较,直接裸用<操作符作用在两个const
char*,是不行的。
结果被人当成疑问句了。。。
另外说一点就是,像这个帖子里面的情况,比较两个string literal,重载操作符是做
不到的。
可行的办法只能是定义一个 bool strcmp()之类的函数。
为什么?因为操作符重载,前提条件是至少一个operand必须是class type。

Theoretically, you can implement the operator overloading,
bool operator < (const std::string & s1, const std::string & s2)
{
return strcmp(s1.c_str(), s2.c_str())<0;
}

【在 t****u 的大作中提到】
: Theoretically, you can implement the operator overloading,
: bool operator < (const std::string & s1, const std::string & s2)
: {
: return strcmp(s1.c_str(), s2.c_str())<0;
: }

y*******g
发帖数: 6599
11
strcmp是int 不是bool

【在 g*******y 的大作中提到】
: 突然发现,我表达好差啊。我前面说的那句“string literals 能直接用 < 比较吗?
: ”本意是个反问句,意思是你想实现字符串比较,直接裸用<操作符作用在两个const
: char*,是不行的。
: 结果被人当成疑问句了。。。
: 另外说一点就是,像这个帖子里面的情况,比较两个string literal,重载操作符是做
: 不到的。
: 可行的办法只能是定义一个 bool strcmp()之类的函数。
: 为什么?因为操作符重载,前提条件是至少一个operand必须是class type。
:
: Theoretically, you can implement the operator overloading,

1 (共1页)
进入Programming版参与讨论
相关主题
C++ namespace 弱问C++小程序查错
C++ linking 弱问 (one file)C++ Q04: template member
问个c++的template的问题One c++ non-type template question
tempalte as the overloaded conversion operatormember and friend
问个指针array 的简单问题namespace 问题
请问关于overloading <<问一个for循环的问题
a simple question for C++ class问一个 char * 和 char [] 的问题
私有成员不能用类成员函数修改?c++ template question:
相关话题的讨论汇总
话题: endl话题: cout话题: string话题: return话题: abc