我曾经认为'typedef'不会自动继承.但下面的代码表示不同的东西.
#include <iostream>
#include <type_traits>
struct A
{
typedef int X;
};
struct A_
{
typedef char X;
};
struct B : A {};
struct B_ : A, A_ {};
template< typename ... Ts >
using void_t = void;
template< typename T, typename = void >
struct has_typedef_X : std::false_type {};
template< typename T >
struct has_typedef_X< T, void_t<typename T::X> > : std::true_type {};
int main()
{
std::cout << std::boolalpha;
std::cout << has_typedef_X<A>::value << std::endl;
std::cout << has_typedef_X<A_>::value << std::endl; …Run Code Online (Sandbox Code Playgroud) 看看代码吹响:
#include <complex>
#include <iostream>
int main()
{
std::cout << std::pow( std::complex<double>(0,0), std::complex<double>(0,0) ) << "\n";
std::cout << std::pow( std::complex<double>(0,0), double(0) ) << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g ++(4.8.1)给出了输出
(nan,nan)
(-nan,-nan)
Run Code Online (Sandbox Code Playgroud)
而clang ++(3.3)给出了一个输出
(-nan,-nan)
(-nan,-nan)
Run Code Online (Sandbox Code Playgroud)
但我期待(1.0,0.0).
任何人都可以解释一下吗?
有他们的名单吗?当我想在我的 python 代码中替换{inspect.stack()[0][3]}to时遇到了麻烦{inspect.stack()[0][3]} called from {inspect.stack()[1][3]}。而且我无法从互联网上找到完整列表。