相关疑难解决方法(0)

不评估应用sizeof的表达式使得在C++中取消引用sizeof内的null或无效指针是合法的吗?

首先,我已经看到了关于C99的这个问题,并且接受的答案参考操作数未在C99标准草案中评估.我不确定这个答案是否适用于C++ 03.还有一个关于C++的问题,引用了类似措辞的答案,并且在某些情况下,还会出现未评估的操作数.未评估未评估的操作数.措辞.

我有这个代码:

 int* ptr = 0;
 void* buffer = malloc( 10 * sizeof( *ptr ) );
Run Code Online (Sandbox Code Playgroud)

问题是 - 里面是否有空指针取消引用(以及UB)sizeof()

C++ 03 5.3.3/1表示sizeof运算符产生其操作数的对象表示中的字节数.操作数是表达式(未计算)或带括号的type-id.

链接到答案引用这个或类似的措辞,并使用"未评估"部分推断出没有UB.

但是,在这种情况下,我无法找到标准链接评估的确切位置与是否具有UB.

"不评估"应用sizeof的表达式使得在C++中取消引用sizeof中的null或无效指针是合法的吗?

c++ sizeof null-pointer undefined-behavior language-lawyer

13
推荐指数
2
解决办法
860
查看次数

numeric_limits 对引用类型不起作用是否有原因?

如果您错误地执行以下操作:

#include<limits>
int arr[3];
auto x  = std::numeric_limits<decltype(arr[0])>::max();
Run Code Online (Sandbox Code Playgroud)

您将从 STL 实现中的文件中获得无用的错误消息。

问题是模板参数是一个引用,所以修复是删除它:

auto x  = std::numeric_limits<std::remove_reference_t<decltype(arr[0])>>::max();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是为什么numeric_limits不知道自己做这个?我明白,你不想删除pointerness(因为maxchar指针maxchar是非常非常不同的东西),但我认为,只要你有一个参考作为参数传递给numeric_limits你非常乐意与被删除它得到的结果.

c++ templates numeric-limits

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