MSVC 19.31.31106.2在使用(和 C++17,据我了解特征页,对齐应该不再是问题)在发布模式下编译时,我遇到了以下问题,我segfault从std::sort. 使用的是官方发布的Eigen 3.4版本。
设置了以下编译器标志:
/errorReport:prompt /WX /Zc:forScope /GR /arch:AVX2 /Gd /MD /std:c++17 /GS /W4 /wd"4389" /wd"4996" /wd"4244" /wd"4324" /wd"4127" /Zc:wchar_t /EHsc /nologo /Gm- /O2 /Ob2 /Zc:inline /fp:precise /D "_MBCS" /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_CRT_SECURE_NO_WARNINGS"
Run Code Online (Sandbox Code Playgroud)
所以我有以下结构:
/errorReport:prompt /WX /Zc:forScope /GR /arch:AVX2 /Gd /MD /std:c++17 /GS /W4 /wd"4389" /wd"4996" /wd"4244" /wd"4324" /wd"4127" /Zc:wchar_t /EHsc /nologo /Gm- /O2 /Ob2 /Zc:inline /fp:precise /D "_MBCS" /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_CRT_SECURE_NO_WARNINGS" …Run Code Online (Sandbox Code Playgroud) 我有一个存储不同类型变量(字符串,双精度,整数等)的字典,它们存储为对象.
我有一个通用的Set方法和一个通用的get方法.
private static Dictionary<int, object> dict = new Dictionary<int, object>();
public static void Set<T>(int key, object value)
{
dict.Add(key, (T)value);
}
public static T Get<T>(int key)
{
dict.TryGetValue(key, out object value);
return (T)value;
}
static void Main(string[] args)
{
Set<int>(1, 100);
Get<double>(1);
}
Run Code Online (Sandbox Code Playgroud)
在Main我试图将变量100保存为整数,这是有效的,它被存储在字典中"作为对象".现在,当尝试获取变量,将其转换为double时,抛出IllegalCastException,但为什么呢?可以使用从对象到double的显式转换,以及从int到double的显式转换.