鍍金池/ 問(wèn)答/ C++問(wèn)答
使勁操 回答

1+2+3+。。。+10000000000,這個(gè)算式的結(jié)果是5.0000000005E+19,太大了,已經(jīng)超了int型的范圍了。
如果只是測(cè)加法的時(shí)間,推薦用循環(huán)嵌套,類(lèi)似這樣

for (int i = 0; i < 1000000; i++) {
    n = 0;
    for (int j = 0; j < 10000; j++) {
        n += j;
    }
}
吢涼 回答

new是再堆上開(kāi)內(nèi)存,除非整個(gè)進(jìn)程結(jié)束,這時(shí)候會(huì)被操作系統(tǒng)回收,不然的話(huà)函數(shù)結(jié)束后內(nèi)存里的變量還在的

硬扛 回答

可能是因?yàn)槟愕哪夸浿杏锌崭駥?dǎo)致命令行參數(shù)出錯(cuò)。建議把代碼放到別的目錄下。比如D:projectsprotobuf下面編譯。

你好胸 回答
#include <cstdio>
int add()
{
  int a=2;
  int b=3;
  int c=a+b;
  return c;
}

int main()
{
  int *p;
  int i = add();
  p=&i;
  *p=20;
  printf("%d", *p);
  fflush(stdout);
  return 0;
}

報(bào)錯(cuò)信息很明顯了, c++不允許從int轉(zhuǎn)為int*.
好好份書(shū)或者教程看看吧...

巴扎嘿 回答

恭喜你, 遇到了一個(gè)編譯器的bug
這是gcc以前的一個(gè)bug: https://gcc.gnu.org/bugzilla/...
可能5.0以后才修好了.
clang也有類(lèi)似的bug: https://bugs.llvm.org/show_bu... 里面的解釋值得一讀, 我節(jié)選下:

template<typename T> T end(T);

template <typename T>
void Foo() {
  T it1;
  if (it1->end < it1->end) {
  }
}

Foo() is trying to use a public member variable of "*it1". Because there's a global template with the same name, it interprets the subsequent '<' as starting a template instantiation, and then finds trouble many tokens later when there's no matching '>'.

  1. possible fixit is to add parentheses around "it1->end".
巷尾 回答

知道了,數(shù)組越界了= =,主函數(shù)里面maxHeap = new long long[N]改為maxHeap = new long long[N + 1]。因?yàn)槭菑南聵?biāo)為1開(kāi)始建立的。

胭脂淚 回答

Element.innerHTML = html

這樣才會(huì)把字符串解析為HTML

陌如玉 回答

就算加了幾個(gè)字段,但是首字母和index對(duì)應(yīng)關(guān)系還是沒(méi)變! 還是不需要散列函數(shù)呀?

同樣的程序,mac未拋出異常,正常執(zhí)行3分鐘收到數(shù)據(jù)
https://docs.python.org/2.7/l...
看看你客戶(hù)端的timeout默認(rèn)是None么,可能版本不同
python 2.7.10

葬憶 回答

簡(jiǎn)單說(shuō)下吧,有時(shí)間再來(lái)補(bǔ)上。
以下結(jié)果基于gcc5.4

#include <stdio.h>

int main(void)
{
    float a,b;
    b = 2.0e20 + 1.0;
    a = b - 2.0e20;
    printf("%f\n", a);
}
---
4008175468544.000000

如果把1.0 換成1e2, 1e3...1e13,得到的結(jié)果都是一樣的。

精度問(wèn)題

float使用23位存尾數(shù)的,注意這23位存的是01串,是二進(jìn)制的尾數(shù)。
由于2^23 = 8388608(只是簡(jiǎn)單計(jì)算,去看IEEE754知道還隱含了一個(gè)1),所以存儲(chǔ)十進(jìn)制的小數(shù)小數(shù)點(diǎn)后精度也就6、7位。

計(jì)算

浮點(diǎn)數(shù)的計(jì)算,見(jiàn)維基百科這里
可知,浮點(diǎn)數(shù)計(jì)算需要把指數(shù)統(tǒng)一然后計(jì)算,那么問(wèn)題來(lái)了,無(wú)論是1.0統(tǒng)一到2.0e20還是2,0e20統(tǒng)一到1.0,尾數(shù)的精度都超過(guò)了上面的精度,所以就有了這種奇怪的結(jié)果。

這個(gè)奇怪結(jié)果的產(chǎn)生和類(lèi)型也有關(guān)系,1.02.0e20都是double型,這意味著b = 2.0e20 + 1.0是先對(duì)兩個(gè)double型字面量計(jì)算,然后再賦給float型變量b,精度丟失。

題主有興趣的話(huà),去看看IEEE754標(biāo)準(zhǔn),以及Google一下浮點(diǎn)數(shù)的計(jì)算

亮瞎她 回答

顯示的時(shí)候在 pri_name 前面添加 level個(gè)空格或者其它符號(hào) 就可以了

貓小柒 回答
  1. A c(a) 會(huì)調(diào)用 A::A(const A&),是 A 的拷貝構(gòu)造函數(shù),它與控構(gòu)造函數(shù)一樣,如果不自定義,編譯器會(huì)自動(dòng)生成一個(gè)。
  2. 使用花括號(hào)來(lái)初始化對(duì)象是 C++11 的標(biāo)準(zhǔn):

    1. 花括號(hào)調(diào)用構(gòu)造器會(huì)傾向于使用初始化列表構(gòu)造,被構(gòu)造會(huì)按照列表被填充;被構(gòu)造對(duì)象也可以選擇用 std::initializer_list 來(lái)捕獲這個(gè)列表。
      http://zh.cppreference.com/w/...
      例一,基本類(lèi)型可以直接填充:int a{10}。
      例二,std::array 是一個(gè)結(jié)構(gòu)體,內(nèi)部是原生數(shù)組,也可以自動(dòng)填充:std::array<int, 3> f3{1, 2, 3};。
      例三,std::vector 實(shí)現(xiàn)了 std::initializer_list 構(gòu)造:std::vector<int> v{10, 3}(得到長(zhǎng) 2 的 vector,v[0] 是 10,v[1] 是 3)。
    2. 在上述情況匹配失敗的時(shí)候,不會(huì)得到編譯錯(cuò)誤,而是會(huì)嘗試匹配類(lèi)的構(gòu)造器,例如:std::vector<std::string> v{10, "hello"},會(huì)得到長(zhǎng)度是 10 的 vector。因?yàn)榕c上面的例三對(duì)比,它匹配 vector(std::initializer_list<T>, const Allocator& alloc = Allocator()) 失敗了。
      http://zh.cppreference.com/w/...
    3. C++ 中 A a() 的作用往往出人意料,它不是用空參數(shù)構(gòu)造器構(gòu)造一個(gè) A 類(lèi)型的對(duì)象,而是聲明一個(gè)返回類(lèi)型是 A,函數(shù)名是 a,并且函數(shù)參數(shù)列表空的函數(shù);期待的空參數(shù)構(gòu)造方式應(yīng)該是 A a。11 標(biāo)準(zhǔn)選取了 A a{},其作用與 A a 無(wú)異。
敢試 回答

我將源代碼進(jìn)行了修改的 ,可以參考如下代碼 :

#include <iostream>
#include <cstdlib>

//前置聲明只能充當(dāng)?shù)淖饔?: 
//1.定義一個(gè)指向該類(lèi)型的指針和引用
//2.在不完全類(lèi)型期間只能充當(dāng)函數(shù)聲明的的參數(shù)類(lèi)型
class Date;   

class Time   
{
public:
    Time(int h, int m, int s): hour(h) , minute(m) , second(s){}; 
    ~Time(){};
    void displayTime(Date&);  // 錯(cuò)誤C2061    
private:
    int hour;
    int minute;
    int second;
   
};

class Date    
{
public:
    Date(int y, int m, int d): year(y) , month(m) , day(d){};
    ~Date(){}
    friend void Time::displayTime(Date &); //錯(cuò)誤C2245
private:
    int year;
    int month;
    int day;
};


//最后定義clear函數(shù)
void Time::displayTime(Date& date){
    std::cout <<date.year<<std::endl;
}
 
int main(){
    Date date(1,2,3);
    Time time(4,5,6);
    time.displayTime(date);
    return EXIT_SUCCESS;
}

下圖是成員函數(shù)充當(dāng)友元函數(shù)的操作順序 , 參考《C++ primer 第五版》 總結(jié)出的圖 :
注意 : 其中的 Window_mgr 等價(jià) Time 類(lèi) , Screen類(lèi)等價(jià)Date類(lèi)
圖片描述

孤島 回答

void create(){

int m,n;
printf("請(qǐng)輸入行數(shù)m\n");
scanf("%d",&m);
printf("請(qǐng)輸入列數(shù)n\n");
scanf("%d",&n);
printf("%d,%d\n",m,n);
int a[m][n];
for (int i = 0; i < m; i++){
    for (int j = 0; j < n; j++) {
        printf("請(qǐng)輸入矩陣%d%d值\n",i,j);
        getchar();
        //這里也應(yīng)該是a[i][j]
        scanf("%d", &a[i][j]);    
        printf("%d\t", a[i][j]);
    }
}

for(int i = 0; i < m; i++) {
    for(int j = 0; j<n; j++){
        //這里應(yīng)該是a[i][j]  
        printf("%d\n", a[i][j]);
    } 
}

}
int main(){

create();
return 0;

}

櫻花霓 回答

引用傳值

$items 循環(huán)改變的是自身

比如第一次循環(huán)引用傳值變成了 $arr, 第二次循環(huán)也就是循環(huán)的$arr,就等于當(dāng)前循環(huán)的數(shù)組沒(méi)每循環(huán)一次,初始數(shù)據(jù)都是上一次循環(huán)的結(jié)果。

第一次變成這樣 以此類(lèi)推

$arr=[
  [
      "id"=>1,
      "pid"=>0,
      "name"=>'北京市',
      "son"=>[
          [
              "id"=>3,
              "pid"=>1,
              "name"=>"海淀區(qū)"
          ]
      ]
  ],
  [
      "id"=>1,
      "pid"=>0,
      "name"=>'黑龍江省',
  ]
];

start_routine 參數(shù)的原型是

void *(*start_routine) (void *)

不是

void (start_routine)(void)

void (start_routine)(void*)

請(qǐng)參照文檔 http://man7.org/linux/man-pag...


默認(rèn)情況下,gcc 要開(kāi)啟 -Wreturn-type 才會(huì)警告 “在非 void 返回值函數(shù)中沒(méi)有 return 語(yǔ)句”,
一般建議打開(kāi) -Wall 選項(xiàng),可將所有警告當(dāng)成編譯錯(cuò)誤,如

gcc -Wall a.c

若使用 g++ 編譯,則不必顯式指定 -Wreturn-type,因它規(guī)定要寫(xiě) return(對(duì)非 void 返回值)。

櫻花霓 回答

語(yǔ)法上兩回事,畢竟小括號(hào)與花括號(hào)不同。但是列表初始化有時(shí)候等價(jià)于直接初始化(非聚合類(lèi)型),有時(shí)候等價(jià)于直接賦值成員(聚合類(lèi)型)。