Questions tagged «visual-c++»

Microsoft Visual C ++是Windows的C,C ++和C ++ / CLI编译器。编译器的最新版本是Visual C ++2019。编译器支持以下语言:C(支持C90以及Visual Studio 2019中ISO C ++标准的大多数C99和C11部分);C ++(自Visual Studio 2019起支持大多数C ++ 11,C ++ 14和C ++ 17功能以及某些C ++ 20功能)C ++ / CLI(提供与C#等.NET语言的互操作性)。

6
MSVC -Wall中标准标头中的数千条警告是怎么回事?
有人似乎建议您使用-Wall,但是当我在一个只有main.cpp并包含一些包含项的小型测试项目上进行操作时,我在标准标头或Windows标头中收到5800条警告。 那是预期的行为吗?我该如何免费发布编译警告? 以下是一些阅读乐趣: 1>c:\program files\microsoft visual studio 10.0\vc\include\stdint.h(105): warning C4668: '_INTPTR' is not defined as a preprocessor macro, replacing with '0' for '#if/#elif' 1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(109): warning C4820: '_wfinddata64i32_t' : '4' bytes padding added after data member '_wfinddata64i32_t::attrib' 1>c:\program files\microsoft visual studio 10.0\vc\include\wchar.h(114): warning C4820: '_wfinddata64i32_t' : '4' …

2
/ Ox和/ O2编译器选项之间有什么区别?
Microsoft的C ++编译器(cl.exe包括在Visual Studio中)提供了几个优化开关。它们中的大多数之间的差异似乎是不言而喻的,但是我不清楚/O2(将代码优化为最大速度)与/Ox(选择“完全优化”)之间的区别。 我试着阅读文档的/Ox选项,它似乎证实,该交换机还支持优化的最高速度,而不是大小: 所述/Ox编译器选项产生在较小尺寸有利于代码的执行速度。 但特别是,“备注”部分下的以下声明引起了我的注意: 通常,请指定/O2(Maximize Speed)而不是/Ox。 所以我的问题是,为什么要一个普遍青睐/O2了/Ox?后一个选项是否启用已知的特定优化,从而导致无法预料的错误或其他意外行为?仅仅是获得的优化数量不值得额外的编译时间吗?还是由于VS中/O2的默认选项而导致的这完全是毫无意义的“推荐” ?

2
此模板代码如何获得数组的大小?
我想知道为什么这种代码可以得到测试数组的大小?我对模板中的语法不熟悉。也许有人可以解释下代码的含义template<typename,size_t>。此外,参考链接也是首选。 #define dimof(array) (sizeof(DimofSizeHelper(array))) template <typename T, size_t N> char(&DimofSizeHelper(T(&array)[N]))[N]; void InitDynCalls() { char test[20]; size_t n = dimof(test); printf("%d", n); }
61 c++  visual-c++ 

2
整数->指针转换规则
考虑下面的代码。 void f(double p) {} void f(double* p) {} int main() { f(1-1); return 0; } MSVC 2017不会对此进行编译。它表明存在一个模棱两可的重载调用,因为1-1它与相同0,因此可以转换为double*。其他技巧,例如0x0,0L或static_cast<int>(0)也不起作用。甚至声明a const int Zero = 0和调用都会f(Zero)产生相同的错误。如果Zero不是,它只能正常工作const。 似乎同一问题适用于GCC 5及以下版本,但不适用于GCC6。我很好奇这是否是C ++标准的一部分,已知的MSVC错误或编译器中的设置。粗略的Google并未产生结果。
19 c++  visual-c++  types 

1
Clang不编译代码,但是gcc和msvc编译了它
我不明白这是什么问题:在我的代码中还是在编译器中(不太可能)。有一段这样的代码: #include <iostream> #include <type_traits> #include <set> template<typename T, typename = void> struct TestA: std::false_type {}; template<typename T> struct TestA<T, std::void_t<typename T::reverse_iterator>> : std::true_type {}; template<typename T> struct TestA<T, std::void_t<typename T::dummy_iterator>> : std::true_type {}; int main() { std::cout << TestA<std::set<int>>::value; } GCC和MSVC都可以对其进行编译。我使用不同版本的GCC和MSVC 17(本地)和19在Godbolt上进行了测试。这是一个链接:https ://godbolt.org/z/Enfm6L 。 但是Clang不会编译它并发出错误: redefinition of `'TestA<T, std::void_t<typename …

1
MSVC中可能的编译器错误
以下代码使用gcc和clang(以及许多其他C ++ 11编译器)进行编译 #include <stdint.h> typedef int datatype; template <typename T> struct to_datatype {}; template <> struct to_datatype<int16_t> { static constexpr datatype value = 1; }; template <typename T> class data { public: data(datatype dt = to_datatype<T>::value) {} }; int main() { data<char> d{to_datatype<int16_t>::value}; } 使用(几乎)最新的MSVC编译时 > cl .\test.cpp /std:c++latest …
13 c++  c++11  visual-c++ 

1
在C ++ 17中初始化后可以更改内联变量吗?
我的情况如下(它在clang中起作用,但在gcc中不起作用) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp:(dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); 问题在于,内联变量在我希望28的地方显示0,因为它在运行时被修改了。MSVC对此表示不同意,但是clang做了我期望的事情。 问题是:在我的方案中,可以在运行时修改内联变量吗?(我通过取消内联变量解决了问题。)
11 c++  visual-c++  dll  clang  c++17 

3
可以将nullptr转换为uintptr_t吗?不同的编译器不同意
考虑以下程序: #include <cstdint> using my_time_t = uintptr_t; int main() { const my_time_t t = my_time_t(nullptr); } 无法使用msvc v19.24进行编译: <source>(5): error C2440: '<function-style-cast>': cannot convert from 'nullptr' to 'my_time_t' <source>(5): note: A native nullptr can only be converted to bool or, using reinterpret_cast, to an integral type <source>(5): error C2789: 't': …
10 c++  c++11  gcc  visual-c++  clang 

1
-fno-char8_t的MSVC等效项是什么?
在C ++ 20中,u8字符串文字是基于char8_t类型的。它们故意不再转换为char const*: const char* str = u8"Hall\u00f6chen \u2603"; // no longer valid in C++20 当然,迁移到C ++ 20时的最终目标是完全采用新行为(在上面的示例中:更改的类型str)。但是,由于有第三方库,因此通常无法立即实现。 引入和“补救” 的建议char8_t预期并提到在clang和gcc中有一个-fno-char8_t标志可以切换回旧的行为(同时仍然可以享受其他C ++ 20功能)。 第二个建议设置了微软将遵循并添加类似标志的期望,但是我无法找到如何设置它(至少在VS 2019版本16.4中)。 那么有人知道MSVC的含义-fno-char8_t是什么吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.