相关疑难解决方法(0)

为什么在C++中有从指针到bool的隐式类型转换?

考虑foo具有两个这样定义的构造函数的类:

class foo
{
public:
    foo(const std::string& filename) {std::cout << "ctor 1" << std::endl;}
    foo(const bool some_flag = false) {std::cout << "ctor 2" << std::endl;}
};
Run Code Online (Sandbox Code Playgroud)

使用字符串文字实例化类,并猜测调用哪个构造函数?

foo a ("/path/to/file");
Run Code Online (Sandbox Code Playgroud)

输出:

ctor 2

我不了解你,但我没有发现编程历史中最直观的行为.我打赌它有一些聪明的理由,但我想知道它可能是什么?

c++ types boolean implicit

14
推荐指数
2
解决办法
5323
查看次数

运算符<(小于)指针是否一致?

注意:这个问题与总订单无关.可以使用获得相同类型的指针的总顺序std::less.

据此,如果将两个指针指向operator<不同的分配,则不允许比较两个指针.

它在哪种意义上是不允许的?是实现定义,未指定还是未定义的行为?

我想我在某个地方看到它没有说明.不需要实现来记录行为是什么,但必须有一些行为.所以这意味着,比较任何两个指针仍然是合法的,但不一定会产生总订单.这是否意味着,当两次比较相同的两个指针时,我们仍然必须得到一致的结果?一般情况是:在应用程序中两次调用相同的未指定行为总是会产生相同的结果吗?

int i1, i2;
int* a = &i1;
int* b = &i2;
bool b1 = a < b; // unspecified, right?
bool b2 = a < b;
assert(b1 == b2); // Is this guaranteed to be true?
Run Code Online (Sandbox Code Playgroud)

c++ pointers

5
推荐指数
1
解决办法
522
查看次数

标签 统计

c++ ×2

boolean ×1

implicit ×1

pointers ×1

types ×1