【发布时间】:2019-03-28 14:08:19
【问题描述】:
我有一些疑问,我在 C++ 中编写了一些代码(用于接收裸指针),如下所示:
template< typename T >
auto unwrap_ptr(T smart_ptr){
//if it some class wich store pointer
//receive this pointer with method get()
return smart_ptr.get();
}
template< typename T >
auto unwrap_ptr(T *nake_ptr){
//if it naked(simple) pointer return this pointer
return nake_ptr;
}
如果它的函数使用裸指针,它会返回这个指针,否则它会从 get() 方法返回 ptr。 并且在我的脑海中检查它之后出现了疑问。在我的机器和编译器中它可以工作,但是其他编译器呢?这种情况标准怎么说?是UB吗?如果我放入函数裸指针,在某些情况下会调用第一个函数吗?第二个小问题(很抱歉他们在一个地方)这里会是什么
template< typename T >
bool same_type(T x, T y) {
//if x and y same type(class) return true
return true;
}
template< typename X, typename Y >
bool same_type(X x, Y y) {
//if x and y different type(class) return false
return false;
}
它会按照我的想法工作,或者在某些情况下它会是危险代码?
【问题讨论】:
-
至少肯定不是UB。 UB 不是这样的……
-
每个问题一个问题!
-
@L.F.你在关注吗? :)
-
@Rakete1111 我认为这更多的是编译时问题:P
-
题外话:C++20 引入了
std::to_address,这可能很有趣。
标签: c++ visual-c++ c++17