我正和我的老板争论这件事.他们说"是的,他们可以是不同的."
有可能是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_back
99个元素,我是否会体验内存重新分配?也许它甚至在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)是否说明了什么?