小编jme*_*paz的帖子

不发生隐式转换

我问的最后一个问题是我在试图理解另一件事时偶然发现的事情......我也无法理解(不是我的一天).

这是一个很长的问题陈述,但至少我希望这个问题可能对许多人有用,而不仅仅是我.

我的代码如下:

template <typename T> class V;
template <typename T> class S;

template <typename T>
class V
{
public:
 T x;

 explicit V(const T & _x)
 :x(_x){}

 V(const S<T> & s)
 :x(s.x){}
};

template <typename T>
class S
{
public:
 T &x;

 explicit S(V<T> & v)
 :x(v.x)
 {}
};

template <typename T>
V<T> operator+(const V<T> & a, const V<T> & b)
{
 return V<T>(a.x + b.x);
}

int main()
{
 V<float> a(1);
 V<float> b(2);
 S<float> c( b );

 b …
Run Code Online (Sandbox Code Playgroud)

c++ templates implicit-conversion

7
推荐指数
2
解决办法
1292
查看次数

无法理解复制构造函数的来源

我有以下小代码:

template <typename T>
class V
{
    public:
        T x;

    explicit V(T & _x)
    :x(_x){}

};

int main()
{
    V<float> b(1.0f); // fails
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它碰巧失败了.g ++ 4.4.5返回的消息是:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.cpp"
../main.cpp: In function ‘int main()’:
../main.cpp:19: error: no matching function for call to ‘V<float>::V(float)’
../main.cpp:10: note: candidates are: V<T>::V(T&) [with T = float]
../main.cpp:6: note: V<float>::V(const V<float>&)

事情是......第二个构造函数来了吗?我真的不知道......

c++ templates constructor

2
推荐指数
1
解决办法
136
查看次数

标签 统计

c++ ×2

templates ×2

constructor ×1

implicit-conversion ×1