首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用basic_string函数

调用basic_string函数
EN

Stack Overflow用户
提问于 2020-01-24 09:01:29
回答 2查看 66关注 0票数 0

我在搜索中没有找到多少关于警察函数的信息。C++引物表示返回类型和每个参数的类型必须是文字类型。现在返回类型,我使用bool和参数类型,我在返回中使用reference.but,我使用两个basic_string函数来计算,results.clion是告诉我不能使用basic_string函数

代码语言:javascript
复制
constexpr bool a (const string &z , const string &zz)
{
    return (z.size() > zz.size());
}

非常感谢你回答我的问题!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-24 09:17:00

您所使用的所有类型都是文字类型,这是正确的,但是constexpr函数还有另一个要求。

必须对至少一组参数调用constexpr函数,以便调用是一个常量表达式。

问题是,z.size()永远不能在常量表达式中调用,因为stringsize函数没有被声明为constexpr

如果声明为constexpr的函数永远不能用作常量表达式,则程序具有未定义的行为,编译器可能警告或不打印有关它的错误。

如果您以一种可用作至少一组调用参数的常量表达式的方式更改该函数,则该定义将不再出现错误:

代码语言:javascript
复制
constexpr bool a (bool b, const string &z , const string &zz)
{
    return b ? false : (z.size() > zz.size());
}

但是,您仍然不能将它作为常量表达式的一部分来调用,而使用b作为false

正如注释中提到的那样,您可以通过使用string_view而不是自C++17 (需要#include<string_view>)来使用C++17来实现这个函数的工作(假设它是用在常量表达式中可用的参数调用的)。这是因为std::string_view是一个文字类型(特别是它有constexpr构造函数),而且它的size函数也是constexpr

票数 1
EN

Stack Overflow用户

发布于 2020-01-24 10:52:38

我认为this线程中的顶部答案对于回答您的问题也很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59893202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档