当询问C中常见的未定义行为时,灵魂比我提到的严格别名规则更加开明.
他们在说什么?
restrict
是一个C99功能,它最近得到了很多关注,允许编译器对指针执行"以前只有fortran"的优化.这也是微软最近宣布的与C++ AMP规范基础相同的关键词.
该关键字实际上是在FCD中吗?如果没有,是否有特定原因被省略?
如果精度不是至关重要的话,有没有办法在速度方面改善倒数(在X上除1)?
所以,我需要计算1/X. 是否有一些解决方法,所以我失去了精度,但做得更快?
我的好奇心让我变得更好.编写代码时会发生什么(或确实发生):
char pseudo_char = 256;
Run Code Online (Sandbox Code Playgroud)
它会存储值为256的虚拟字符吗?或者这是非法的,永远不应该这样做?
执行C++20
的严格别名规则 [basic.lval] / 11任意允许下...
char*
和之间char8_t*
string str = "string";
u8string u8str { (char8_t*) &*str.data() }; // c++20 u8string
u8string u8str2 = u8"zß?"
string str2 { (char*) u8str2.data() };
Run Code Online (Sandbox Code Playgroud)
uint32_t*
,uint_least32_t*
和char32_t*
vector<uint32_t> ui32vec = { 0x007a, 0x00df, 0x6c34, 0x0001f34c };
u32string u32str { (char32_t*) &*ui32vec.data(), ui32vec.size() };
u32string u32str2 = U"zß?"
vector<uint32_t> ui32vec2 { (uint32_t*) &*u32str2.begin(),
(uint32_t*) &*u32str2.end() };
Run Code Online (Sandbox Code Playgroud)
uint16_t*
,uint_least16_t*
和char16_t*
vector<uint16_t> ui16vec = { 0x007a, …
Run Code Online (Sandbox Code Playgroud)