小编MKP*_*KPS的帖子

为什么第一个函数调用绑定到第一个函数?

为什么第一个函数call(cm(car);)绑定到第一个函数?

我知道第二个调用绑定到第二个函数,因为它是非模板,尽管两者都是完美的匹配.

如果第一个函数被定义为具有固定数组长度的非模板,则:

    void cm(const char (&h)[8]) {cout << "const char (&)[8]" << endl;}
Run Code Online (Sandbox Code Playgroud)

而不是它再次被选中在第二个(第二个调用将是不明确的那种方式).

码:

template<size_t N> void cm(const char (&h)[N]) 
    {std::cout << " const (&)[N] " << endl;}

void cm(const char * h)
    {cout << " const char * " << endl;}

int main()
{
    char car[] = "errqweq";
    const char ccar[] = "errqweq";
    cm(car);
    cm(ccar);
}
Run Code Online (Sandbox Code Playgroud)

输出:

 const (&)[N]
 const char * 
Run Code Online (Sandbox Code Playgroud)

c++ templates function language-lawyer overload-resolution

10
推荐指数
1
解决办法
153
查看次数

当给定`const char*`作为第一个参数时,C标准库函数`strchr`如何返回指向非const的指针?

使用gcc/g ++编译给定的代码示例成功.strchr呼叫没有错误,这显然是指定const char *char *.

我发现它strchr被声明为char * strchr(const char *, int)两个不同的来源pubs.opengroup.orgcplusplus.com

如果strchr实现为抛弃constness,那为什么会这样呢?

如果目标是提供兼容char *const char *字符串的功能 - 它可以使用两个不同的函数名实现.

你能否对此作出更全面的解释?

#include <string.h>

int main () {
    const char *str = "Sample string";
    char * ptr;

    //ptr = str;            //  Error: discards const qualifier - both on gcc and g++
    pch = strchr(str,'S');  //  Succeeds in assigning <const char *> to <char *> …
Run Code Online (Sandbox Code Playgroud)

c gcc const strchr

5
推荐指数
1
解决办法
663
查看次数