我正和我的老板争论这件事.他们说"是的,他们可以是不同的."
有可能是sizeof(T*) != sizeof(const T*)一种类型T?
我有一个foo可以抛出bar异常的函数.
在我调用的另一个函数中,foo但是bar如果抛出,我可以向异常添加更多细节.(foo由于该函数的通用特性,我宁愿不将这些信息作为参数传递给它,因为它并不真正属于那里.)
所以我在调用者中这样做:
try {
foo();
} catch (bar& ex){
ex.addSomeMoreInformation(...);
throw;
}
Run Code Online (Sandbox Code Playgroud)
会throw重新抛出修改过的异常还是我需要使用throw ex;?后者可能会采用有价值的副本,所以我宁愿不这样做.还会throw带一个价值副本吗?我怀疑它不会.
(我知道我可以验证,但我担心绊倒一个未指定或未定义的构造,所以想知道肯定).
假设我写
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实现之间有所不同.
这在此之前已经讨论过,但没有给出标准参考.
我有一个类foo有bar一个成员变量.
在该类的另一个成员函数中,我正在编写一个lambda函数:
[bar](void){}
Run Code Online (Sandbox Code Playgroud)
但我不能列入bar捕获列表.这是为什么?
假设我有foo一个人口稠密的std::vector<double>.
我需要对这个向量的元素进行操作.我有动力写作
for (auto it : foo){
/*ToDo - Operate on 'it'*/
}
Run Code Online (Sandbox Code Playgroud)
但似乎这不会回写,foo因为它it是一个值类型:已经采用了向量元素的深层副本.
我可以提供一些指导auto来制作it参考类型吗?然后我可以直接操作it.
我怀疑我错过了一些简单的语法.
[有一些问题,但没有一个答案特别明确,有些问题与当前的C++标准已经过时了].
我的研究表明,这些是用于检查浮点值是否可以转换为整数类型的主要方法T.
if (f >= std::numeric_limits<T>::min() && f <= std::numeric_limits<T>::max() && f == (T)f))
使用std::fmod以提取剩余时间和测试平等为0.
使用std::remainder和测试相等为0.
第一个测试假定定义f了一个T实例的强制转换.不是真实std::int64_t到float,例如.
使用C++ 11,哪一个最好?有没有更好的办法?
考虑
String foo = s.toString();
Run Code Online (Sandbox Code Playgroud)
对于非null java.lang.String实例s.
这是定义为自己返回,还是由特定的Java实现决定?出于兴趣是一个"深刻的副本"采取?
检查我的JDK源代码确认s已返回,但JLS是否坚持这一点?我已经被认为toString()是一种任意的序列化,也许是对象的代表,但不一定如此.例如,完全合理(至少在我看来)实现可以用引号字符包围字符串.
考虑
#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&。我忘记了什么?
我正在构建一个lambda函数,需要在上下文中访问相当数量的变量.
const double defaultAmount = [&]{
/*ToDo*/
}();
Run Code Online (Sandbox Code Playgroud)
我宁愿不在[=]列表中使用,因为我不想要制作很多有价值的副本.
如果我使用,我担心程序稳定性,[&]因为我不希望lambda修改捕获集.
我可以通过const引用吗?[const &]不起作用.
也许一个好的编译器可以优化值副本,因此[=]更可取.
假设我有一个返回a的函数std::string.某些情况意味着字符串没有填充任何内容.
返回std::string()完全等同于std::string("")?例如,将c_str()或data()给你同样的字符序列?也许std::string("")调用一个简短的字符串优化,但std::string()在添加一些字符之前不会这样做.
有谁知道当前的标准(C++ 11)是否说明了什么?