小编P45*_*ent的帖子

否定浮点数总是安全的

考虑:

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总是比较truefoo()

(上述情况不适用于int2的补码).

c c++ floating-point

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

为演员操作符使用移动语义

假设我有两个类foo,bar它们相关性很好,我的意思是它们包含公共数据成员.

operator bar() const;foo课堂上有一个演员.

我也有一个功能func,需要一个bar.

如果我func使用匿名临时调用,则将调用foo强制转换运算符.但是,由于我不需要foo,我可以声明某种移动,以便明确地优化任何不必要的副本吗?

c++

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

析构函数中"this"的有效性

在析构函数的最后一行,我有一个诊断类型消息,它采用类似printf形式:

"object destroyed at %p", this
Run Code Online (Sandbox Code Playgroud)

我担心this在这一点上如何定义.

我应该预约吗?行为定义明确吗?

c++

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

如何声明模板模板参数

假设我有两个类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>>位.这方面的一个方法是提供两个重载但是有一种方法我可以安排上面所以这是正确的吗?

c++ templates c++11

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

如果源类型和目标类型之间需要显式类型转换,如何使用 std::copy

考虑

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>)

c++

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

构造函数中抛出异常:析构函数是否被调用?

如果对象的构造函数抛出异常,那么析构函数会被调用吗?或者这是未定义的行为?(这就是为什么我不愿意说出我的编译器的作用。)

struct foo()
{
    foo(){
        throw "bar";
    }
    ~foo(){
        /*am I called*/
    }
};

foo f;
Run Code Online (Sandbox Code Playgroud)

c++

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

原子类型的大小

标准是否说sizeof(std::atomic<T>)等于sizeof(T)

(我正在调查建立原子和其他类型的联合,以便在理想情况下不应该使用STL类型的ABI中使用.如果大小相同则可以使用).

c++

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

如果我指定多个,则使用哪个`main`

除了其他几个,以下是有效的原型main():

  1. int main(void)

  2. int main(int, char**)

在C中,我们不能重载函数,因此永远不可能同时使用这两者.但在C++中并非如此.如果我在编译的C++可执行文件中同时使用哪一个,那么使用哪一个?它取决于命令行吗?标准说什么?

c++

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

如果构造函数抛出异常,是否在try-with-resources习惯用法上调用close方法?

我有一个基类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标准化的东西吗?

java try-with-resources

6
推荐指数
2
解决办法
1072
查看次数

抛出catch(...)是按值还是按引用抛出

我的老板回答了这个问题为什么......挡块中存在......(三分)?相当优雅.

但这让我想到了一些事情(希望能弥补我之前的不好问题),确实如此

catch(...){
    throw;
}
Run Code Online (Sandbox Code Playgroud)

通过(即采用深拷贝)或通过引用重新抛出捕获的异常?

c++

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

标签 统计

c++ ×9

c ×1

c++11 ×1

floating-point ×1

java ×1

templates ×1

try-with-resources ×1