求教各位, c/c++中以字符串字面值作为函数调用者,这是什么语法?

2020-07-29 10:50:38 +08:00
 sadwin

像这样的

"xxxx"->foo()

在 cppreference 中,并没有找到相关的用法和解释。

https://en.cppreference.com/w/c/language/string_literal

https://en.cppreference.com/w/cpp/language/string_literal

1824 次点击
所在节点    问与答
18 条回复
Akiyu
2020-07-29 11:14:50 +08:00
能提供完整一些的代码么?

"xxxx"->foo()
这样的形式要求 "xxxx" 是一个可调用对象, 并且是指针类型. 比如 A*
有方法可以做到这样. 能提供详细一些的信息么? 比如 foo 是什么样的函数. 成员 or 普通函数. 等等
sadwin
2020-07-29 11:16:05 +08:00
google 到现在,连沾点关系的问题都没找到。 难道是编译器扩展? 或者是公司代码编译之前会做 sed 把字面值给替换了?
sadwin
2020-07-29 11:20:38 +08:00
@Akiyu 公司代码,不方便贴出来,但是形式是很简单的一句, `if ("xxxx"->foo()) ...` 这样的。 因为是服务端同事在群里发的代码截图,偶然看到了这么一句。 发现自己写 c++也有几年了,却从没发现这种用法......
wutiantong
2020-07-29 11:41:21 +08:00
标准范围内,没想到有什么方法能搞成这样。
sadwin
2020-07-29 11:50:24 +08:00
@wutiantong 我也是,找不到任何信息
wutiantong
2020-07-29 11:56:42 +08:00
@sadwin
operator -> 要求前面是个 class type,
operator -> 的重载也只有 inner 形式,没有 outer 形式,
user-defined literal 则必须要有个 suffix,
看起来没有别的可能了。
sadwin
2020-07-29 11:58:44 +08:00
@wutiantong 也就是说除了魔改编译器或者编译前预处理,没有别的办法了对吧?
AlohaV2
2020-07-29 12:09:03 +08:00
搜一搜有没有奇怪的宏
optional
2020-07-29 12:14:00 +08:00
#define ?
limhiaoing
2020-07-29 12:30:22 +08:00
Unified Call Syntax
limhiaoing
2020-07-29 12:32:47 +08:00
没办法发完整的链接
jtc1/sc22/wg21/docs/papers/2015/n4474.pdf
whi147
2020-07-29 17:16:48 +08:00
qt 中用过,在其他地方将指针包装成 string,抛到全局,需要用的地方,找到 string 指的地址转成指针。说白了就是地址位置传递。
whi147
2020-07-29 17:19:41 +08:00
qt 的全局指针是 qApp,通过这个来传递的。
sadwin
2020-08-03 11:00:48 +08:00
@whi147 是字符串字面值,并不是 string 哦...
whi147
2020-08-03 11:46:47 +08:00
可是你写的是 char[]
sadwin
2020-08-03 14:50:14 +08:00
@whi147 可能是我表述不清楚,我看到的代码并不是这样的:
``` c++
char *foo = "something";
...
foo->bar();
```
而是直接:
``` c++
"zhangsan"->bar();
```
这样子的。
和你说的情景应该不是同一个。

最有可能的做法没准就是按照 11 楼来的。要么就是预处理
sadwin
2020-08-03 14:50:56 +08:00
啊,我擦,回帖不能用 markdown 吗...
whi147
2020-08-04 12:14:13 +08:00
哦。这样啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693964

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX