gpt4 book ai didi

c++ - 函数模板重载clang++

转载 作者:IT老高 更新时间:2023-10-28 23:00:59 25 4
gpt4 key购买 nike

g++ 4.8.1 和 clang++ 3.4 为下一个代码给出不同的结果:

// simplified code from a Logger module
#include <iostream>

template<class T> void tf(const T*) { // clang++
std::cout << "void tf(const T*)\n";
}

template<class T> void tf(T) { // g++
std::cout << "void tf(T)\n";
}

int main(){
typedef std::ios_base& (*ph)(std::ios_base&);
ph p = std::hex;
tf(p); // or just tf(std::hex)
}

我不知道哪个变体是正确的 (C++ 03)。

最佳答案

指向函数的指针不是指向对象的指针,在 C++ 中谈论函数指针的 const 特性是没有意义的。

IMO g++ 是正确的,因为 hex 有资格作为指向函数的指针,但不能作为指向任何内容的 const *

在第一种情况下,模板参数不是“指针”而是“指向对象的指针”。

在 C++ 中没有通用“指针”之类的东西……你有指向函数的指针、指向对象的指针或指向成员的指针。三者各有不同的规则,互不相容。

诚然,空指针会带来一些困惑......

关于c++ - 函数模板重载clang++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19131309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com