const std :: string賦值/聲明中最適合什麼?使用構造函數(例如,const std::string WORD("hello");
)或使用相等的運算符(例如const std::string WORD= "hello";
)? 這些東西在內存使用情況或時間流程上有差異嗎?C++ const std :: string賦值
2
A
回答
2
對於任何合理的編譯器,生成的代碼在兩種情況下都是相同的。在這種情況下是否應該使用直接初始化或複製初始化基本上是基於意見的。
0
在這兩種情況下,通常編譯器都會使用"Return Value Optimisation"刪除副本。查看ideone here調用該代碼既不是普通的構造函數,也沒有賦值運算符,因爲它不打印他們被調用屏幕:
即:
#include <iostream>
class C
{
public:
C() {}
C(const char[]) { std::cout << "Ordinary Constructor" << std::endl; }
C& operator=(const char[]) { std::cout << "Assignment Operator" << std::endl; return *this; }
};
int main() {
std::cout << "Start" << std::endl;
C x1 = "Hello";
C x2("Hello");
std::cout << "End" << std::endl;
}
只是輸出:
Start
End
它不輸出:
Start
Assignment Operator
Ordinary Constructor
End
由於C + +允許跳過副本並臨時構建到位。
+1
它不會在這裏調用賦值操作符,因爲x1和x2都被初始化,它們不被賦值。 – kraskevich 2014-10-17 03:33:38
+0
'C x1 =「Hello」;'表示拷貝構造函數,不是賦值操作符 – 2014-10-17 03:39:25
0
的線條:
std::string x = "hello";
std::string x("hello");
都只會調用std::string
構造。也就是說,它們是相同的,都不會使用operator=
重載。
相關問題
- 1. 「std :: string const」與「const std :: string」
- 2. C++ const char *指針賦值
- 3. std :: string如何賦值操作符?
- 4. memset導致std :: string賦值崩潰
- 5. C++,爲什麼使用const std :: string&parameterName?
- 6. C++比較爲const char *到的std :: string
- 7. std :: string賦值時的分段錯誤
- 8. 運算符std :: string()const?
- 9. GCC 4.9 std :: string const char *
- 10. 從「std :: istringstream」初始化「const std :: string」
- 11. 返回值const&和const賦值 - dissassembly
- 12. 爲什麼std :: runtime_error :: what()返回const char *而不是std :: string const&
- 13. C++循環std :: vector <std :: map <std :: string,std :: string>>
- 14. C++ std :: string到布爾值
- 15. C++ std :: string和string
- 16. 在std :: string :: assign(std :: string const&)中的分段錯誤
- 17. 改變const的參考std :: string參考
- 18. C++爲const QList賦值if ... else
- 19. Const C++函數中的賦值
- 20. 可以CString :: Format()接收const std :: string?
- 21. 如何在std :: string中存儲const char * []?
- 22. 如何在std :: string中存儲const char *?
- 23. 無法將'std :: string'轉換爲'const char *
- 24. std :: string與靜態const的char數組
- 25. std :: string gets(char *)而不是(const char *)
- 26. 轉換爲const char **的爲std :: vector的<std::string>
- 27. 如何獲得const string&的值在C++
- 28. 爲什麼`std :: string`的賦值運算符是按值而不是`const`引用`char`的?
- 29. 錯誤不能將'std :: string {aka std :: basic_string <char>}'轉換爲'char'的賦值 - C++
- 30. C++ std :: string到Ruby VALUE
在這裏試一試並比較生成的程序集http://gcc.godbolt.org/ – 2014-10-17 02:21:58
兩者都使用構造函數。在你顯示的代碼中沒有賦值,也沒有'operator ='。 – chris 2014-10-17 02:40:33
[複製初始化和直接初始化之間C++有差異嗎?](http://stackoverflow.com/questions/1051379/is-there-a-difference-in-c-between-copy-initialization- and-direct-initializati) – Galik 2014-10-17 03:12:40