Best way to initialize QString












2















I have a QString variable as struct member. What is the best way to initialize it with default value:



struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}









share|improve this question


















  • 2





    Good writeup: QStringLiteral explained

    – Swordfish
    Nov 13 '18 at 11:59











  • @Swordfish Thanks for the link, interesting article.

    – svadum
    Nov 13 '18 at 12:05






  • 1





    Generally speaking: If you want to initialize a QString from a char*, use QStringLiteral. If you want to pass it to a method, check if that method has an overload for QLatin1String - if yes you can use that one, otherwise fall back to QStringLiteral. The only exception for both cases is an empty string - simply use QString().

    – Felix
    Nov 13 '18 at 12:06
















2















I have a QString variable as struct member. What is the best way to initialize it with default value:



struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}









share|improve this question


















  • 2





    Good writeup: QStringLiteral explained

    – Swordfish
    Nov 13 '18 at 11:59











  • @Swordfish Thanks for the link, interesting article.

    – svadum
    Nov 13 '18 at 12:05






  • 1





    Generally speaking: If you want to initialize a QString from a char*, use QStringLiteral. If you want to pass it to a method, check if that method has an overload for QLatin1String - if yes you can use that one, otherwise fall back to QStringLiteral. The only exception for both cases is an empty string - simply use QString().

    – Felix
    Nov 13 '18 at 12:06














2












2








2


1






I have a QString variable as struct member. What is the best way to initialize it with default value:



struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}









share|improve this question














I have a QString variable as struct member. What is the best way to initialize it with default value:



struct Foo
{
QString name = "name";
// or
// QString name = QStringLiteral("name");
// or
// QString name = QLatin1String("name");
// or something else...
}






c++ string qt qstring






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 13 '18 at 11:57









svadumsvadum

235




235








  • 2





    Good writeup: QStringLiteral explained

    – Swordfish
    Nov 13 '18 at 11:59











  • @Swordfish Thanks for the link, interesting article.

    – svadum
    Nov 13 '18 at 12:05






  • 1





    Generally speaking: If you want to initialize a QString from a char*, use QStringLiteral. If you want to pass it to a method, check if that method has an overload for QLatin1String - if yes you can use that one, otherwise fall back to QStringLiteral. The only exception for both cases is an empty string - simply use QString().

    – Felix
    Nov 13 '18 at 12:06














  • 2





    Good writeup: QStringLiteral explained

    – Swordfish
    Nov 13 '18 at 11:59











  • @Swordfish Thanks for the link, interesting article.

    – svadum
    Nov 13 '18 at 12:05






  • 1





    Generally speaking: If you want to initialize a QString from a char*, use QStringLiteral. If you want to pass it to a method, check if that method has an overload for QLatin1String - if yes you can use that one, otherwise fall back to QStringLiteral. The only exception for both cases is an empty string - simply use QString().

    – Felix
    Nov 13 '18 at 12:06








2




2





Good writeup: QStringLiteral explained

– Swordfish
Nov 13 '18 at 11:59





Good writeup: QStringLiteral explained

– Swordfish
Nov 13 '18 at 11:59













@Swordfish Thanks for the link, interesting article.

– svadum
Nov 13 '18 at 12:05





@Swordfish Thanks for the link, interesting article.

– svadum
Nov 13 '18 at 12:05




1




1





Generally speaking: If you want to initialize a QString from a char*, use QStringLiteral. If you want to pass it to a method, check if that method has an overload for QLatin1String - if yes you can use that one, otherwise fall back to QStringLiteral. The only exception for both cases is an empty string - simply use QString().

– Felix
Nov 13 '18 at 12:06





Generally speaking: If you want to initialize a QString from a char*, use QStringLiteral. If you want to pass it to a method, check if that method has an overload for QLatin1String - if yes you can use that one, otherwise fall back to QStringLiteral. The only exception for both cases is an empty string - simply use QString().

– Felix
Nov 13 '18 at 12:06












1 Answer
1






active

oldest

votes


















3














QStringLiteral will have the lowest runtime overhead. It is one of the few literal QString initializations with O(1) cost. QLatin1String will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…"). The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(



Initialization via QStringLiteral wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.






share|improve this answer
























  • QString str (QString());

    – Mike
    Nov 13 '18 at 20:39






  • 1





    @Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

    – Kuba Ober
    Nov 14 '18 at 18:34











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280545%2fbest-way-to-initialize-qstring%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









3














QStringLiteral will have the lowest runtime overhead. It is one of the few literal QString initializations with O(1) cost. QLatin1String will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…"). The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(



Initialization via QStringLiteral wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.






share|improve this answer
























  • QString str (QString());

    – Mike
    Nov 13 '18 at 20:39






  • 1





    @Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

    – Kuba Ober
    Nov 14 '18 at 18:34
















3














QStringLiteral will have the lowest runtime overhead. It is one of the few literal QString initializations with O(1) cost. QLatin1String will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…"). The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(



Initialization via QStringLiteral wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.






share|improve this answer
























  • QString str (QString());

    – Mike
    Nov 13 '18 at 20:39






  • 1





    @Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

    – Kuba Ober
    Nov 14 '18 at 18:34














3












3








3







QStringLiteral will have the lowest runtime overhead. It is one of the few literal QString initializations with O(1) cost. QLatin1String will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…"). The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(



Initialization via QStringLiteral wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.






share|improve this answer













QStringLiteral will have the lowest runtime overhead. It is one of the few literal QString initializations with O(1) cost. QLatin1String will be pretty fast, but have O(N) cost in length of the string. The intiialization with C string literal will have the highest O(N) cost and is equivalent to IIRC QString::fromUtf8("…"). The 2nd and 3rd initialization also adds an O(N) memory cost, since a copy of the string is made (!). Whatever “savings” you made in executable size thus promptly vanish as the program starts up :(



Initialization via QStringLiteral wins, although you may want to leverage modern C++11 custom literals to make it shorter. Resist the urge to use a macro for it: it’d be an extremely misguided approach as you pollute the global namespace with a short symbol.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 13 '18 at 12:14









Kuba OberKuba Ober

69.7k982187




69.7k982187













  • QString str (QString());

    – Mike
    Nov 13 '18 at 20:39






  • 1





    @Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

    – Kuba Ober
    Nov 14 '18 at 18:34



















  • QString str (QString());

    – Mike
    Nov 13 '18 at 20:39






  • 1





    @Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

    – Kuba Ober
    Nov 14 '18 at 18:34

















QString str (QString());

– Mike
Nov 13 '18 at 20:39





QString str (QString());

– Mike
Nov 13 '18 at 20:39




1




1





@Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

– Kuba Ober
Nov 14 '18 at 18:34





@Mike That's pointless, though. QString str; is all you need: it's a value type, and has a valid value after default-construction.

– Kuba Ober
Nov 14 '18 at 18:34


















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280545%2fbest-way-to-initialize-qstring%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Full-time equivalent

Bicuculline

さくらももこ