考虑:
double f = foo();
double g = -f;
Run Code Online (Sandbox Code Playgroud)
哪里foo()可以返回任何分配给的东西f.
double g = -f;在C和C++中是安全的吗?对于IEEE 754类型,显然是C和C++不限制浮点实现(与Java不同).
如果它是安全的,那么就-g总是比较true有foo()?
(上述情况不适用于int2的补码).
假设我有两个类foo,bar它们相关性很好,我的意思是它们包含公共数据成员.
我operator bar() const;在foo课堂上有一个演员.
我也有一个功能func,需要一个bar.
如果我func使用匿名临时调用,则将调用foo强制转换运算符.但是,由于我不需要foo,我可以声明某种移动,以便明确地优化任何不必要的副本吗?
在析构函数的最后一行,我有一个诊断类型消息,它采用类似printf形式:
"object destroyed at %p", this
Run Code Online (Sandbox Code Playgroud)
我担心this在这一点上如何定义.
我应该预约吗?行为定义明确吗?
假设我有两个类Foo1<T>和Foo2<T>.
然后我想创建一个bar引用a std::vector<Foo1<T>>或a的函数std::vector<Foo2<T>>但总是返回一个std::vector<Foo1<T>>:
template<class T, class Y> std::vector<Foo1<T>> bar(std::vector<Y<T>>&)
可悲的是,编译器不喜欢这个<Y<T>>位.这方面的一个方法是提供两个重载但是有一种方法我可以安排上面所以这是正确的吗?
考虑
struct foo{};
struct bar{
bar(const foo& f){}
};
Run Code Online (Sandbox Code Playgroud)
想象我有一个
std::vector<foo> vec;
Run Code Online (Sandbox Code Playgroud)
我想将其转换为std::vector<bar> out. 我可以用
std::copy(vec.begin(), vec.end(), std::back_inserter(out));
Run Code Online (Sandbox Code Playgroud)
这样做既然bar不是explicit。然而,我必须bar如此explicit!但随后就back_inserter不再起作用了。我需要对参数进行哪些更改才能std::copy以某种方式包含显式内容bar(<iteratee>)?
如果对象的构造函数抛出异常,那么析构函数会被调用吗?或者这是未定义的行为?(这就是为什么我不愿意说出我的编译器的作用。)
struct foo()
{
foo(){
throw "bar";
}
~foo(){
/*am I called*/
}
};
foo f;
Run Code Online (Sandbox Code Playgroud) 标准是否说sizeof(std::atomic<T>)等于sizeof(T)?
(我正在调查建立原子和其他类型的联合,以便在理想情况下不应该使用STL类型的ABI中使用.如果大小相同则可以使用).
除了其他几个,以下是有效的原型main():
int main(void)
int main(int, char**)
在C中,我们不能重载函数,因此永远不可能同时使用这两者.但在C++中并非如此.如果我在编译的C++可执行文件中同时使用哪一个,那么使用哪一个?它取决于命令行吗?标准说什么?
我有一个基类Base和一个Child扩展它的子类.Base实施java.lang.AutoCloseable.
让我们假设构造函数Child抛出一个Foo.
现在考虑
try (Base c = new Child()){
/*Some code*/
} catch (final Foo e){
/*Some more code*/
}
Run Code Online (Sandbox Code Playgroud)
Base#close如果抛出异常,是否调用该方法?它不在我的机器上,但这是JLS标准化的东西吗?
我的老板回答了这个问题为什么......挡块中存在......(三分)?相当优雅.
但这让我想到了一些事情(希望能弥补我之前的不好问题),确实如此
catch(...){
throw;
}
Run Code Online (Sandbox Code Playgroud)
通过值(即采用深拷贝)或通过引用重新抛出捕获的异常?