相关疑难解决方法(0)

201
推荐指数
6
解决办法
6万
查看次数

RAII和C++中的智能指针

在使用C++的实践中,什么是RAII,什么是智能指针,如何在程序中实现这些以及将RAII与智能指针一起使用有什么好处?

c++ smart-pointers raii

189
推荐指数
4
解决办法
6万
查看次数

使用fflush(stdin)

因此,谷歌快速搜索fflush(stdin)清除输入缓冲区会发现许多网站警告不要使用它.然而,这正是我的CS教授教授课程的原因.

使用有多糟糕fflush(stdin)?即使我的教授正在使用它并且似乎完美无缺地工作,我是否真的应该放弃使用它?

c stdin fflush

69
推荐指数
6
解决办法
4万
查看次数

编译器优化会引入错误吗?

今天我和我的一个朋友进行了讨论,我们就"编译器优化"进行了几个小时的讨论.

我辩护说,有时,编译器优化可能会引入错误或至少是不良行为.

我的朋友完全不同意,他说"编译器是由聪明人构建并做聪明的东西",因此永远不会出错.

他根本没有说服我,但我不得不承认我缺乏现实生活中的例子来强化我的观点.

谁在这?如果是的话,您是否有任何现实生活中的例子,编译器优化会在生成的软件中产生错误?如果我错了,我应该停止编程并学习钓鱼吗?

compiler-construction optimization compiler-optimization

68
推荐指数
10
解决办法
2万
查看次数

这是"*ptr ++ =*ptr + a"未定义的行为吗?

好吧,我真的不是真的需要这个答案,我只是好奇.

类似*ptr++ = a的表达式是完全有效的,因为我们操作两个对象ptr,*ptr但如果我写*ptr++ = *ptr + a它仍然有效?

例如,请考虑以下代码段:

int main(void){
   int a[] = {5,7,8,9,2};

   int* p =a;

   *p++ = 76; /*altering the first element */
   *p++ = *p + 32; /*altering the second element */    

   p = a;
   int i;
   for(i = 0;i<5; i++)
      printf("%d ",*p++);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为表达没有什么可担心的,*p++ = *p + 32;但我不确定所涉及的序列点.

c c++ sequence-points

4
推荐指数
2
解决办法
804
查看次数

C++ 11中std :: to_string的奇怪输出

我有一小段C++代码:

#include <array>
#include <string>
#include <iostream>

int main() 
{
  std::string name = "mario";
  std::cerr << "Hello world! " + name + "\n";

  std::array<float, 4> arr = {12, 12.3, 13, 14};
  std::cerr << "first item is: " + std::to_string(arr.front()) << std::endl;
  std::cerr << "last item is: " + std::to_string(arr[-1]) << std::endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它编译并输出以下内容:

work ? c++ -std=c++11 -o hello_world hello.cpp
work ? ./hello_world
Hello world! mario
first item is: 12.000000
last item is: 0.000000
Run Code Online (Sandbox Code Playgroud)

但是,如果我注释掉前两行,如:

#include <array>
#include …
Run Code Online (Sandbox Code Playgroud)

c++ tostring stdstring c++11 stdarray

-3
推荐指数
1
解决办法
163
查看次数