相关疑难解决方法(0)

我是否正确地说const_cast后面的ref-to-const绑定到临时修改是好的?

我想检查一下我对此事的理解和结论.


在IRC上,有人问:

绑定到临时对象const_castconst引用是否可以接受?

翻译:他有一个临时的ref-to-const,他想抛弃它const来修改它.

我的回答是我之前曾问过一个类似的问题,其中的共识似乎是临时性本身并不是天生的const,因此你可以抛弃const你对它们的引用的性质,并通过结果修改它们.而且,只要原始参考const仍然存在,这不会影响临时的生命周期.

那是:

int main()
{
   const int& x = int(3);

   int& y = const_cast<int&>(x);
   y = 4;

   cout << x;
}
// Output: 4
// ^ Legal and safe
Run Code Online (Sandbox Code Playgroud)

我对吗?


(当然,这些代码是否真的是可取的完全是另一回事!)

c++ const reference const-cast temporary-objects

19
推荐指数
1
解决办法
526
查看次数

全局const字符串并且闻起来对我不好,它真的安全吗?

我正在审查一个同事的代码,我发现他在全球范围内定义了几个常量:

const string& SomeConstant = "This is some constant text";
Run Code Online (Sandbox Code Playgroud)

就个人而言,这对我来说闻起来很糟糕,因为引用是指我假设的是一个从给定的char数组构造的"匿名"对象.

从语法上讲,它是合法的(至少在VC++ 7中),它似乎运行,但实际上我宁愿让他删除&因此对它正在做什么没有歧义.

那么,这真的很安全合法吗?我很着迷吗?构造的临时对象是否具有保证的寿命?我一直认为以这种方式使用的匿名对象在使用后被破坏了......


所以我的问题也可以推广到匿名对象的生命周期.标准是否规定了匿名对象的生命周期?它是否与同一范围内的任何其他对象具有相同的生命周期?或者只给出表达式的生命周期?


此外,当它作为本地时,它显然有不同的范围:

class A
{
    string _str;

public:
    A(const string& str) :
        _str(str)
    {
        cout << "Constructing A(" << _str << ")" << endl;
    }

    ~A()
    {
        cout << "Destructing A(" << _str << ")" << endl;
    }
};

void TestFun()
{
    A("Outer");
    cout << "Hi" << endl;
}
Run Code Online (Sandbox Code Playgroud)

显示:

构建A(外部); 破坏A(外); 你好

c++ string anonymous const object

11
推荐指数
3
解决办法
1827
查看次数