小编use*_*567的帖子

函数标题中的箭头运算符( - >)

我找到了这样的代码:

template <typename T, typename T1> auto compose(T a, T1 b) -> decltype(a + b) {
   return a+b;
}
Run Code Online (Sandbox Code Playgroud)

我想到了所有细节,这对我来说是新的,但只有一个.请告诉我,在哪里可以阅读,箭头操作符(->)在函数标题中的含义是什么?我纯粹从逻辑上说,那个->算子确定了一个类型,auto但是我希望得到这个,但找不到信息.

c++ decltype auto c++11

111
推荐指数
3
解决办法
3万
查看次数

在变量地址上调用delete

我为什么这样做:

int i = *(new int (5));
Run Code Online (Sandbox Code Playgroud)

i在之后成功使用,

但是当我在尝试时:

delete &i;
Run Code Online (Sandbox Code Playgroud)

我得到一个运行时错误:

Test.exe中0x5ddccaf7(msvcr100d.dll)的未处理异常:0xC00000FD:堆栈溢出.

如果i是参考:

int & i = *(new int (5));
Run Code Online (Sandbox Code Playgroud)

,所有这些(包括delete)工作正常.

我知道,将指定的内存处理程序保留在除指针之外的其他内容并不好*(new ...),但是我只是想知道,为什么new工作正常但是delete失败了.

//以下只是我猜测这种行为的原因:

是因为执行程序的模块(它可能不是"编译器",因为已经有运行时间)遇到它时delete,它会搜索一些信息,如指向的数据长度&i(在某些内部数组中有关所有指针的信息) )并没有找到它或解释一些垃圾数据作为这些信息?(我想,指针和引用都有它,但变量没有)

c++ stack-overflow runtime-error delete-operator

5
推荐指数
1
解决办法
1114
查看次数

`using` as typedef导致CS1001

怎么了?

using T = int;
Run Code Online (Sandbox Code Playgroud)

它会导致编译器错误 CS 1001 Identifier expected

c# typedef using compiler-errors

2
推荐指数
1
解决办法
85
查看次数

为什么typeof(int).ToString()不是常量?

我正在尝试这样做:

const string intType = typeof(int).ToString();
switch (typeof(MyT).ToString())
{
    case intType:
    {
        return "int";
        break;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

但编译说:

错误CS0133:分配给'intType'的表达式必须是常量

据我所知,typeof运算符在编译时工作.那么,怎么了?

c# compiler-errors typeof tostring switch-statement

2
推荐指数
1
解决办法
1819
查看次数

当我在课堂上声明一个固定长度的矢量时,我可以避免歧义吗?

我想声明一个2元素的向量作为类成员.但下一代码会生成错误:

class A {
private:
   std::vector<int> v (2);
   ...
}
Run Code Online (Sandbox Code Playgroud)

编译器curses"2"是常量.据我所知,问题是,出现歧义,因为编译器将向量声明的字符串解析为函数声明(函数,以"2"作为参数并返回int的向量).

问题:我可以避免这种歧义吗?我怎样才能做到这一点?

PS:在类之外,这个向量声明被正确解析.

c++ vector ambiguity

1
推荐指数
1
解决办法
101
查看次数

如何使用new运算符在表达式中聚合初始化STL容器?

我正在尝试做类似的事情:

using std::array;

array< array<int, 3>*, 10> arrsPtrs;

void f()
{
  arrsPtrs[0] = new array<int, 3> {1, 2, 3};         //bad!
  arrsPtrs[0] = new array<int, 3> {{1, 2, 3}};       //bad!
  arrsPtrs[0] = new array<int, 3> ( {1, 2, 3} );     //bad!
  arrsPtrs[0] = new array<int, 3> ( {{1, 2, 3}} );   //bad!
}
Run Code Online (Sandbox Code Playgroud)

是否可以在这种表达式中聚合初始化STL容器?

PS:可能很重要 - 我有VS2010.

c++ arrays stl new-operator aggregate-initialization

1
推荐指数
1
解决办法
318
查看次数

浮点数不准确会导致计算错误

我的代码解决二次方程(在游戏逻辑滴答中)来解决任务 - 找到沿着空间中可移动物体轨道的卫星刻度线偏移.我在判别(更远D)的计算中遇到了错误.我会提醒:D = b^2 - 4ac.因为它是大对象的轨道,我a,b&c是订单的数量,如:

1E+8 1E+12 1E+16

因此,b^2是关于订单的数量1E+24,4ac也是约1E+24.但是这个方程根数要少得多,因为它们只是场景上的坐标.所以根本就是1E+3 ... 1E+4.

问题(更新-具体化):因为浮浮(双打)的值的b^24ac有误差,这是足够小(相对于这些非常大的数字[测得的绝对误差大约有秩序1E+18]),但作为D==的区别其中,所以当D(从较大的值侧)到所述不准确度为(1E+18)的顺序值时,其值在范围内开始波动+1E+18 .. -1E+18(即波动范围大于实际的[-100%.. + 100%]值!

显然,这种波动会导致错误(甚至是错误的定向)嘀嗒声.我的卫星开始摇晃(这很糟糕)).

注意:当我说"何时D接近零"实际上D仍然远离零时,所以我不能只在这个值范围内将它分配给zerro.

我考虑过使用定点计算(这可以帮助我解决问题).但是,建议不要在刻度逻辑中使用(因为它们的优化程度要低得多,而且可能会非常慢).

我的问题:我怎样才能解决我的问题?对我的案子可能有一些常见的解决方案吗?非常感谢任何建议!

PS:所有公式都很好(我在excel中计算了所有结果,并且在我的代码中浮动时失败了).

PPS:我尝试双打insted的花车(不是所有的计算,但我的a,bc双打现在)的问题并没有消失.

更新:我犯了一个错误 - 命令的混乱顺序a, …

c++ floating-point calculation

1
推荐指数
1
解决办法
330
查看次数

浮点戏剧性错误(小数部分完全丢失)

quotient = 43156414f / 3;
Run Code Online (Sandbox Code Playgroud)

我在这里得到quotient== 1438547 2(完全不是真正的价值应该是: 1438547 1,333...)。它完全失去了所有小数部分!

我知道浮点计算不准确(似乎不是全部,我应该知道),但是,正如我所告知的,错误可能出现在更远的有效数字上。但这里的红利只是 8 位数字。为什么会发生如此戏剧性的错误?

可选的子问题:我应该记住哪些规则来预见未来的此类错误?

请注意:将分红类型从 float 更改为 double 可以解决此问题。

c# precision floating-accuracy

0
推荐指数
1
解决办法
64
查看次数