相关疑难解决方法(0)

比较悬空指针是否合法?

比较悬空指针是否合法?

int *p, *q;
{
    int a;
    p = &a;
}
{
    int b;
    q = &b;
}
std::cout << (p == q) << '\n';
Run Code Online (Sandbox Code Playgroud)

注意如何既pq点有对象已经消失了.这合法吗?

c++ pointers language-lawyer dangling-pointer

70
推荐指数
1
解决办法
2392
查看次数

临时C++的生命周期 - 这样安全吗?

如果我理解的临时的寿命正确的规则,因为临时的寿命这段代码应该是安全的stringstreammake_string()持续,直到完全表达的结束.我不是100%有信心这里没有一个微妙的问题,任何人都可以确认这种使用模式是否安全吗?它似乎在clang和gcc中运行良好.

#include <iomanip>
#include <iostream>
#include <sstream>

using namespace std;

ostringstream& make_string_impl(ostringstream&& s) { return s; }

template<typename T, typename... Ts>
ostringstream& make_string_impl(ostringstream&& s, T&& t, Ts&&... ts) {
    s << t;
    return make_string_impl(std::move(s), std::forward<Ts>(ts)...);
}

template<typename... Ts>
string make_string(Ts&&... ts) {
    return make_string_impl(ostringstream{}, std::forward<Ts>(ts)...).str();
}

int main() {
    cout << make_string("Hello, ", 5, " World!", '\n', 10.0, "\n0x", hex, 15, "\n");
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11

11
推荐指数
1
解决办法
348
查看次数

强制 C++ 为参数分配新地址

似乎当我将不同的整数直接传递给函数时,C++ 会为它们分配相同的地址,而不是将不同的地址分配给不同的值。这是设计使然,还是可以关闭的优化?有关说明,请参阅下面的代码。

#include <iostream>

const int *funct(const int &x) { return &x; }

int main() {

  int a = 3, b = 4;
  // different addresses
  std::cout << funct(a) << std::endl;
  std::cout << funct(b) << std::endl;

  // same address
  std::cout << funct(3) << std::endl;
  std::cout << funct(4) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这个问题的更大背景是,我正在尝试构建一个指向整数的指针列表,我将逐一添加(类似于funct(3))。由于我无法修改方法定义(类似于funct's),我想存储每个参数的地址,但它们最终都具有相同的地址。

c++ pointers reference pass-by-reference c++11

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