标题:请问一下各位,都用什么样的编译器?
只看楼主
cookies5000
Rank: 2
等 级:论坛游民
帖 子:33
专家分:48
注 册:2009-10-25
结帖率:100%
已结贴  问题点数:20 回复次数:3 
请问一下各位,都用什么样的编译器?
#include <iostream>
#include <string>
using namespace std;

template <typename T>
T const & max2(T const & a, T const & b )
{
    return a<b?b:a;
}
template <typename T>
T * const &max2(T* const &a ,T * const &b)
{
    return *a<*b?b:a;
}

const char * const & max2(const char * const &a, const char * const &b)
{
    return strcmp(a,b)<0? b:a;
}
//
int main()
{
    int ia=3;
    int ib=8;
    char * s1="hello";
    char * s2="hell";
    cout<<* max2(&ia, &ib)<<"\n";
    cout<<  max2(ia,ib)<<"\n";
    cout<<  max2(s1,s2)<<"\n";
    return 0;
}

//
上面这几行代码,我在VC++6.0上编译不过,错误提示的大意好象是max2不知道如何匹配。可在Visual Studio2005
下却顺利通过。。。
请问各位:    1. 是编译器的差异造成这种现象吗?
              2. 各位都用什么样的编译器?有哪种是"标准的"?(很愚蠢的问题,请别笑出声来).
搜索更多相关主题的帖子: 什么样 编译 
2009-10-31 01:09
flyingcloude
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:6
帖 子:598
专家分:1512
注 册:2008-1-13
得分:10 
这个是编译器差异造成的。
用gcc,编译能够通过。gcc最接近c99标准

你能学会你想学会的任何东西,这不是你能不能学会的问题,而是你想不想学的问题
2009-10-31 09:30
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:10 
嗯,VC6.0与标准不一致的地方非常多。所以如果用VC6.0的话,就不要用太偏僻的语法特性。
另外,还有一些(主要是稍老一点的)编译器也不支持所谓“偏特化”(还是什么的,我也不太知道应该翻译成什么)这个特征,就是在处理类型匹配上,选择更加精确的。
比如这个(如果你写的这是一个演示用例,我觉得去掉那些 const 简洁些,更能说明问题。),你传一个char*,有三种可能:
既可以匹配T,把 T 解释成 char*
也可以匹配T*,把 T 解释成 char
当然还可以匹配模版的 char*
标准说应该选择最精确的匹配,就是,按照我刚写的由下向上匹配。要是没在定义下面的,就用上一层的匹配。
 
支持这种特性,可以利用语法让编程变得轻松些,不过这些语法不是必须的,也就是说,完全可以利用编程技巧避免使用这个语法特性。一些良好的可移植代码,一般都可以利用条件处理让编译器成生最佳效果的语句。
2009-10-31 09:58
cookies5000
Rank: 2
等 级:论坛游民
帖 子:33
专家分:48
注 册:2009-10-25
得分:0 
谢谢flyingcloude:我知道了 gcc .呵呵

谢谢pangding:

“支持这种特性,可以利用语法让编程变得轻松些,不过这些语法不是必须的,也就是说,完全可以利用编程技巧避免使用这个语法特性。一些良好的可移植代码,一般都可以利用条件处理让编译器生成最佳效果的语句。”

这话经典啊!使我明白了一点:不走“边缘路线”,尽可能让代码为编译器所接受。


2009-10-31 15:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-290541-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012331 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved