visual-c++ 相关问题

Microsoft Visual C ++是Windows的C,C ++和C ++ / CLI编译器。最新版本的编译器是Visual C ++ 2017.编译器支持以下语言:C:支持C90和ISO C ++标准的大部分C99和C11部分,自Visual Studio 2017 C ++开始:支持大多数C ++ 11功能以及Visual Studio 2017 C ++ / CLI中的一些C ++ 14和C ++ 17功能

寻找从 C++ Windows 程序获取所有类/结构的列表的方法

我正在调试一些可疑的内存泄漏问题,我在 Windbg 堆统计信息中看到大量特定大小的分配。 传统上 - 为了找到分配的来源,我使用了 Gflags,

回答 1 投票 0

C++ 打印到文件 Bug:报告每个时间步错误?

我正在尝试将我的 C++ 程序结果存储到文本文件中,但我只存储了最后一个命令。请任何人帮助我。我能够获得文本文件的输出,但不能获得整个步骤的结果...

回答 1 投票 0

MSVC++ 警告标志的 Wextra 替代方案

使用 gcc 和 clang,我通常使用 -Wall -Wextra 警告标志。 Visual C++ 2010(以及更新版本,如果存在差异)的哪些命令行开关会产生大约相同的结果? 这个 MSDN 做...

回答 1 投票 0

mdspan 运算符 [] 无法在 Visual Studio 中编译

https://godbolt.org/z/f4dc83fr3 std::向量 v{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 自动 ms2 = std::mdspan(v.data(), 2, 6); ms2[0, 0] = 3; 错误 C2676:二进制 '[': 'std::mdspan<_Ty,std::ext...

回答 1 投票 0

如何在 Visual C++ 中小写环境变量?

是否可以从 Visual C++ 项目设置中小写环境变量,例如$(TargetName)、$(ConfigurationName) 等,无需将它们指定为新的环境变量。我愿意

回答 2 投票 0

使用 cmake 从 GIT 源编译 libcurl 示例示例后无法运行

我从 GIT 链接(https://github.com/curl/curl)下载了源代码并使用 cmake GUI 构建它 它确实显示了 ZLIB、LibPSL、LibSSH2 的问题,但我无法解决。 我确实得到了

回答 1 投票 0

Windows - 无法安装 MS Visual C++ Redistributable

我想安装包括 Visual Studio 在内的软件,但是有问题 - Visual C++ 组件无法正确安装,出现错误。 我做了什么: 我运行了 MS 的卸载程序工具 http...

回答 1 投票 0

C# 检查 .NET Framework 和 MS Visual C++ Redist 的安装版本

如何检查运行我的应用程序的计算机上是否安装了 .NET 4.5+ 和 MS Visual C++ Redist 2013/2015/2017?

回答 2 投票 0

在循环迭代之间消耗整个缓存线有什么特别的好处吗?

我的程序添加了浮点数组,并在通过 MSVC 和 G++ 进行最大优化编译时展开 4 倍。我不明白为什么两个编译器都选择展开 4x,所以我做了一些测试,发现只有

回答 1 投票 0

组合框不显示数据项

我一直在尝试在设计时通过为此组合框的 Data 属性设置以分号分隔的字符串,在我的 mfc 项目的 DialogWindow 中为我的组合框添加数据项。 但我...

回答 2 投票 0

SFINAE 工作正常,但概念约束在类模板实例化中进行了模糊的推论

我正在编写一个曲线类,它可以采用算术类型或算术数组类型作为模板参数。 对于算术数组曲线,本身需要一个包含算术c的数组成员...

回答 1 投票 0

在CDialog中关闭滚动条后如何停止有白色背景?

我的对话框(在资源编辑器中)已打开调整大小和最大化/最小化。 但是,如果我发现我不需要此功能,因为它们的显示屏尺寸足够大,我想切换

回答 1 投票 0

访问 Visual C++ mdspan 实现中的元素

我一直在屏息等待微软发布他们的 C++23 std::mdspan 实现。它今天在 V19 Preview 1 中发布。我正在尝试尝试,但似乎不起作用。他...

回答 1 投票 0

如何使用 TokenizeBoost 库对 CSV 文件进行标记?

我在将任何字符串从 CSV 转换为字符串(但不是字符字符串)然后对其进行标记化时遇到问题。 这里有我的代码: #包括 #包括 #包括“

回答 1 投票 0

为什么这个运算符重载可以在 MSVC 和 GCC 中编译,但不能在 Clang 中编译?

我正在尝试创建一个strong_alias包装类型,它可以与原始类型互换,但不能与其他strong_alias互换。 #包括 #包括 模板 我正在尝试创建一个 strong_alias 包装类型,它可以与原始类型互换,但不能与其他 strong_aliases 互换。 #include <array> #include <stdint.h> template <typename T, typename tag> requires std::is_arithmetic<T>::value class strong_alias { public: using type = T; constexpr strong_alias() : _value{} { } template <typename other> requires std::is_arithmetic<other>::value constexpr strong_alias(const other &set_value) : _value{T(set_value)} { } constexpr T &value() { return _value; } constexpr const T &value() const { return _value; } template <typename other> requires std::is_arithmetic<other>::value constexpr operator other() const { return other(value()); } constexpr bool operator==(const strong_alias &rhs) const { return value() == rhs.value(); } constexpr strong_alias operator*(const strong_alias &rhs) const { return value() * rhs.value(); } private: T _value; }; using A = strong_alias<int8_t, struct A_tag>; static_assert(std::is_assignable<A, A>()); static_assert(std::is_assignable<A, int>()); static_assert(std::is_assignable<int &, A>()); using B = strong_alias<int8_t, struct B_tag>; static_assert(not std::is_assignable<A, B>()); static_assert(not std::is_assignable<B, A>()); static_assert(A(-3) == A(3) * -1); // builds with MSVC and GCC but not Clang int main() { } 上面的代码可以使用 MSVC (/std:c++latest) 和 GCC (-std=c++2c) 进行编译,但不能使用 Clang (-std=c++2c) 进行编译。 这里有编译器资源管理器演示。 哪些编译器能够正确处理这段代码?在 Clang 下使其工作的首选方法是什么? Compiler Explorer 的 Clang 输出: <source>:61:29: error: use of overloaded operator '*' is ambiguous (with operand types 'A' (aka 'strong_alias<signed char, A_tag>') and 'int') 61 | static_assert(A(-3) == A(3) * -1); // builds with MSVC and GCC but not Clang | ~~~~ ^ ~~ <source>:43:25: note: candidate function 43 | constexpr strong_alias operator*(const strong_alias &rhs) const | ^ <source>:61:29: note: built-in candidate operator*(float, int) 61 | static_assert(A(-3) == A(3) * -1); // builds with MSVC and GCC but not Clang | ^ <source>:61:29: note: built-in candidate operator*(double, int) <source>:61:29: note: built-in candidate operator*(long double, int) <source>:61:29: note: built-in candidate operator*(int, int) [...many lines omitted...] <source>:61:29: note: built-in candidate operator*(unsigned long long, unsigned long) <source>:61:29: note: built-in candidate operator*(unsigned long long, unsigned long long) <source>:61:29: note: built-in candidate operator*(unsigned long long, unsigned __int128) 1 error generated. Compiler returned: 1 首先,我们应该在重现问题的同时尽可能地简化代码。令人失望的是,OP 似乎没有做出任何尝试这样做。这是最小化版本: #include <type_traits> struct A { A(int set_value) : _value{set_value} { } template <typename other> requires std::is_arithmetic<other>::value operator other() const { return other(_value); } A operator*(const A &rhs) const { return _value * rhs._value; } int _value = 0; }; int main() { (void)(A(3) * -1); } 现在,这个*可以有几种不同的解释方式。它可以是 A::operator*,可通过第二个操作数从 int 到 A 的隐式转换来调用,也可以是内置算术 operator*,可通过第一个操作数的隐式转换来调用操作数从 A 到算术类型(可能第二个操作数也经历到不同算术类型的隐式转换)。 Clang 可以帮助打印出所有候选人。 之所以不明确,是因为当调用operator*时,我们得到了与第一个参数类型的精确匹配以及与第二个参数类型的用户定义转换。当调用内置的 operator*(int, int) 时,我们得到一个用户定义的转换,其第一个参数类型与第二个参数类型完全匹配。所以这两个候选人都不比另一个更好。 叮当是正确的。至于如何编译原始代码,由于问题是由两个候选代码引起的,每个候选代码都可以通过不同的隐式转换实现,因此您的选择基本上是: 提供比所有当前现有候选更好的您自己的重载,例如,一个 operator*,其第一个参数类型为 const strong_alias&,第二个参数类型为算术类型,或者 将 A 的转换构造函数更改为显式,或者 将转换函数 (A::operator other) 更改为显式,或者 以上任意组合 我无法告诉您哪个选项最适合您。这取决于您希望您的类型提供的 API。 GCC 和 MSVC 之所以不认为它含糊不清,可能与他们使用不同的算法来确定哪些内置运算符是候选者有关。在这种特殊情况下,他们只是给出了错误的答案,但更普遍的是,该标准没有就如何在其他可能涉及无限的初始候选者的情况下缩小一组相关内置候选者的范围提供足够的指导。请参阅CWG2844。

回答 1 投票 0

如果在 Windows DLL 加载期间调用 `to_string( std::stacktrace::current() )` 为什么会挂起

我使用 Visual Studio 2022 版本 17.9.2,在应用程序的异常处理程序中,我开始使用新的 C++23 功能 to_string( std::stacktrace::current() ) 记录调用堆栈。一般来说,它...

回答 1 投票 0

我可以通过 VISUAL C++ 使用所有 C++ 功能吗?

我无法找到使用 C# .net 获取 WiFi 信息(例如 RSSI 和 SSID)的方法。 C++ 可以访问本机 WiFi API。 如果我选择使用 VISUAL C++ 而不是其他编译器,我只有

回答 2 投票 0

使用 #pragma pack 时仍然会发生结构体的 C++ 填充

我正在尝试使用 C++ 结构实现 24 位整数数据类型。我希望它的大小为 24 位/3 字节——而不是填充到 4 字节 int 中。我正在使用 Visual Studio Community 2019 的编译器。 ...

回答 1 投票 0

为什么将 int 转换为 bool 会发出警告?

使用 static_cast 将 int 转换为 bool 是不是应该可以,因为它是隐式转换的逆向转换?但我仍然收到警告。 例子: MSVC++8 布尔位 = static_cast(100);

回答 4 投票 0

何时 bool 不是 bool(编译器警告 C4800)

考虑在 MS Visual Studio 2005(也可能是其他版本)中编译: CPoint点1( 1, 2 ); 点点2( 3, 4 ); const bool point1And2Identical( point1 == point2 ); // C4800 w...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.