我知道引用是语法糖,因此代码更容易读写.
但有什么区别?
以下答案和链接摘要:
NULL),而引用总是指对象.&obj + 5).澄清一个误解:
C++标准非常谨慎,以避免规定编译器如何实现引用,但每个C++编译器都将引用实现为指针.也就是说,声明如下:
Run Code Online (Sandbox Code Playgroud)int &ri = i;如果它没有完全优化,则分配与指针相同的存储量,并将地址
i放入该存储中.
因此,指针和引用都使用相同数量的内存.
作为基本规则,
有趣的读物:
这是我的问题,问题出在评论中
const int a = 5;
const_cast<int&>(a)=7; //throw over const attribute in a,and assign to 7
std::cout<<a<<std::endl; //why still out put 5!!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)
谁可以告诉我为什么,有些书籍会考虑这些问题来推荐?谢谢!
如果添加任一注释行,以下程序是否具有 UB?
#include<atomic>
#include<iostream>
#include<thread>
std::atomic<bool> a = false;
struct T {
int i;
void reset() { i = 0; }
~T() {
while(!a);
//reset();
a = false;
while(!a);
}
};
int main() {
std::thread x;
{
const T t{42};
x = std::thread([&t]{
std::cout << t.i << "\n";
a = true;
while(a);
//const_cast<T&>(t).reset();
//const_cast<int&>(t.i) = 0;
std::cout << t.i << "\n";
a = true;
});
}
x.join();
}
Run Code Online (Sandbox Code Playgroud)
GCC 打印42后跟0,而 Clang 打印42两次:https://godbolt.org/z/j544rq3cx
如果 …
该代码在GCC 8中编译,但不在GCC 7和clang中编译。
constexpr int a = 1;
constexpr int b = --const_cast<int&>(a);
Run Code Online (Sandbox Code Playgroud)
这显然是UB。
我的问题:Standardese对评估包含UB的constexpr有什么看法-此代码应该完全编译吗?