由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - a string define question (c++)
相关主题
C++一个string的小问题Why does default exception use char *?
[合集] 6个变态的C语言写的Hello World (ZZ)[合集] What are the differences between "const char* p" and "c
这段C++代码有啥问题A question about cost char*
请教boost::any compile错误。a c++ question.
const 指针类型转换问个C++ 编译器临时变量的问题 (转载)
which func will be called?c++ string 一问
急,VC7.1编译错误C++ Strategies and Tactics 书上一个问题求助
这个在c++ const不变,不能用相同地址的变量改,咋做的关于 exception 的一个问题
相关话题的讨论汇总
话题: string话题: const话题: hello话题: std话题: char
进入Programming版参与讨论
1 (共1页)
t*i
发帖数: 72
1
为啥第二个是invalid的
valid define:
const std::string hello = "Hello";
const std::string message = hello + ", world" + "!";
invalid define:
const std::string exclam = "!";
const std::string message = "Hello" + ", world" + exclam;
r****r
发帖数: 115
2
"Hello" + ", world"
没法加吧

【在 t*i 的大作中提到】
: 为啥第二个是invalid的
: valid define:
: const std::string hello = "Hello";
: const std::string message = hello + ", world" + "!";
: invalid define:
: const std::string exclam = "!";
: const std::string message = "Hello" + ", world" + exclam;

t*i
发帖数: 72
3
谢谢

【在 r****r 的大作中提到】
: "Hello" + ", world"
: 没法加吧

f*******y
发帖数: 988
4
string literal比较tricky的地方就是他们的真正类型其实是const char []

这个通过了,因为你的编译器是先算 operator + (std::string, std::string),
const char [8] 被cast成std::string 了
这个不行是因为 operator + (const char [6], const char [8]) 不存在
你搞个const std::string message = hello + (", world" + "!");就不行

【在 t*i 的大作中提到】
: 为啥第二个是invalid的
: valid define:
: const std::string hello = "Hello";
: const std::string message = hello + ", world" + "!";
: invalid define:
: const std::string exclam = "!";
: const std::string message = "Hello" + ", world" + exclam;

t*i
发帖数: 72
5
看书的时候随便扫过这些概念,但是印象不够深刻,还是做点练习题目才能有更多的感
性认识。

【在 f*******y 的大作中提到】
: string literal比较tricky的地方就是他们的真正类型其实是const char []
:
: 这个通过了,因为你的编译器是先算 operator + (std::string, std::string),
: const char [8] 被cast成std::string 了
: 这个不行是因为 operator + (const char [6], const char [8]) 不存在
: 你搞个const std::string message = hello + (", world" + "!");就不行

t****u
发帖数: 8614
6
std::string, doesn't have string(const char *) constructor, so it won't
allow implicit conversion. it has operator+(const char *) though, so the
first is working, the second doesn't work.

【在 t*i 的大作中提到】
: 为啥第二个是invalid的
: valid define:
: const std::string hello = "Hello";
: const std::string message = hello + ", world" + "!";
: invalid define:
: const std::string exclam = "!";
: const std::string message = "Hello" + ", world" + exclam;

t****t
发帖数: 6806
7
怎么可能没有,用脚趾头想也知道肯定有啊。

【在 t****u 的大作中提到】
: std::string, doesn't have string(const char *) constructor, so it won't
: allow implicit conversion. it has operator+(const char *) though, so the
: first is working, the second doesn't work.

f*******y
发帖数: 988
8
恩,正确的说法是有一个explicit的ctor,所以就不能implicit的转换了

【在 t****t 的大作中提到】
: 怎么可能没有,用脚趾头想也知道肯定有啊。
t****t
发帖数: 6806
9
怎么你们发言之前不想想的吗,basic_string的explicit ctor只有一个,是以
Allocator为参数的。从const char*过去,怎么可能需要explicit??

【在 f*******y 的大作中提到】
: 恩,正确的说法是有一个explicit的ctor,所以就不能implicit的转换了
c********x
发帖数: 84
10

because the operator + has no +( char*, char*), solution is
cast the string "Hello" to string object.
const std::string message = (string)"hello" + ", world" + "!"; // this
should work.

【在 t*i 的大作中提到】
: 为啥第二个是invalid的
: valid define:
: const std::string hello = "Hello";
: const std::string message = hello + ", world" + "!";
: invalid define:
: const std::string exclam = "!";
: const std::string message = "Hello" + ", world" + exclam;

相关主题
which func will be called?Why does default exception use char *?
急,VC7.1编译错误[合集] What are the differences between "const char* p" and "c
这个在c++ const不变,不能用相同地址的变量改,咋做的A question about cost char*
进入Programming版参与讨论
c****e
发帖数: 1453
11
俺觉得是, 在第二种情况下, 编译器不会认为"Hello"后面的 + 重载了, 因为第一个是
const char*, 所以不行. 第一种情况下, 编译器知道 hello这个string后面的+是调用
string::operator +, 加上对于const char*的implicit conversion, 就成了string +
string.
利用这个implicit conversion的时候, 需要第一个是object触发你需要的操作符, 不然编译器会当成普通数据类型处理的.
c********x
发帖数: 84
12

+
不然编译器会当成普通数据类型处理的.
hehe, let me put in this way:
1. string + char[] // + is defined in lib
2. char[] + char[] // no way.

【在 c****e 的大作中提到】
: 俺觉得是, 在第二种情况下, 编译器不会认为"Hello"后面的 + 重载了, 因为第一个是
: const char*, 所以不行. 第一种情况下, 编译器知道 hello这个string后面的+是调用
: string::operator +, 加上对于const char*的implicit conversion, 就成了string +
: string.
: 利用这个implicit conversion的时候, 需要第一个是object触发你需要的操作符, 不然编译器会当成普通数据类型处理的.

c***g
发帖数: 472
13
the return type of + of string is a string
and one of the operands of + must be string

【在 t*i 的大作中提到】
: 为啥第二个是invalid的
: valid define:
: const std::string hello = "Hello";
: const std::string message = hello + ", world" + "!";
: invalid define:
: const std::string exclam = "!";
: const std::string message = "Hello" + ", world" + exclam;

P********e
发帖数: 2610
14
the key of this problem is to
be aware of the precedence of operations

【在 c***g 的大作中提到】
: the return type of + of string is a string
: and one of the operands of + must be string

t****t
发帖数: 6806
15
huh? not associativity?

【在 P********e 的大作中提到】
: the key of this problem is to
: be aware of the precedence of operations

P********e
发帖数: 2610
16
用这么复杂的词做什么啊
英文不好,我想说,运算顺序,从左,或者从右 makes difference

【在 t****t 的大作中提到】
: huh? not associativity?
t****t
发帖数: 6806
17
鸡蛋里挑一下骨头,C语言运算符规定的其实是语义,而不是真正的运算顺序。

【在 P********e 的大作中提到】
: 用这么复杂的词做什么啊
: 英文不好,我想说,运算顺序,从左,或者从右 makes difference

1 (共1页)
进入Programming版参与讨论
相关主题
关于 exception 的一个问题const 指针类型转换
一个popen加gzip的问题which func will be called?
为啥gcc找不到类的构造函数?急,VC7.1编译错误
一个c++小问题这个在c++ const不变,不能用相同地址的变量改,咋做的
C++一个string的小问题Why does default exception use char *?
[合集] 6个变态的C语言写的Hello World (ZZ)[合集] What are the differences between "const char* p" and "c
这段C++代码有啥问题A question about cost char*
请教boost::any compile错误。a c++ question.
相关话题的讨论汇总
话题: string话题: const话题: hello话题: std话题: char