小编P45*_*ent的帖子

可能是sizeof(T*)!= sizeof(const T*)的情况?

我正和我的老板争论这件事.他们说"是的,他们可以是不同的."

有可能是sizeof(T*) != sizeof(const T*)一种类型T

c++ language-lawyer

67
推荐指数
3
解决办法
3316
查看次数

在修改后的异常上使用`throw;`

我有一个foo可以抛出bar异常的函数.

在我调用的另一个函数中,foo但是bar如果抛出,我可以向异常添加更多细节.(foo由于该函数的通用特性,我宁愿不将这些信息作为参数传递给它,因为它并不真正属于那里.)

所以我在调用者中这样做:

try {
    foo();
} catch (bar& ex){
    ex.addSomeMoreInformation(...);
    throw;
}
Run Code Online (Sandbox Code Playgroud)

throw重新抛出修改过的异常还是我需要使用throw ex;?后者可能会采用有价值的副本,所以我宁愿不这样做.还会throw带一个价值副本吗?我怀疑它不会.

(我知道我可以验证,但我担心绊倒一个未指定或未定义的构造,所以想知道肯定).

c++ exception-handling exception throw language-lawyer

57
推荐指数
2
解决办法
2765
查看次数

向量分配是否使"储备"无效?

假设我写

std::vector<T> littleVector(1);
std::vector<T> bigVector;

bigVector.reserve(100);
bigVector = littleVector;
Run Code Online (Sandbox Code Playgroud)

标准是否bigVector仍然会保留100个元素?或者,如果我要使用push_back99个元素,我是否会体验内存重新分配?也许它甚至在STL实现之间有所不同.

这在此之前已经讨论过,但没有给出标准参考.

c++ language-lawyer

35
推荐指数
3
解决办法
1370
查看次数

为什么数据成员不能在lambda捕获列表中

我有一个类foobar一个成员变量.

在该类的另一个成员函数中,我正在编写一个lambda函数:

[bar](void){}
Run Code Online (Sandbox Code Playgroud)

但我不能列入bar捕获列表.这是为什么?

c++ lambda c++11

32
推荐指数
2
解决办法
5051
查看次数

强制auto成为循环范围内的引用类型

假设我有foo一个人口稠密的std::vector<double>.

我需要对这个向量的元素进行操作.我有动力写作

for (auto it : foo){
   /*ToDo - Operate on 'it'*/
}
Run Code Online (Sandbox Code Playgroud)

但似乎这不会回写,foo因为它it是一个值类型:已经采用了向量元素的深层副本.

我可以提供一些指导auto来制作it参考类型吗?然后我可以直接操作it.

我怀疑我错过了一些简单的语法.

c++ for-loop range auto c++11

22
推荐指数
4
解决办法
1700
查看次数

检查浮点是否为整数的最佳方法

[有一些问题,但没有一个答案特别明确,有些问题与当前的C++标准已经过时了].

我的研究表明,这些是用于检查浮点值是否可以转换为整数类型的主要方法T.

  1. if (f >= std::numeric_limits<T>::min() && f <= std::numeric_limits<T>::max() && f == (T)f))

  2. 使用std::fmod以提取剩余时间和测试平等为0.

  3. 使用std::remainder和测试相等为0.

第一个测试假定定义f了一个T实例的强制转换.不是真实std::int64_tfloat,例如.

使用C++ 11,哪一个最好?有没有更好的办法?

c++ floating-point c++11 floating-point-conversion

22
推荐指数
2
解决办法
3699
查看次数

是toString()定义为java.lang.String返回这个?

考虑

String foo = s.toString();
Run Code Online (Sandbox Code Playgroud)

对于非null java.lang.String实例s.

这是定义为自己返回,还是由特定的Java实现决定?出于兴趣是一个"深刻的副本"采取?

检查我的JDK源代码确认s已返回,但JLS是否坚持这一点?我已经被认为toString()是一种任意的序列化,也许是对象的代表,但不一定如此.例如,完全合理(至少在我看来)实现可以用引号字符包围字符串.

java language-lawyer

22
推荐指数
3
解决办法
1876
查看次数

为什么匿名临时异常可以绑定到捕获站点处的引用?

考虑

#include <iostream>

struct Foo{};

int main(){
    try {
        throw Foo();
    } catch (Foo& e){
        std::cout << "Caught";
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是Caught,但是为什么呢?我本以为catch应该如此const Foo&。我忘记了什么?

c++ language-lawyer

18
推荐指数
2
解决办法
501
查看次数

通过lambda捕获列表中的常量引用传递

我正在构建一个lambda函数,需要在上下文中访问相当数量的变量.

const double defaultAmount = [&]{
    /*ToDo*/
}();
Run Code Online (Sandbox Code Playgroud)

我宁愿不在[=]列表中使用,因为我不想要制作很多有价值的副本.

如果我使用,我担心程序稳定性,[&]因为我不希望lambda修改捕获集.

我可以通过const引用吗?[const &]不起作用.

也许一个好的编译器可以优化值副本,因此[=]更可取.

c++ lambda c++11

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

std :: string()与std :: string("")相同

假设我有一个返回a的函数std::string.某些情况意味着字符串没有填充任何内容.

返回std::string()完全等同于std::string("")?例如,将c_str()data()给你同样的字符序列?也许std::string("")调用一个简短的字符串优化,但std::string()在添加一些字符之前不会这样做.

有谁知道当前的标准(C++ 11)是否说明了什么?

c++ c++11

13
推荐指数
2
解决办法
891
查看次数