为什么下面的代码不能工作(使用VS2013)?
class Test1
{
public:
template<typename T>
using my_type = T;
};
template<typename T, typename V>
class My : public T
{
public:
using t_type = T;
using my_type2 = t_type::my_type<V>;
};
int main()
{
const My<Test1, double>::my_type2 x = 5.5
搜索我找到的站点,以便在类中获取成员的类型。在此基础上,我创建了下面的示例,该示例成功地编译。
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
class sig_class_t{
public:
int field;
};
class usig_class_t{
public:
unsigned int field;
};
template <class T, class M> M get_member_type
是否可以将类型名存储为C++变量?例如,如下所示:
type my_type = int; // or string, or Foo, or any other type
void* data = ...;
my_type* a = (my_type*) data;
我知道99.9%的时间里有一种更好的方法来做你想做的事情,而不是求助于空指针,但我很好奇C++是否允许这种事情。
对于VS 2012的简单代码,我有一个问题。我在centOS 7、Debian 8、9、Fedora 25、26、27、28和Ubuntu14.04、16.04、18.04上测试了这段代码,使用官方软件包中最新的GCC和Clang编译器,以及VS 2013、VS 2015、VS 2017。它起作用了。
以下是入罪守则的最低版本:
file0.h
namespace B {
enum bar {
HELLO,
WORLD
};
}
file1.h
namespace A {
namespace B {
// Some stuff
}
}
f
我感兴趣的是BitFields在C++中的语法约定,以及是否需要在分配的位数中考虑不同的命名方法。
union BitField32
{
struct {
unsigned int a : 1;
unsigned int b : 1;
};
unsigned int data;
};
BitField32 Flags;
vs
union BitField32
{
struct {
unsigned int a, b : 1;
};
unsigned int data;
};
BitField32 F
当使用重载函数定义编译C++时,为什么有符号整数类型和无符号整数类型之间的提升行为不同?这是预期的行为吗?
在下面的示例中,对"fail“的调用在main中是不明确的,而对"pass”的调用则不是。
unsigned int fail(unsigned int a) {
return a;
}
unsigned int fail(unsigned short a) {
return a;
}
int pass(int a) {
return a;
}
int pass(short a) {
return a;
}
int main(){
unsi
在我的程序中,我经常使用-1 (也就是UINT_MAX)作为无符号变量的值来表示一些特殊的东西。我也会与这个值进行比较。打开更高级别的警告消息会显示编译器( VS和GCC)不喜欢这种语法。
// warning C4245: 'initializing' : conversion from 'int' to 'unsigned int', signed/unsigned mismatch
unsigned a = -1;
// warning C4146: unary minus operator applied to unsigned typ
你好,对不起,这篇文章的标题太烂了,只是找不到更好的标题。
因此,我正在解决被称为NumberOfDiscIntersections的谦逊练习。该解决方案需要一些基本的排序和一些次要的算术操作。我取得了93%的成绩,只有一次考试不及格。它们提出的描述如下:
例如,对于输入1,2147483647,0,该解决方案返回一个错误的答案(get-1预期为2)。
问题可以看到。
这是我的解决方案:
typedef long long int my_type; //can't use unsigned!
#define LIMIT 10000000
//method used by qs
我正在尝试将一个项目从VS2013升级到VS2017。除了一件事外,我所有的东西都在工作--当printf被调用时,我遇到了一次崩溃。坠机情况如下:
Unhandled exception at 0x0073910C in exename.exe: An invalid parameter was passed to a function that considers invalid parameters fatal.
exename.exe!_invoke_watson(const wchar_t * expression, const wchar_t * function_name, c
下面是"C++ Primer“中的一个示例,它表明当添加unsigned int时,signed int将自动转换为unsigned int。但我得到的结果似乎是,unsigned int被抛给了signed int。有人能告诉我为什么吗?
代码:
#include <iostream>
using namespace std;
int main() {
int i = -1;
unsigned int u = 10;
cout << i + u << endl;
return 0;
}
结果:
9
在典型的顶点数组缓冲区中,我试图沿着其他经典属性(顶点、法线、纹理坐标.)传递一个无符号int属性。然而,该属性的值最终以某种方式错误:我不确定该值是错误的还是该属性根本没有设置。
从一个简单的示例开始,假设我定义了以下C++输入结构:
struct buffer_data_t
{
glm::vec3 vertex;
glm::vec3 normal;
glm::vec2 texCoords;
};
准备我的顶点数组如下所示:
// Assume this 'shader.attribute(..)' is working and returns the
C++使用哪些规则来确定涉及两种不同整数类型的算术表达式的类型?
一般来说,计算结果很容易,但是我遇到了一些有签名/没有签名的it的情况,这些情况令人困惑。
例如,下面这两个版本在VS中都是unsigned int。
unsigned int us = 0;
int s = 1;
auto result0 = us - s; // unsigned int
auto result1 = s - us; // unsigned int
其他编译器也是这样吗?是否有确定类型的具体规则?
我试图根据cakeTypes向量的重量大小对它们进行排序。但得到排序实现中的错误。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class CakeType
{
public:
const unsigned int weight_;
const unsigned int value_;
CakeType(unsigned int weight = 0, unsigned int value = 0) :
我是C++新手,我正在使用VS2010。有人可以检查下面的代码并帮助解决它吗?每次调用函数UpdateDataGrid(unsigned char CANPacket[15])时,都会在新窗口中显示以下消息,并关闭应用程序。
An unhandled exception of type 'System.ArgumentException' occurred in System.Windows.Forms.dll
Additional information: Object of type 'System.Byte' cannot be converted to
我正在用C/C++智能段臂编写VS代码。当我编译时,VS会向我显示上百个这样的警告:
Conversion from 'int' to u16_t{aka 'short unsigned int'} may change value [-Wconversion]
我不想让VSCode给我看那些警告。,但我没有编辑源代码的权限。那么,是否可以通过向c_cpp_properties.json文件中添加一些arg来禁用这些警告呢?